2011-01-23 102 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类