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

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

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

我使用 this从 mp3 解码数据的方法,但在使用 C++ 的 native 平台上。

解码后,我从解码器中知道填充输出缓冲数据是“声音/原始”格式。 此缓冲数据存储在 uint8_t* 中,因此它是 uint8_t(byte) 数组(值从 0 - 255)。

如果可能的话,我如何将这个数组转换成 pcm 或 wav 格式?

最佳答案

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

关于c++ - 如何从 MediaCodec 输出缓冲区获取 pcm 数据缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26360382/

相关文章:

multithreading - 哪个线程用于音频解码?

signal-processing - 了解远程 I/O AudioStreamBasicDescription (ASBD)

c++ - 为什么 "\?"在 C/C++ 中是一个转义序列?

android - 如何构建共享库并在其他ndk程序中调用

azure - 部署到 Azure 时,具有 mimeType 音频/mpeg 的 FileStreamResult 不会播放流

android - Boost Log V2 库 Android 链接

gcc - __packed 限定符被忽略

c++ - 为什么即使我使用指针,我的代码也不交换变量的值?

c++ - 保证复制省略如何工作?

c++ - 优化字符串创建