[英]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樣本。 大多數專業音頻應用程序都遵循相同的原則,主要是因為硬件僅支持那些位分辨率。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.