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

Posted

技术标签:

【中文标题】如何在android中录制质量更好的音频文件?【英文标题】:how to record audio file with better quality in android? 【发布时间】:2013-02-05 01:23:06 【问题描述】:

我正在创建一个应用程序,可以将 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 上播放。

【问题讨论】:

【参考方案1】:

这个链接很有用:Android supported media formats

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

【讨论】:

【参考方案2】:

如果要更改质量,请增加 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。

【讨论】:

感谢杰梅因,audioRecorder.setAudioSamplingRate(44100); audioRecorder.setAudioEncodingBitRate(96000);试试这个,但声音很大。 尝试调整采样率和比特率。并找到一个更好的地方记录。 比特率以比特每秒而不是 kb 每秒为单位,因此应该在 128000 左右,而不是此处所示的 16(值 16 对应于比特深度)。 recorder.setAudioEncoder(MediaRecorder.getAudioSourceMax()); 使我的应用程序崩溃;但是recorder.setAudioEncodingBitRate(128000); 几乎可以完美运行。 获取最大原因“无效的音频编码器”。安卓 8.1。

以上是关于如何在android中录制质量更好的音频文件?的主要内容,如果未能解决你的问题,请参考以下文章

Android 开发 如何实现高质量的录音

如何在android中录制音频m4a格式的音频文件?

在android中录制现有的音频文件

RK3399使用ICS-43432音频录制Codec芯片

如何使用 webrtc 录制高质量的立体声音频?

如何在 Swift 中连续录制音频并播放同一文件中的音频?