如何在matlab中同时绘制图表来播放音频文件?

问题描述:

我想播放音频文件同时绘制和更新图表。但是,我的音频文件被中断。我想在后台顺利播放音频文件并同时更新图形。如何在matlab中同时绘制图表来播放音频文件?

for i=1:10 
player = audioplayer(audio, Fs); 
play(player); 
scatter(x(i),y(i),'r.') 
end 
+0

HI,它看起来像你试图在每次迭代中发挥不同的声音是什么意图? –

+0

是的,但它听不到:( – Amir

+0

)尝试在循环结束时停止播放器并在某处使用暂停 –

你的问题是,游戏是一个异步调用:它意味着程序执行调用“玩(播放器)”之后立即继续。

如果你打算在每次迭代中发挥不同的文件,试图等到当前文件完成后,您可以使用类似:

while player.isplaying 
    pause(0.001) 
end 

如果你打算玩一个信号,改变地块,移动播放(播放器)的外部for循环,每个绘图点之间与您的代码添加一些延迟,例如:

player = audioplayer(audio, Fs); 
play(player); 
for i=1:10 
    scatter(x(i),y(i),'r.') 
    pause(0.1) 
end 

示例正在播放一个信号和情节被更新:

建立一个线性调频信号:

Fs = 16e3; 
T = 10; 
t = 0:1/Fs:T; 
f0 = 100; 
phi = 2*pi*t.^2*f0; 
sig = 0.1*sin(phi); 


% Start playing the sound: 
player = audioplayer(sig,Fs); 
play(player); 


% Plotting stuff: 
dPhi = gradient(phi)*Fs;  
figure; 
numPlots = 20; 
N = numel(t); 
for n = 1 : numPlots 
    pause(T/numPlots) 
    ind = 1:N/numPlots*n; 
    plot(t(ind), dPhi(ind)) 
end 

总体策划“实时”时,最好使用TIC-TOC相比,音频开始播放的时间推测当前时间。 同样为了提高性能,最好设置绘图的xdata ydata,而不是每次重新绘制它,因为此操作快得多(不更新轴的所有其他属性)。

你可以看一下我曾经分享做“实时”绘制的旧脚本: https://www.mathworks.com/matlabcentral/fileexchange/14397-real-time-scope-display--simple-script-