C++ 如何从MediaCodec输出缓冲区获取pcm数据缓冲区?
我想将mp3文件解码为pcm或wav数据。(Android应用程序:API 20)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解码数据,但是在本地平台上用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]