=================================
bytes # contains
0-3 4 "RIFF" in ASCII
4-7 4 Total bytes minus 8
8-15 4+4 "WAVE fmt" Eigth character is a space
16-19 4 16 for PCM format
20-21 2 for PCM format
22-23 2 channels
24-27 4 sampling frequency
28-31 4 bytes per second
32-33 2 bytes by capture
34-35 2 bits per sample
36-39 4 "data"
40-43 4 int4 bytes in data
===================================
typedef struct {
char chuid[4];
byte wavsize[4];
char rifftype[4];
char sing[4];
byte flen[4];
byte ftag[2];
byte chan[2];
byte samr[4];
byte bsec[4];
byte bla[2];
byte bisa[2];
byte data[4];
byte len[4];
}WAV_header;
再來我轉戰paintbox他就好像影像元件,用Canvas->MoveTo和Canvas->LineTo 就可以來話波形了,看起來非常的簡單。但由於paintbox只要我一換視窗畫好的波形就不見了!!這令我很懊惱,想想他既然像Image元件,Image也有Canvas->MoveTo和Canvas->LineTo 所以就決定用他了。
執行完發現這圖形似乎怪怪的 就算把X放大 他也只會縮成一個破碎的長方形。這問題也讓我耗費了不少時間,原來是我取樣資料的資料形態設錯了!!比起4byte 的int還是2byte的short來的好。如此以來就算不縮放X,Y軸波形還是看得出來
再來我試著讓所有的波形可以一次看到就不斷的放大X軸,結果發現後面似乎是沒有資料的,可是陣列卻開到了這麼大。
接著我想讓它的波形維持某個適當的大小,可以藉由捲軸來看想看的地方。SCROLLBAR元件研究許久我還是不會用,最後想到的方式是把Image放進SCROLLBOX裡然後讓Image的width可以放大到和總取樣各數相同,這樣才達成了我的最終目標。
耗費了長達12小時的奮鬥,終於完成這個程式,有非常大的成就感,雖然這只是微不足道的小東西。但是在寫程式中學習到的卻是非常可貴的。
沒有留言:
張貼留言