如何在matlab中同时绘制图表来播放音频文件?
问题描述:
我想播放音频文件同时绘制和更新图表。但是,我的音频文件被中断。我想在后台顺利播放音频文件并同时更新图形。如何在matlab中同时绘制图表来播放音频文件?
for i=1:10
player = audioplayer(audio, Fs);
play(player);
scatter(x(i),y(i),'r.')
end
答
你的问题是,游戏是一个异步调用:它意味着程序执行调用“玩(播放器)”之后立即继续。
如果你打算在每次迭代中发挥不同的文件,试图等到当前文件完成后,您可以使用类似:
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-
HI,它看起来像你试图在每次迭代中发挥不同的声音是什么意图? –
是的,但它听不到:( – Amir
)尝试在循环结束时停止播放器并在某处使用暂停 –