我尝试在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);
答案 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。
对于更高的压缩率,您必须使用不同的编码器,或自己编程。