如何在 android 中使用 MediaRecorder 录制高质量的音频?

How to record good quality audio using MediaRecoder in android?

我正在尝试使用媒体录音机在 android 中录制音频。它适用于 3gp 音频,但当我尝试使用 aac 格式的相同代码时,它失败了。 (这是我的 aac 格式代码):

final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.acc";
final MediaRecorder myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
        myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AAC_ADTS);
        myAudioRecorder.setOutputFile(outputFile);
MediaPlayer mediaPlayer = new MediaPlayer();
                    mediaPlayer.setDataSource(outputFile);
                    mediaPlayer.prepare();
                    mediaPlayer.start();

我已经添加了权限,并且我正在使用按钮正确触发这些功能。为了简单起见,我在这里只写了主要代码 我的问题:

录制和播放 aac 格式声音的正确方法是什么?

使用媒体录音机和媒体播放器在 android 中录制和播放音频的最佳格式是什么?我该如何实现?我尝试使用 3gp,但它的音质很差。

如果您使用 audioRecord 对象而不是 mediaRecorder 对象,那么您可以更自由地自定义录制和编码麦克风输出的方式。

AudioRecord 确实需要更长的时间来理解和实现,但如果您想坚持使用 mediaRecorder 对象,那么我建议使用 AAC_ADTS 作为音频编码器并允许输出格式为 THREE_GPP。

否则,这可能会帮助您编码原始 AAC 文件:

How to generate the AAC ADTS elementary stream with Android MediaCodec

已解决

我终于找到了自己录制优质音频的正确工作解决方案。以下是您需要为高质量录音做的一些修改:

使用 .m4a 扩展名保存文件。 final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.m4a"; 并做

myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setAudioEncodingBitRate(16*44100);
myAudioRecorder.setAudioSamplingRate(44100);

Whosebug 上的许多解决方案会建议 .setAudioEncodingBiteRate(16),但 16 太低并且没有意义。

来源:@Grant 在 Whosebug 上的回答 very poor quality of audio recorded on my droidx using MediaRecorder, why?

编辑:我想用 .aac 扩展名保存文件的唯一原因是我假设 .aac 文件会更清晰,但因为我能够将文件保存在没有 .aac 扩展名的好质量就没有必要了。