2011-01-23 65 views
20

我試圖使用AudioRecord類來錄製WAV文件。問題是它只提供原始PCM數據,如果我將它寫入文件,則沒有標題信息,因此它不會在任何媒體播放器中播放。我怎樣才能從這個原始數據創建一個WAV文件?使用Android SDK從原始PCM數據創建WAV文件

或者,還有什麼其他方式可以將Android中的聲音錄製到WAV文件(或MP3)?

哦,我知道MediaRecorder無法使用,因爲它不支持WAV或MP3格式。

+0

哦...我試過在android中讀取原始PCM數據...請問您可以發佈您使用的代碼嗎? – Atmocreations 2012-03-02 18:27:00

回答

13

好的,我有這個想通了。這篇文章是在幫助我至關重要: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

基本上,我用ByteArrayOutputStream從AudioRecord,然後讓我把字節數組,它的大小,當這個過程完成寫的原始PCM數據。然後,我可以將這些數據與SampleRate,BitRate和Stereo/Mono設置一起使用,以根據上述鏈接創建WAV標頭。生成的文件完美地工作!

0

檢查MediaRecorder.setOutputFormat(),您可以爲您的錄製設置不同的容器格式;有MediaRecorder.OutputFormat.MPEG_4和MediaRecorder.OutputFormat.THREE_GPP;沿着RAW的唯一允許的格式是setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

對不起,但MP3無濟於事。你真的需要MP3錄音? MP3的反面的WAV是容器,而不是格式; WAV可以是任何類型的編碼格式。

您總是可以自由地在您的原始pcm數據前添加一些WAV RIFF標題(只要您完全知道格式)。在這裏檢查它是如何看起來像: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

+0

我絕對需要將輸出文件設置爲WAV(PCM編碼)或MP3。它上傳到的服務需要這個。所以,據我所見,我無法使用MediaRecorder。我也是 – user496854 2011-01-24 03:09:10

+0

我絕對需要輸出文件爲WAV(PCM編碼)或MP3。它上傳到的服務需要這個。所以,據我所見,我無法使用MediaRecorder。我對所有低級別的東西也很不滿意,所以我不知道自己在創建heade時會有多好。有沒有這種功能的Java包? – user496854 2011-01-24 03:14:38

+0

實際上我發現這個:http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java,這讓它更容易工作。但我不知道如何獲得字節40的數據塊的大小。我將原始PCM數據寫入文件,那麼它只是該文件的大小? – user496854 2011-01-24 07:01:55

-2

您可能想要使用mediarecord類