对于MediaRecorder的AudioSource,OutputFormat和AudioEncoder,有哪些小尺寸,便携式和合理质量的良好配置?

时间:2019-02-13 05:03:11

标签: android

我计划将音频输入集成到笔记记录应用(https://play.google.com/store/apps/details?id=com.yocto.wenote

我对音频输入的要求如下。从最重要到不重要列出了它们。

  1. 小的输出文件大小。因为我们的数据将同步到云,所以我们希望使整体数据尽可能小,以节省电池和数据使用量。
  2. 便携式。输出文件应能够在大多数平台上重播,例如iOS,Windows,Linux,OS X。
  3. 合理的高质量。我知道更高的质量会导致更大的文件大小。因此,我们不期望有很好的质量。好的质量就足够了。

我们计划使用MediaRecorder

我经历过https://developer.android.com/guide/topics/media/media-formats,但几乎不知道,我们应该使用什么合适的“ AudioSource , OutputFormat and AudioEncoder`?

您能建议我们使用什么合适的AudioSourceOutputFormatAudioEncoder吗?谢谢。

1 个答案:

答案 0 :(得分:1)

但是使用以下配置,我能够生成OK品质的音频。 2分钟的音频长度将花费我大约500KB,我认为还不错。


mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioChannels(1);
mediaRecorder.setAudioSamplingRate(8000);
mediaRecorder.setAudioEncodingBitRate(32000);
/*
mediaRecorder.setAudioChannels(1);
mediaRecorder.setAudioSamplingRate(44100);
mediaRecorder.setAudioEncodingBitRate(96000);
 */
mediaRecorder.setMaxDuration(RECORDING_MEDIA_RECORDER_MAX_DURATION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    if (isHeAacEncoderSupported()) {
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
    } else {
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    }
} else {
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
}

对于isHeAacEncoderSupported的实现,您可以参考How to detect whether MediaRecorder.AudioEncoder.HE_AAC is supported?