我正在尝试用 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);
问题是,当我说话时,我希望显示频谱图,所以它应该在我说话时更新。当音频来自麦克风时,如何绘制频谱图?所以我应该能够实时看到频谱图
我也尝试过这个
% 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
但它只会在 while 循环钓鱼时显示频谱图(因此运行 60 次后)
MATLAB 本质上是单线程的。一次只能发生一件事。这使得实时任务有些困难。正如你所指出的,recordblocking
在这 100 秒过去之前,不会将控制权返回给您的脚本。关键就在这个词里blocking.
解决这个问题的方法是回调和非阻塞函数。 audiorecorder 对象有一些方法和属性可以实现这种行为。
The audiorecorder特性:
- StartFcn
:设置一个在开始异步录制时执行的函数
- StopFcn
:停止录音时执行的函数
- TimerFcn
: 每隔一段时间执行的函数TimerPeriod
录音期间的秒数。
然后record method将在后台开始录制和处理,按照指示调用上述函数。
通过定期更新回调函数中的数据,您可以更新您的绘图。不幸的是,以允许实时更新的有效方式来完成这同样不是一件容易的事。但这应该让你开始。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)