Android AudioRecord和AudioTrack编解码器选项?
我目前使用Android中的AudioTrack和AudioRecord类 我使用纯PCM数据,但我想知道我对其他编解码器的选择是什么 看来我只能用AMR窄带编码和解码 我目前设置的音频类如下: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,
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默认值相同。所以您只是使用默认编码。