[問題] 讀取wav檔資料

看板C_and_CPP作者 (慕少艾)時間16年前 (2010/02/05 23:13), 編輯推噓2(207)
留言9則, 3人參與, 最新討論串1/1
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: (題意請描述清楚) 讀取WAV檔,並將取得的資料(振幅),存入矩陣裡 希望得到的正確結果: 正確的振幅值 程式跑出來的錯誤結果: 讀到很大的負數值-9XXXXXXXXXXXXX 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) C Win7 有問題的code: (請善用置底文標色功能) lude <stdio.h> #include <stdlib.h> int main() { double data; int i = 0; FILE *pal; if((pal = fopen("E:\\C\\Cut\\Cut\\1234.wav","rb")) == NULL) { printf("File could not open\n"); } else { for(i=1;i<10;i++) \\先讀前10個值看是否正確 { fscanf(pal,"%lf\n",&data); if(data==0) printf("empty\n"); else printf("%lf\n",data); if(feof(pal)) break; } 補充說明: 我試過把i的值改變EX:for(i=10000,i<10010,i++)諸如此類,但是得到的 還是一樣是很大的負數值,小弟寫C的經驗還很少,希望各位高手不吝指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.24.174

02/05 23:23, , 1F
wav檔內應該不是純文字資料吧?? 你是不是應該用fread來
02/05 23:23, 1F

02/05 23:23, , 2F
讀資料進入變數裡啊?_?
02/05 23:23, 2F

02/05 23:24, , 3F
另外, wav應該也有自己的檔頭格式吧?? 都不用去解析檔頭
02/05 23:24, 3F

02/05 23:24, , 4F
就可以直接以double型態讀資料出來嗎?_?
02/05 23:24, 4F

02/05 23:35, , 5F
我知道WAV檔前44Byte要把他去掉,我再改改看感恩
02/05 23:35, 5F

02/06 14:36, , 6F
WAV的sample你知道是什麼格式嗎 ?
02/06 14:36, 6F

02/06 14:36, , 7F
正常的CD音源是16bits 44100hz 2channels
02/06 14:36, 7F

02/06 14:38, , 8F
每個sample是Signed 16 bit Little Endian
02/06 14:38, 8F

02/06 14:40, , 9F
WAV支援很多sample format,但絕大多數情況不會是double。
02/06 14:40, 9F
文章代碼(AID): #1BR3M2fb (C_and_CPP)