音频频谱特效 jaVa_基于Matlab dsp工具箱 的实时音频采集及频谱显示

题外话

这几天在寻找可以使 Matlab 实时采样音频并处理的函数。刚开始找到的是 网上很多例子采用的 analoginput( ),但是目前在 64位 Windows上无法使用。其次是 audioRecorder( ) , 可以调用但缺点是每次调用都会开关一次麦克风,延迟十分严重, 无法实现要求的实时效果。

在 Matlab 帮助文档里游荡一会儿之后,发现DSP工具箱里面有个函数 dsp.AudioRecorder( ),试了一下可以实时采样。创建对象之后麦克风会一直处于开启状态,后台线程也会持续将麦克风数据写入到缓冲区,我们只需要去缓冲区读取数据就行。

效果演示

0fad67422dc8aabd04f97a9c5f9519f0.gif

代码

PS:对于dsp.AudioRecorder在新版Matlab中的变化情况,参考官方文档。

function soundtest()

timeLength=0.1; % 采样时长,单位秒

samples=timeLength*44100; % 默认采样率44100,计算采样点数

H = dsp.AudioRecorder(...

'NumChannels' , 1 ,... % 1 个通道

'DeviceDataType', '16-bit integer',... % 16位采样

'OutputNumOverrunSamples',true,... % 启用溢出标志

'SamplesPerFrame', samples); % 采样点数

[audioIn,~] = step(H); % 第一次采样

figure('Name','实时频谱','MenuBar'...

,'none','ToolBar','none','NumberTitle','off');

xdata=(1:1:samples/2)/timeLength;

axes1= subplot(1,2,1);

axes2= subplot(1,2,2);

pic= plot(axes1, 1:1:samples, audioIn); % 初始化音频波形图

pic2= bar(axes2,xdata, xdata*0,'r'); % 初始化频谱图

set(axes1,'xlim', [0 samples], 'ylim', ...

[-0.15 0.15],'XTick',[],'YTick',[] );

set(axes2,'xlim', [min(xdata) max(xdata)], 'ylim',[0 6] , ...

'xscale','log','XTick',[1 10 100 1e3 1e4],'YTick',[] );

xlabel(axes2,'频率 (Hz)');

xlabel(axes1,'波形');

axes2.Position=[0.040 0.48 00.92 0.48]; % 左,下,宽度,高度

axes1.Position=[0.040 0.06 0.92 0.25];

drawnow;

while 3>2

[audioIn,Overrun] = step(H); % 采样

if Overrun > 0

warning(' 数据溢出 %d 位\n',Overrun);

end

ydata_fft=fft(audioIn); % 傅里叶变换

ydata_abs=abs(ydata_fft(1:samples/2));% 取绝对值

set(pic, 'ydata',audioIn); % 更新波形图数据

set(pic2, 'ydata',log(ydata_abs)); % 更新频谱图数据

drawnow; % 刷新

end

end

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[基于Matlab dsp工具箱 的实时音频采集及频谱显示]http://www.zyiz.net/tech/detail-93705.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值