android– 如何从实时音频开发频谱分析仪?

android– 如何从实时音频开发频谱分析仪?,第1张

概述我正在开发一个应用程序,实时从麦克风获取源音频,没有文件存储.基本上,我使用:mRecorder=newMediaRecorder();mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);mRecorder.setAudioEncoder(Media

我正在开发一个应用程序,实时从麦克风获取源音频,没有文件存储.基本上,我使用:

mRecorder = new MediaRecorder();mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mRecorder.setoutputFormat(MediaRecorder.OutputFormat.THREE_GPP);mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);mRecorder.setoutputfile("/dev/null");

我的问题是,如何从这个实时音频中创建频谱图形,没有文件.可以办到?

我读到的所有帖子都在分析缓冲文件.

谢谢你,对不起我的英语.

解决方法:

是的,它可以做到.

您只需要一个快速的FFT算法!

首先确定你想要的频率分辨率,例如你可以设置麦克风的采样率为8000hz,现在选择一个像1024或2048这样的块大小来从麦克风中捕获.

如果您选择2048点和采样率8000,您的频率分辨率是否为3.9063(8000/2048).

在2048点上应用一个窗口函数,然后应用FFT并获得幅度!

记得Nyquist定理采样率= 8000/2 = 4000,现在你知道你的FFT可以在4000 Hz时获得3.9063 Hz之间的频率.

相应频率的FFT Bin:

1 -> 3,90625  hz    2 -> 7,8125  hz    3 -> 11,71875 hz    ...    1024 -> 4000 hz    ...    2048 - > 8000 hz

对于它,您只需要FFT的前半部分值,在这种情况下为1024.

现在,如果您从FFT绘制这些数据,您将拥有一个频谱!

编辑

伪代码:

#construct one hanning window FunctionChunk = 2048;windowed = [Chunk];hanning = [Chunk];for i 1:Chunk:      hanning[i] = ((1 - cos(i*2*pi/Chunk-1))/2)#start capture from Micwhile true:    #into values capture 2048 points from your mic    values=dataFromMic(Chunk);    #Apply Window hanning = multiply window function(hanning) over your 2048 points    for i 1:Chunk:            windowed[i] = values[i] * hanning[i]    #Apply FFT     fftData=fft(windowed);    #Get Magnitude (linear scale) of first half values    Mag=abs(fftData(1:Chunk/2))    # update/show results    plot(Mag)end
总结

以上是内存溢出为你收集整理的android – 如何从实时音频开发频谱分析仪?全部内容,希望文章能够帮你解决android – 如何从实时音频开发频谱分析仪?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1098784.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存