Android AudioRecord和AudioTrack编解码器选项?

时间:2010-02-03 13:23:09

标签: android audio pcm codec amr

我目前在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使用新代码,因此没有出现任何问题

1 个答案:

答案 0 :(得分:2)

正如文档中指出的AudioRecordAudioTrack

audioFormat     the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT

您只能使用8位和16位PCM。如果您想要其他格式的音频,请不要使用AudioRecordAudioTrack(尝试MediaRecorderMediaPlayer),否则您必须使用自己的代码对其进行转码,可能会利用NDK。

AudioRecordAudioTrack专门针对OpenCORE多媒体引擎不支持音频的情况而设计,因为它不是支持的编解码器或支持的流媒体协议(例如SIP) )。