【问题标题】:How to get pcm data buffers from MediaCodec output buffers?如何从 MediaCodec 输出缓冲区获取 pcm 数据缓冲区?
【发布时间】:2014-10-14 20:54:06
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 也许可以更好地使用“字节移位”,像这样“int16 intValue = (byte[1]
    猜你喜欢
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多