如何在安卓设备上以更好的音频质量录制音频文件?

14

我正在创建一个应用程序,可以在Android和iPhone之间播放录制文件。

现在我正在使用,

        audioRecorder = new MediaRecorder();
        audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

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

如果我使用,

        audioRecorder = new MediaRecorder();
        audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
        audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

那么文件大小为25kb/15秒,质量比AAC好得多。但问题在于AMR在iPhone上无法播放。

因此,请建议一种适用于Android的录音模式,具有更好的质量、适中的文件大小,并且可以在iPhone上播放。

2个回答

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(); 

编辑:

另一个选项是在您的应用中添加转换器。将AMR转换为AAC。


谢谢Jermaine,audioRecorder.setAudioSamplingRate(44100); audioRecorder.setAudioEncodingBitRate(96000);尝试了这个,但声音中有很多噪音。 - PrvN
尝试调整采样率和比特率,并找到更好的录音地点。 - StarPinkER
12
比特率是以每秒比特数而不是每秒千字节数来测量的,因此应该大约为128000而不是16,如此显示(值为16将对应于比特深度)。 - arlomedia
5
在我的设备上,“recorder.setAudioEncoder(MediaRecorder.getAudioSourceMax());”会导致应用程序崩溃。但是,“recorder.setAudioEncodingBitRate(128000);”几乎完美地解决了问题。 - Sbonelo
获取最大值引发“无效的音频编码器”错误。Android 8.1。 - Damn Vegetables
编码比特率太小了。音频质量太差了。请使用更高的编码比特率。 - coolcool1994

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接