2010年1月15日 星期五

HW6


這次的作業是讀取WAV檔,

前面讀檔頭的動作跟讀BMP大同小異,

首先要先找到WAV的檔頭包了什麼東西,

整塊檔頭有什麼東西相信很多同學都PO了,

這邊我只列出我有用到的地方,

第一個當然就是檔案大小,位置在4,大小為4bytes,

再來是檔案類型,位置在8,大小也是4bytes,

不過檔案類型我也會有類似前面作業的問題,WAVE後面接了一些亂碼,

這個我一個一個字元去看都沒問題,可是整個印出來就是會有後面的東西,

真的不知道是哪來的,老師可以幫我看一下嗎。

char cB[4]={0,0,0,0};

fseek (imWAV,8,SEEK_SET) ;
fread(cB, 4, 1, imWAV);
Memo1->Lines->Add("檔案類型:");
Memo1->Lines->Add(cB);

我的程式裡是這樣寫的,讀出來就會變如圖所示。

第三個是Channel,位置在22,這個只有2個bytes,

最後是取樣率(Sample Rate),位置在24,4個bytes

我只有簡單拿幾個示範一下而已,

反正就是讀檔頭,其他有需要再加上即可,

基本上這作業只要之前讀bmp有認真做就不會很難,

幾乎是一樣的東西。

另外有加檔名上去,

程式裡是這樣寫的,Memo1->Lines->Add(OpenDialog1->FileName.c_str());

但是這樣出來會是絕對路徑,想請問老師有沒有辦法只取檔名就好?

2 則留言:

  1. 字串最後必須要有一個結束符號!
    char cB[5]={0,0,0,0,NULL};

    回覆刪除
  2. 你在 BCB Help 中查詢 ExtractFileName 就有了!

    回覆刪除