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

问题描述 投票:0回答:2

我正在尝试使用媒体录音机在 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,但声音质量较低。

android android-studio android-layout android-mediaplayer android-mediarecorder
2个回答
5
投票

已解决

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

使用 .m4a 扩展名保存文件。

final String outputFile = Environment.getExternalStorageDirectory().getAbsolutePath() + "/recording.m4a";
并做

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

stackoverflow 上的许多解决方案都会建议

.setAudioEncodingBiteRate(16)
但 16 太低并且毫无意义。

来源:@Grant 在 stackoverflow 上的回答 我的 droidx 使用 MediaRecorder 录制的音频质量非常差,为什么?

编辑:我想用 .aac 扩展名保存文件的唯一原因是我假设 .aac 文件会更清晰,但由于我能够在没有 .aac 扩展名的情况下以良好的质量保存文件,因此无需选择它.


1
投票

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

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

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

如何使用Android MediaCodec生成AAC ADTS基本流

© www.soinside.com 2019 - 2024. All rights reserved.