Android AudioRecord和AudioTrack编解码器选项?

Android AudioRecord和AudioTrack编解码器选项?,android,audio,pcm,codec,amr,Android,Audio,Pcm,Codec,Amr,我目前使用Android中的AudioTrack和AudioRecord类 我使用纯PCM数据,但我想知道我对其他编解码器的选择是什么 看来我只能用AMR窄带编码和解码 我目前设置的音频类如下: arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO,

我目前使用Android中的AudioTrack和AudioRecord类

我使用纯PCM数据,但我想知道我对其他编解码器的选择是什么

看来我只能用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上的编码\u PCM\u 16位时,我只获得默认或无效编码选项以及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多媒体引擎不支持所述音频的情况而设计,原因可能是它不是受支持的编解码器或不支持的流媒体协议(例如SIP)。

您发布问题已经很久了,但也许这对某些人来说仍然很有趣……你不是在编码AMR_NB。这些标志只是int字段。MediaRecorder.AudioEncoder.AMR_NB是0x01。。。与AudioFormat.ENCODING\u默认值相同。所以您只是使用默认编码。