21

我正在构建一个 android 应用程序,具有通过麦克风捕获声音并通过耳机播放的功能。为此,我使用了“AudioRecord”和“AudioTrack”。以下是我正在使用的部分代码,(仅供理解)

mInBufferSize = AudioRecord.getMinBufferSize(mSampleRate,
            AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat);
mOutBufferSize = AudioTrack.getMinBufferSize(mSampleRate,
            AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat);
mAudioInput = new AudioRecord(MediaRecorder.AudioSource.MIC,
            mSampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat,
            mInBufferSize);
mAudioOutput = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate,
            AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat,
            mOutBufferSize, AudioTrack.MODE_STREAM);

但主要问题是我想以 mp3 格式录制传入的声音?请帮助我,我将非常感激......

提前致谢

4

6 回答 6

52

有一种使用 MediaRecorder 保存 .mp3 文件的解决方法。就是这样:

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 显然可以录制可播放的MediaRecorder.OutputFormat.MPEG_4mp3 MediaRecorder.AudioEncoder.AAC。希望这可以帮助某人。

当然,如果您更愿意使用 AudioRecorder 类,我认为下面链接的源代码 Chirag 应该可以正常工作 - https://github.com/yhirano/Mp3VoiceRecorderSampleForAndroid(尽管您可能需要将其中一些从日语翻译成英语)

编辑:正如布鲁诺和其他一些人在评论中指出的那样,这不会对MP3 中的文件进行编码。编码仍然是AAC。但是,如果您尝试播放通过上述代码使用 .mp3 扩展名保存的声音,它仍然可以毫无问题地播放,因为大多数媒体播放器都足够智能,可以检测到真正的编码。

于 2015-10-10T14:01:48.400 回答
11

在 git 上,您可以找到 Mp3 Voice Recorder Sample For Android 的源代码。

签出此源代码。

于 2012-08-16T10:58:41.407 回答
1

我知道这是一个老问题。但如果它可以帮助我创建一个带有 android java full recording app demo 的存储库,那么输出文件是一个 mp3 文件。请记住,如果不需要请求用户权限,我将目标 sdk 设置为 21。这仅用于演示目的。您可以克隆并使用它。

我使用的大部分代码都来自这个 repo:this

我的演示仓库: mp3 录音应用

于 2019-11-13T18:07:27.040 回答
0

将您outputformat的录音机设置为MediaRecorder.OutputFormat.DEFAULT. 我用过这个,生成的音频文件是 mp3。

于 2015-11-10T05:25:08.157 回答
-1

这对我有用

mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setOutputFile(Environment.getExternalStorageDirectory()
    .getAbsolutePath() + "/record.mp3");
mediaRecorder.prepare();
mediaRecorder.start();
于 2016-06-05T07:52:44.257 回答
-2

这对我来说是工作

outputFile = Environment.getExternalStorageDirectory()
            .getAbsolutePath() + "/myrecording.mp3";
    myAudioRecorder = new MediaRecorder();
    myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    myAudioRecorder.setOutputFile(outputFile);`

myAudioRecorder.prepare(); myAudioRecorder.start();`

于 2015-03-28T08:52:26.753 回答