如何在 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 扩展名的好质量就没有必要了。
我正在尝试使用媒体录音机在 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 扩展名的好质量就没有必要了。