Android:如何获取MP3格式的媒体记录器输出?

Piy*_*ush 12 android

我正在创建一个包含录音和播放的应用程序.是否可以以MP3格式录制文件?

我需要输出文件作为mp3格式.谢谢.

Lio*_*ior 11

目前Android框架中没有内置MP3编码器(据我所知),所以你无法开箱即用.您需要在项目中添加MP3编码库才能执行此操作.

为此,您可以查看 stackoverflow帖子以获得完整答案.


Dav*_*vid 8

2015年更新:

Android正式支持MP3 - (编辑) - 但是,这仅用于解码,而不是编码.

http://developer.android.com/guide/appendix/media-formats.html

核心媒体格式:MP3•单声道/立体声8-320Kbps恒定(CBR)或可变比特率(VBR)MP3(.mp3)

  • (编辑) - 对于较小的文件大小,您可以使用.mp4.您可以使用以下方式进行设置:

    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

  • 我认为不支持录制,因为我在编码端没有看到点。 (2认同)
  • 仅仅因为您的文件扩展名是 .mp3 并且您可以播放它,并不意味着它就是正确的 mp3 文件。我很确定 Android 不会立即执行此操作。 (2认同)

Adv*_*t S 6

Android框架上肯定有一个MP3编码器.

就像我在stackoverflow上回答的那样,你需要做的就是:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setOutputFile(Environment.getExternalStorageDirectory()
        .getAbsolutePath() + "/myrecording.mp3");
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.prepare();
recorder.start();
Run Code Online (Sandbox Code Playgroud)

这里的重要部分是setOuputFormatsetAudioEncoder.MediaRecorder如果你使用的记录播放的MP3 MediaRecorder.OutputFormat.MPEG_4MediaRecorder.AudioEncoder.AAC在一起.

有趣的是,这个解决方案是我尝试工作的结果,我不知道为什么它的工作原理.我希望有人能在评论中对此有所了解.

编辑

正如@JohnSmith和其他一些人在评论中指出的那样,这不会对 MP3格式的音频进行编码,并且Android上没有内置的MP3编码器.

此解决方案似乎有效的原因是MediaPlayer在开始跟踪之前将编码识别为AAC(无论文件扩展名如何).因此,尽管输出文件的mime类型是audio/mp4,但编码绝对是AAC.

  • 这个答案绝对不正确.SEEMS工作的原因是大多数玩家都足够聪明,因为该文件名为myrecording.mp3,它实际上是.mp4容器中的.aac编码音频流.Mp3在Android中不是原生的(毫无疑问是由于版权)你只是假装m4a或ACC不是mp3.我发现这个在我的应用程序中工作效果令人难以置信的最佳方法是使用Java lame库http://github.com/nwaldispuehl/java-lame. (3认同)