我目前在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使用新代码,因此没有出现任何问题
答案 0 :(得分:2)
正如文档中指出的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多媒体引擎不支持音频的情况而设计,因为它不是支持的编解码器或支持的流媒体协议(例如SIP) )。