現在是清晨五點半..眼皮好重
除了考試考完把K書沒睡到的覺補回來外
就馬不停蹄的趕作業,唉...
因為在過兩個小時還得在星期六補六節課
所以這部分的作業沒有充裕的時間達成自己原本的預期
一想到這裡,上次那些信誓旦旦開作業繳交期限支票的大德們,
都是靠自己完成的嗎..真不知道該說什麼了
本來預計要修正出一個正常的WAVE,不過這樣怕連作業七都完成不了
作業七的部分基礎是修改WAV的音量大小
沒什麼難度,利用兩個WAV音量控制function
取得音量的
waveOutGetVolume(HWAVEOUT hwo, LPDWORD pdwVolume)
以及設定音量的
waveOutSetVolume(HWAVEOUT hwo, DWORD dwVolume)
最初腦袋不正常的想利用兩個Button來提高音量跟降低音量
雖然方法是很特立獨行,但是說實在的如果不做判斷跟額外的資訊提示
不會比bar系列的元件來的直覺,而本來想用看看沒用過的TrackBar
但是為了保險,還是直接使用曾經用過的ScrollBar
步驟也很直覺
當移動ScrollBar便取得原始的Volume然後加上ScrollBar的值設定音量
本來神智不清的一移動就取音量然後直接加上ScrollBar的值Set
然後Run了還覺得奇怪,咦..怎麼聲音加上去就下不來,只能加不能降..
精神狀況不好的情況下寫程式..事倍功半阿~
我原本另外想到一種處理方法,idea來源是圖片影像的透明化
將兩張圖片重疊,把重疊的像素點相加除以2
本來想實驗看看說,如果把兩個WAV檔案取出data本文音訊資料
相加除以2會有什麼樣的效果,不知是會有remix的效果還是單純的變魔音..
另外是想要改善的程式碼易讀性,過去修資料結構跟演算法的時候
還不覺得struct是個好東西,一直到這學期
其他專研組的同學程式能力大為精進,偶爾偷學兩昭
剛好這裡派的上用場,就像之前在讀取BMP Header時
老師有提供BMP的Header Struct結構
不過因為當時已經自行設定完變數,覺得有些麻煩而且可以執行就好
就沒去更動程式碼,這次則是因為看已經被精簡過的程式碼似乎
還有再被精簡的空間,所以就試看看
而結果算是好壞參半,一次直接計算檔案的總長度,然後把檔案的資料塞進
設定好的結構當中,不用在對說讀第4 Bytes是啥、讀第16 Bytes是啥
但是壞在出了點不知是哪問題的狀況
Header讀取明顯有問題
以下這張是正常的數值
這張則是錯誤的
從錯誤的方式推斷,猜測是結構中宣告的變數空間過大
但是結構宣告如下:
struct Header_data{
char ChunkID[4]; //[0] ChunkID
long int ChunkSize; //[4] ChunkSize
char Format[4]; //[8] Format
char Subchunk1ID[4]; //[12] Subchunk1ID
long int Subchunk1Size; //[16] Subchunk1Size
WORD AudioFormat; //[20] AudioFormat
WORD NumChannels; //[22] NumChannels
long int SampleRate; //[24] SampleRate
long int ByteRate; //[28] ByteRate
WORD BlockAlign; //[32] BlockAlign
WORD BitsPerSample; //[34] BitsPerSample
char Subchunk2ID[4]; //[36] Subchunk2ID
long int Subchunk2Size; //[40] Subchunk2Size
};
另外有以ShowMessage(AnsiString(char))
的方法確認說Byte數是否正確
確認結果無誤
char 佔 1 Byte,char[4]就佔4 Byte
long int 佔 4 Byte
WORD 佔 2 Byte
每個資訊所佔用的空間大小都正確
所以這個問題還有待克服..六點十分了,
如果下課了還有機會的話真想把它DeBug完...
==================================================
找到其中一部分的錯誤,但是低級錯誤...
BlockAlign跟BitsPerSample的資訊錯誤部分
我宣告的4 Byte的Buffer供全部的資訊暫存用
因為這兩個資訊各佔用2 Byte
而計算是我是以4 Byte為前提下去計算
結果導致BlockAlign跟BitsPerSample只覆蓋[0]、[1]的空間
[2]、[3]還是上一個資訊的值
丟去計算當然就錯了
至於另外一部分還是有點問題
直接看結構,結構自訂變數載入的值都正確
但是單看自訂變數就會發現莫名其妙的東西..
沒有留言:
張貼留言