【问题标题】:Android:How To Get Media Recorder Output In MP3 Format?Android:如何获取 MP3 格式的媒体记录器输出?
【发布时间】:2011-02-03 12:51:13
【问题描述】:

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

我需要 mp3 格式的输出文件。谢谢。

【问题讨论】:

  • 仅供参考:MP3 技术已获得专利。如果您打算使用 MP3 来减少本地存储使用量(并假设这是一个商业应用程序),您最好使用 Ogg Vorbis 之类的东西。
  • 嗨,在 android 中,我在原始流中录制语音并转换为 wav。但在 wav 需要更多尺寸时,我需要减小尺寸,以便将 wav 转换为 mp3。我在这里看到了stackoverflow.com/questions/3641920/…,但我不知道如何使用它,请帮助我。

标签: android


【解决方案1】:

目前 Android 框架中没有内置 MP3 编码器(据我所知),因此您无法开箱即用。为此,您需要在项目中添加 MP3 编码库。

对此,您可以查看thisstackoverflow 帖子以获得完整答案。

【讨论】:

  • 嗨,在 android 中,我在原始流中录制语音并转换为 wav。但在 wav 需要更多尺寸时,我需要减小尺寸,以便将 wav 转换为 mp3。我看到了这里发布的链接,但我不知道如何使用它 android 请帮助我。
  • 2021 年的今天仍然如此吗? MP3 一直在流行,我听说自 2017 年以来免费获得专利/许可。
  • @Phil 如果您查看支持的媒体格式 (developer.android.com/guide/topics/media/media-formats),您会发现 MP3 在 Android 上仍然没有编码器。只有一个解码器。
【解决方案2】:

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);

【讨论】:

  • 我认为不支持录制,因为我在编码端看不到点。
  • 支持。试试看。
  • en.m.wikipedia.org/wiki/Comparison_of_video_container_formats 它可以容纳l mp3 文件 - MPEG-2/4 (HE)-AAC, MPEG-1/2 Layers I, II, III (MP3), AC-3, Apple Lossless, ALS、SLS、Vorbis(带有私有 objectTypeIndication)、其他[26]
  • 我认为这是说 mp3 编码可以存储在 mpeg 包装器中。对吗?
  • 仅仅因为您的文件扩展名是 .mp3 并且您可以播放它并不能使其成为正确的 mp3 文件。我很确定 Android 不会开箱即用。
【解决方案3】:

Android框架上肯定有MP3编码器。

就像我回答 here on 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();

这里的重要部分是setOuputFormatsetAudioEncoder。如果您同时使用 MediaRecorder.OutputFormat.MPEG_4MediaRecorder.AudioEncoder.AAC,MediaRecorder 会录制可播放的 mp3。

有趣的是,这个解决方案是我对有效方法进行试验的结果,我不知道它为什么有效。我希望有人可以在 cmets 中对此有所了解。

编辑

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

此解决方案似乎有效的原因是 MediaPlayer 在开始轨道之前将编码识别为 AAC(无论文件扩展名如何)。所以虽然输出文件的mime类型是audio/mp4,但编码肯定是AAC。

【讨论】:

  • 它不会创建实际的 MP3 文件,它只是创建一个扩展名为 MP3 的音频文件,但它实际上不是 MP3。
  • 其实创建的文件返回的mimetype是audio/mp4。听起来确实像 mp3,但我注意到它不一样。
  • 这个答案绝对不正确。它似乎可以工作的原因是大多数播放器足够聪明,可以仅仅因为文件名为 myrecording.mp3,它实际上是 .mp4 容器中的 .aac 编码音频流。 Mp3 在 Android 中不是原生的(毫无疑问是由于版权问题) 你只是在伪造一个不是 mp3 的 m4a 或 ACC。我发现在我的应用程序中对我来说非常有效的最佳方法是使用 Java lame 库github.com/nwaldispuehl/java-lame
  • 正如@JohnSmith 和其他人正确指出的那样,Android 没有内置 MP3 编码器,并且上述代码生成的文件不是 MP3 编码的。感谢分享为 Java John 移植的 Lame 库,它是 MP3 编码的最佳资源。
猜你喜欢
  • 1970-01-01
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多