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

时间:2019-07-02 13:59:27

标签: android android-studio android-layout android-mediaplayer android-mediarecorder

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

2 个答案:

答案 0 :(得分:1)

如果您使用audioRecord对象而不是mediaRecorder对象,那么您将拥有更大的自由度来自定义录制和编码麦克风输出的方式。

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

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

How to generate the AAC ADTS elementary stream with Android MediaCodec

答案 1 :(得分:0)

已解决

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

使用.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);

许多关于stackoverflow的解决方案都建议.setAudioEncodingBiteRate(16),但是16太低,将毫无意义。

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

编辑:我想保存带有.aac扩展名的文件的唯一原因是我认为.aac文件会更清晰,但是由于我能够在没有.aac的情况下以高质量保存文件扩展,没有必要去做。