簡體   English   中英

在震顫中獲取樣本

[英]Get sample in tremor

由於集成非常簡單(在ESP-32上使用),因此我必須在項目中使用tremor解碼ogg vorbis。 它的碼頭說:

它以主機端序格式,帶符號的16位PCM格式最多返回指定數量的解碼音頻字節。 如果音頻是多聲道,則聲道在輸出緩沖區中交錯。

...

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

現在,我對如何從char數組讀取16位帶符號樣本感到困惑。 我是否必須從這里遵循一些建議將2個字符轉換為1個int或做其他事情?

一次迭代緩沖區兩個元素。 由於數據采用小尾數形式(根據文檔),因此您可以將兩個字符直接表示為帶符號的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.
    }
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM