我目前在 Android 中使用 AudioTrack 和 AudioRecord 类。
我使用纯 PCM 数据,但我想知道其他编解码器有哪些选择?
来自 this page好像只能用AMR窄带编解码?
我目前按如下方式设置音频类:
arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
buffersize);
atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT,
buffersize,
AudioTrack.MODE_STREAM);
所以我的问题是如何将编码从 PCM 更改为其他受支持的编解码器之一?
当我尝试更改 AudioFormat 上的 ENCODING_PCM_16BIT 时,我只会看到默认或无效编码选项以及 PCM 选项。
如果有人知道这里的任何帮助或任何帮助,任何关于在 Android 上编码和解码音频的教程的链接都会很棒。
谢谢
编辑:我已将我的代码更改为以下内容:
arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
**MediaRecorder.AudioEncoder.AMR_NB**,
buffersize);
atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
11025,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
**MediaRecorder.AudioEncoder.AMR_NB**,
buffersize,
AudioTrack.MODE_STREAM);
代码运行正常,但我想知道它是否真的将音频编码为 AMR_NB,这是否不是正确的方法?
我在使用原始 PCM 时出现缓冲区溢出,但自从使用新代码并使用 MediaRecorder.AudioEncoder.AMR_NB 而不是 AudioFormat.PCM 后就没有出现缓冲区溢出
最佳答案
正如 AudioRecord
和 AudioTrack
的文档所述:
audioFormat the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT
您只能使用 8 位和 16 位 PCM。如果你想要其他格式的音频,要么不要使用 AudioRecord
和 AudioTrack
(试试 MediaRecorder
和 MediaPlayer
)或者您将不得不使用自己的代码对其进行转码,可能会利用 NDK。
AudioRecord
和 AudioTrack
专为 OpenCORE 多媒体引擎不支持相关音频的情况而设计,因为它不是受支持的编解码器或不受支持流协议(protocol)(例如 SIP)。
关于Android AudioRecord 和 AudioTrack 编解码器选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192120/