2010-02-03 42 views
5

我目前在Android中使用AudioTrack和AudioRecord类。Android AudioRecord和AudioTrack编解码器选项?

我用的是纯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

+4

这是因为你发布你的问题很长一段时间,但也许它仍然是自己感兴趣的人......你是不是对编码AMR_NB。标志只是int域。 MediaRecorder.AudioEncoder.AMR_NB是0x01 ...与AudioFormat.ENCODING_DEFAULT相同。所以你只是使用默认编码。 – hacksteak25 2011-04-22 20:21:21

回答

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)。

相关问题