本篇幫大家一起回顧一下Android常用的錄音工具,MediaRecorder,AudioRecord,這兩個工具錄製音頻還是有一點不同的,MediaRecorder錄製音頻(也可以錄製視頻)比較簡單,創建完成,塞進去指定路徑就可以,它會幫你完成其他工作,而AudioRecord則是給你具體的音頻流,這個工具比較適合對音頻修改,壓縮等需求的場景。但是MediaRecorder也能獲取到音頻流,相比AudioRecord,簡直麻煩到家了,但是我還是堅持完成了,這個後邊講一下。我沒有對音質問題進行研究,我只研究了怎麼用各種方法得到體積最小的音頻。
MediaRecorder
在開始之前,一定要記得要權限,三個權限,內存讀寫權限,音頻錄製權限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
好,下面開始介紹一下創建過程,先構造出MediaRecorder,使用起來還是比較簡單的,我看了幾篇博客,都寫的差不多少,
mediaRecorder = new MediaRecorder();
然後是參數的設置,介紹一下主要的幾個參數:
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
設置錄製的音頻源,這裏我們用手機mic就可以了,千萬別瞎放啊,還有這個方法一定要在設置輸出格式setOutputFormat()之前調用,不然會拋異常。
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
設置音頻輸出格式,我們用AMR,這個格式IOS也可以用,可以省不少事。而且amr相對來說體積比較小,且音質還說的過去。
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
設置音頻的編碼格式,也用AMR
mediaRecorder.setOutputFile(path);
指定錄音輸出路徑,根據自己的項目隨意改,願意寫到哪就寫到哪
mediaRecorder.setAudioSamplingRate(8000);
然後關乎音頻大小的就是上面這個參數,採樣率的設置,源碼裏有關於具體使用場景的採樣率,但是8k就是我們要的最小的
mediaRecorder.prepare();
mediaRecorder.start();
好了,基本參數基本就設置完成,調用prepare和start就可以開始了,prepare一定要在start之前調用,否則IllegalStateException伺候。
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
當錄音結束後,一定要及時釋放,不釋放的話,在下一次使用的時候會抱一個-38的錯誤,mic在佔用中。。
霧擦。。傳了一個小Demo上去,不知怎的它給我定了5積分,本想0積分供參考的。。沒關係,如果需要的話,私我郵箱。