簡體   English   中英

在C ++中讀取.wav數據時出現意外輸出

[英]Unexpected output when reading .wav data in c++

我正在做一個非常簡單的方法,但是遇到了一些麻煩。

我想讀取.wav文件的數據。 我只是對前80個樣本感興趣,所以我接下來將要做。 我使用fseek根據https://ccrma.stanford.edu/courses/422/projects/WaveFormat/轉到文件的第44個字節(數據從此處開始)

然后,我讀取了24位的塊(我絕對確定.wav文件具有24位的樣本,因為我創建了它並對其進行了檢查)

這是我的代碼:

void WavData::leerTodo(char *fname){
    double array[1000];
    FILE* fp = fopen(fname,"rb");
    fseek(fp, 44, SEEK_SET);
    if (fp) {
        fread(array,sizeof(double), 100, fp);
        for (int i = 0; i<100; i++) {
            cout<<"datos del .wav son es "<<array[i]<<"\n";
        }
    }
}

當我將結果與從matlab獲得的數據進行比較時,其功效與功率或300左右完全相差10倍。 我正在使用xcode。

24位.wav文件具有整數樣本,而不是浮點數(float / double); 波中的浮點IEEE樣本通常具有32或64位。 只需將數據讀入32位int即可; 請注意,對齊方式,符號性和字節性也必須匹配(Wave數據通常以二進制補碼格式簽名)。 或者,如注釋中指出的那樣,將其導出為16位以允許對數據進行簡單打包和對齊匹配。

例如,Sound Foundry 6.0允許8、16、24和32位整數樣本以及32和64位浮點IEEE樣本。 大多數專業音頻應用程序都遵循相同的原則,主要是因為硬件僅支持那些位分辨率。

進一步閱讀: http : //en.wikipedia.org/wiki/Audio_bit_depth

暫無
暫無

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

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