2011-05-04 140 views
69

我想在我的Android手機上錄製人聲。我注意到Android有兩個類來執行此操作:AudioRecordMediaRecorder。有人能告訴我這兩者之間有什麼區別,什麼是適當的用例?Android AudioRecord vs. MediaRecorder錄製音頻

我希望能夠分析實時人類語音來衡量幅度等我是正確的理解是AudioRecord更適合這項任務?

我的Android guide webpage for recording audio注意到了官方的,他們使用MediaRecorder沒有提到AudioRecord的。

回答

58

如果您想在錄製過程中進行分析,您需要使用AudioRecord,因爲MediaRecorder會自動記錄到文件中。 AudioRecord的缺點是,在調用startRecording()之後,您需要從AudioRecord實例中自行輪詢數據。此外,您必須快速讀取和處理數據,以便內部緩衝區不會溢出(請查看logcat輸出,AudioRecord會告訴您何時發生這種情況)。

+0

您是否有AudioRecord的示例代碼?我發現的大多數是MediaRecorder ... – 2014-09-12 02:19:29

+0

@RommelParas在「telegram」中爲這個類找到這個類。 https://github.com/DrKLO/Telegram/blob/master/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java – David 2016-11-14 07:45:42

13

AudioRecord首先將數據保存在minBuffer中,然後從那裏複製到臨時緩衝區,在MediaRecorder中將其複製到文件中。 在AudioRecord我們需要的API setRecordPosition()保存的數據在需要的位置進行復制,而在MediaRecorder文件指針是做這件工作來設置標記的位置。 AudioRecord可用於那些在仿真器上運行的應用程序,這可以通過提供低的採樣率,例如8000,同時使用MediaRecorder音頻不能使用模擬器進行記錄來完成。 AudioRecord屏幕在某個時間後進入休眠狀態,而在MediaRecorder屏幕不會進入休眠狀態。

21

據我所知MediaRecorder是一個黑盒子,它給出輸出壓縮音頻文件和AudioRecorder給你只是原始聲音流,你必須自己壓縮它。

MediaRecorder爲您提供上次調用getMaxAmplitude()方法所需的最大靈活度,以便您可以實現聲音可視化器。

所以在大多數情況MediaRecorder,除了那些在你應該做一些複雜的聲音處理,你需要訪問原始音頻流的最佳選擇。

+0

感謝您的提getMaxAmplitude()方法。這很可能是我所需要的。 – 2014-03-20 22:03:27

+0

如何使用MediaRecorder實現可視化器? – OnePunchMan 2015-03-30 10:00:26