如何从MediaCodec输出缓冲区获取pcm数据缓冲区?

时间:2014-10-14 12:02:53

标签: c++ android-ndk audio-streaming wav mediacodec

我想将mp3文件解码为pcm或wav数据。(Android应用程序:API 20)

我使用this方法解码来自mp3的数据,但是在使用C ++的原生平台上。

解码后我知道从解码器填充的输出缓冲数据是“声音/原始”格式。 这个缓冲的数据存储在uint8_t *中,所以它是uint8_t(字节)数组(值从0到255)。

如果有可能,我如何将此数组转换为pcm或wav格式?

1 个答案:

答案 0 :(得分:1)

音频解码器目前都返回16位PCM音频,因此只需将uint8_t*转换为int16_t*,即可读出PCM样本。如果您有size个字节的数据,则可以从size/2指针读取int16_t*个样本。您也可以从输出格式中检查AMEDIAFORMAT_KEY_CHANNEL_COUNT - 如果您总共有size/2个样本,则每个频道都会有size/(2*channels)个样本元组。