0

由于更简单的集成(用于 ESP-32),我必须在我的项目中使用震颤来解码 ogg vorbis。它的码头说:

它以主机端序、有符号 16 位 PCM格式返回最多指定字节数的解码音频。如果音频是多通道的,则通道在输出缓冲区中交错。

…</p>

签名:long ov_read(OggVorbis_File *vf, char *buffer , int length, int *bitstream);

现在我对如何从 char 数组中读取 16 位签名样本感到困惑。我是否必须遵循此处的一些建议Convert 2 char into 1 int或做其他事情?

4

1 回答 1

1

一次迭代缓冲区两个元素。由于数据是 little-endian 形式(根据文档),您可以直接将两个字符表示为带符号的 16 位整数,在本例中为“short”

long numBytesRead = ov_read(vf, buffer, length, bitstream); //length is typically 4096

if( numBytesRead > 0 )
{
    for(int i=0; (i+1)<numBytesRead; i=i+2)
    {
        unsigned char high = (unsigned char)buffer[i];
        unsigned char low = (unsigned char)buffer[i + 1];

        int16_t var = (int16_t)( (low << 8) | high );
        //here var is signed 16 bit integer.
    }
} 
于 2018-08-03T21:10:07.613 回答