我必须使用震颤来解码ogg在我的项目,因为更简单的集成(在ESP-32上使用)。它的码头说:
它返回指定数量的解码音频的主机端,签署16位PCM格式。如果音频是多通道的,则通道被交织在输出缓冲器中。 … 签名: long ov_read(OggVorbis_File *vf,char *,int长度,int *位流);
现在,我对如何从char数组读取16位签名样本感到困惑。我是否必须听从将2个字符转换为1 int的建议,还是做其他的事情?
发布于 2018-08-03 21:10:07
一次迭代缓冲区的两个元素。由于数据是小端点形式(根据文档),所以可以直接将两个字符表示为一个带符号的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.
}
} https://stackoverflow.com/questions/51678616
复制相似问题