android 自定义频谱,android – 如何从实时音频开发频谱分析仪?
我正在開發一個應用程序,實時從麥克風獲取源音頻,沒有文件存儲.基本上,我使用:
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 Function
Chunk = 2048;
windowed = [Chunk];
hanning = [Chunk];
for i 1:Chunk:
hanning[i] = ((1 - cos(i*2*pi/Chunk-1))/2)
#start capture from Mic
while 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,audio,spectrum
來源: https://codeday.me/bug/20191004/1851565.html
總結
以上是生活随笔為你收集整理的android 自定义频谱,android – 如何从实时音频开发频谱分析仪?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 热电偶单片机代码c语言,基于STC12C
- 下一篇: 储存外部资源的Android项目子目录,