我想在matlab中制作一个频谱图,这是我的代码:
% Record your voice for 100 seconds.
recObj = audiorecorder;
disp('Start speaking.')
recordblocking(recObj, 100);
% Store data in double-precision array.
my= getaudiodata(recObj);
figure;
specgram(my,512);
Run Code Online (Sandbox Code Playgroud)
问题是,虽然我说我想要显示频谱图,所以它应该在我说话时更新.当音频来自麦克风时,如何绘制频谱图?所以我应该能够实时看到频谱图
我也尝试过这个
% Record your voice for 100 seconds.
recObj = audiorecorder;
disp('Start speaking.')
a=0;
figure;
while a<60
recordblocking(recObj, 100);
% Store data in double-precision array.
my= getaudiodata(recObj);
specgram(my,512);
a=a+1;
end
Run Code Online (Sandbox Code Playgroud)
但它只会在while循环钓鱼时显示频谱图(因此在运行60次后)
MATLAB本质上是单线程的.一次只能发生一件事.这使得实时任务有些困难.如您所述,recordblocking
在100秒过去之前,不会将控制权返回给您的脚本.关键在于阻止这个词.
解决这个问题的方法是使用回调和非阻塞函数.audiorecorder对象有一些方法和属性可以实现这种行为.
的audiorecorder
属性:
- StartFcn
:设置将在启动的异步记录执行功能
- StopFcn
:在停止记录所要执行的功能
- TimerFcn
:该功能将被执行的每TimerPeriod
秒的记录期间.
然后该record
方法将在后台开始记录和处理,按照指示调用上述功能.
通过定期更新回调函数中的数据,您可以更新您的绘图.不幸的是,以允许实时更新的有效方式做同样不容易.但这应该让你开始.