基本上,我必须创建一个绘制.wav文件的GUI。我想要包含一条移动线光标,该光标在与播放的音频同步的轴上移动。
基本上,每当我点击“播放音频”按钮时,该行应按照音频文件的确切时间段在图表中移动。
答案 0 :(得分:0)
由于我没有您的音频数据,我将创建5000个以1000 Hz采样的随机点进行播放和绘图
x=[randn(2500, 1)/10; randn(2500,1)*10]; % noise with a step change in the middle
fs = 1000;
time=(0:length(x)-1)/fs;
figure(1)
plot(time, x)
xlabel('Time (s)')
grid on
end_time = length(x)/fs;
现在我将创建一条红色垂直线,它将在播放时沿着数据移动。需要存储句柄h,以便更新x数据
h=line([0,0],[-30,30],'color','r','marker', 'o', 'linewidth', 2);
以下是用户点击播放按钮时将运行的代码:
sound(x, fs) % starts playing the sound
tic % Starts Matlab timer
t=toc; % Gets the time since the timer started
while t<end_time
set(h, 'xdata', t*[1,1]) % Moves the line to the time indicated by t
drawnow % necessary to get figure updated
t=toc; % get the current time for the next update
end
此代码尽可能快地更新该行,因此如果您拥有更快的计算机,您将获得比计算机速度更慢的更新。