如何在Android上录制超低音量音频

时间:2014-08-06 07:44:49

标签: android audio audio-recording mediarecorder bitrate

我尝试在MediaRecorder中使用AMR_NB编码器和3gp outfut格式,并获得相当低的文件大小(104KB,60秒音频)。但对于我的应用程序(低带宽不可靠网络上的音频聊天,尤其是第三世界),我需要更低的音频尺寸。

我尝试使用以下选项以及AMR_NB编码器,3gp输出格式和setAudioChannels(1) -

一个。 setAudioSamplingRate(8000)和setAudioEncodingBitRate(4750)

湾setAudioSamplingRate(4000)和setAudioEncodingBitRate(4000)

℃。 setAudioSamplingRate(2000)和setAudioEncodingBitRate(2000)

但是,无论是否使用上述任何选项,音频文件大小都保持不变。

我的问题如下 -

1。为什么没有任何选项对文件大小有影响?

2。我该怎么做才能减少文件大小(当然牺牲音质)?

为了进行比较,Facebook Messenger以90KB的速度记录60秒的音频作为.mp4文件。

recorder = new MediaRecorder();

recorder.setAudioChannels(1);
recorder.setAudioSamplingRate(8000);

recorder.setAudioEncodingBitRate(4750);

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

2 个答案:

答案 0 :(得分:0)

查看官方文档:http://developer.android.com/reference/android/media/MediaRecorder.html

它说,对于AMR_NB,setAudioSamplingRate()支持8000 Hz!

你可以发布一些代码吗?看看你的问题可能会有所帮助。

编辑:尝试以AAC格式录制 - 就像Facebook Messenger一样。我认为使用AMR_NB / 3GP不会缩小尺寸。

答案 1 :(得分:0)

Android编码器会在程序员检测到错误时覆盖它们的参数。 AMR_NB仅适用于8000 Hz和1通道,因此如果您设置不同的值,如4000 Hz或2通道,编码器将静默地将它们更改回8000和1。

如果将音频采样率降低到8000以下,人声将无法解读。

对于较低的采样率,您必须使用AudioRecord类,因为它可以让您低至4000 Hz。

对于更高的压缩率,您必须使用不同的编码器,或自己编程。