如何在 matlab 中同时绘制图表来播放音频文件?
How can play an audio file with plotting a diagram simultaneously in matlab?
我想播放音频文件同时绘制和更新图表。但是,我的音频文件被中断了。我想在后台流畅播放音频文件,同时更新图形。
for i=1:10
player = audioplayer(audio, Fs);
play(player);
scatter(x(i),y(i),'r.')
end
你的问题是 play 是一个异步调用:这意味着程序在调用 'play(player)'.
后立即继续执行。
如果您打算在每次迭代时播放不同的文件,请尝试等到当前文件播放完毕,您可以使用类似:
while player.isplaying
pause(0.001)
end
如果你打算播放一个信号并改变剧情,将 play(player) 移到 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
通常在绘图时 'real-time' 最好使用 tic-toc 来计算当前时间与音频开始播放时间的比较。
此外,为了提高性能,最好设置绘图的 xdata 和 ydata 而不是每次都重新绘制它,因为此操作要快得多(不会更新轴的所有其他属性)。
你可以看看我曾经分享过的一个旧脚本来做 'real-time' 绘图:
https://www.mathworks.com/matlabcentral/fileexchange/14397-real-time-scope-display--simple-script-
我想播放音频文件同时绘制和更新图表。但是,我的音频文件被中断了。我想在后台流畅播放音频文件,同时更新图形。
for i=1:10
player = audioplayer(audio, Fs);
play(player);
scatter(x(i),y(i),'r.')
end
你的问题是 play 是一个异步调用:这意味着程序在调用 'play(player)'.
后立即继续执行。如果您打算在每次迭代时播放不同的文件,请尝试等到当前文件播放完毕,您可以使用类似:
while player.isplaying
pause(0.001)
end
如果你打算播放一个信号并改变剧情,将 play(player) 移到 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
通常在绘图时 'real-time' 最好使用 tic-toc 来计算当前时间与音频开始播放时间的比较。 此外,为了提高性能,最好设置绘图的 xdata 和 ydata 而不是每次都重新绘制它,因为此操作要快得多(不会更新轴的所有其他属性)。
你可以看看我曾经分享过的一个旧脚本来做 'real-time' 绘图: https://www.mathworks.com/matlabcentral/fileexchange/14397-real-time-scope-display--simple-script-