如何在Android中录制质量更好的音频文件?

Prv*_*rvN 12 android aac android-mediarecorder android-audiorecord

我正在创建一个应用程序,它将Android上的录制文件播放到iphone,反之亦然.

现在我在用,

        audioRecorder = new MediaRecorder();
        audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
Run Code Online (Sandbox Code Playgroud)

使用此代码记录的文件大小为85 kb/15秒,质量非常差.

如果我使用,

        audioRecorder = new MediaRecorder();
        audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
        audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
Run Code Online (Sandbox Code Playgroud)

然后文件大小是25kb/15秒,质量比aac好得多.但问题是AMR在iPhone中无法播放.

因此,请建议Android的录制架构具有更好的质量,实惠的尺寸,也可以在iPhone上播放.

Sta*_*kER 18

如果要更改质量,请增加recorder.setAudioEncodingBitRate(value).

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioEncoder(MediaRecorder.getAudioSourceMax());
recorder.setAudioEncodingBitRate(16);
recorder.setAudioSamplingRate(44100);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start(); 
Run Code Online (Sandbox Code Playgroud)

编辑:

另一种选择是在您的应用中添加转换器.将AMR转换为AAC.

  • 比特率以每秒比特数来衡量,而不是每秒kb,所以应该是128000而不是16,如此处所示(值16对应于比特深度). (11认同)
  • ``recorder.setAudioEncoder(MediaRecorder.getAudioSourceMax());``崩溃了我的应用程序; 然而``recorder.setAudioEncodingBitRate(128000);``几乎完美无缺. (3认同)

Sub*_*ddy 5

该链接非常有用:Android支持的媒体格式

本节向我们提供有关音频和视频格式的更多信息。