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

C++ 如何从MediaCodec输出缓冲区获取pcm数据缓冲区?,c++,android-ndk,audio-streaming,wav,android-mediacodec,C++,Android Ndk,Audio Streaming,Wav,Android Mediacodec,我想将mp3文件解码为pcm或wav数据。(Android应用程序:API 20) 我使用的方法是从MP3解码数据,但是在本地平台上用C++。p> 解码后,我从解码器知道填充的输出缓冲数据是“声音/原始”格式。 这个缓冲数据存储在uint8_t*中,因此它是uint8_t(字节)数组(值从0到255) 如果可能,如何将此阵列转换为pcm或wav格式?音频解码器当前都返回16位pcm音频,因此只需将uint8\u t*转换为int16\u t*,即可读取pcm样本。如果有size字节的数据,可以从

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

我使用的方法是从MP3解码数据,但是在本地平台上用C++。p> 解码后,我从解码器知道填充的输出缓冲数据是“声音/原始”格式。 这个缓冲数据存储在uint8_t*中,因此它是uint8_t(字节)数组(值从0到255)


如果可能,如何将此阵列转换为pcm或wav格式?

音频解码器当前都返回16位pcm音频,因此只需将
uint8\u t*
转换为
int16\u t*
,即可读取pcm样本。如果有
size
字节的数据,可以从
int16\t*
指针读取
size/2
样本。您可能还想从输出格式中检查
AMEDIAFORMAT\u KEY\u CHANNEL\u COUNT
——如果您总共有
size/2
个样本,那么每个通道的样本元组数将为
size/(2个*通道)

可能为了更好地进行强制转换,请使用“byte shift”这样的“int16 intValue=(byte[1]