MediaRecorder 切断文件末尾

rmo*_*ney 4 java audio android mediarecorder

在我的应用程序中,我使用 MediaRecorder 在 m4a(AAC 编码)中录制音频。我所有的录音都被缩短了(大约半秒)。就我的申请而言,拥有整个文件很重要。这是一个错误还是我遗漏了什么?

记录代码:

       //set up recorder
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setAudioChannels(1);
        recorder.setAudioSamplingRate(16000);
        recorder.setOutputFile(fileName);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

        //begin recording
        recorder.prepare();
        recorder.start();
Run Code Online (Sandbox Code Playgroud)

停止记录代码:

        //stop recording
        recorder.stop();
        recorder.release();
        recorder = null;
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 6

这似乎是 Android 基于 AAC 的音频编码器中的一个错误。我发现唯一有效的解决方案是使用基于 AMR 的音频编码器。不幸的是,AMR_WB 对于人声以外的任何东西听起来都不是很好。

recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_WB);
Run Code Online (Sandbox Code Playgroud)

据我所知,唯一的其他选择是使用 AudioRecord,这要困难得多。