很不幸的期末考週過的非常充實以致於戰鬥持續到期末考週之後
題外話,這學期的修科目真的有些許小扯
雖然豪邁的修了系上23學分
但是有很多科目沒有統一考期末考
有三科拉到期末考前一週考試
變成我們的期末考比別人早開始
但是都到大三了,這種事情早該見怪不怪
真正到了期末考週過去的經驗是稍微會輕鬆一點
實際上,並沒有
而且還有些突變,怎麼別人準備期末考
我們卻在趕程式(不只數位媒體概論一科...)
大三上,期末考週被重新定義
比別人早一週開始,同時也比別人晚一週結束
題外話結束
對於本週HW6作業
我認為這是截至目前為止有難到我的作業
當然我是指要把波形頻譜Show出來
但是做事是要按部就序的來
不會走路更別說想要飛
不會開檔更別說想畫圖
對於老師講的,如果學了某種Skill
要在上手其他同類型的Skill會比較容易
我覺得很有道理,因為事實上也是這樣
光是看開檔這個動作
之前因為接續接觸了Bitmap、GIF檔案的Header
這次的WAV也不過就是換個格式,原理是一樣的
但是首先碰到的問題是
Header的定義WAV著實難找了一點點
wikipidia很顯然無法滿足需求
咕狗大神拜了後,首先是純定義的解說網頁
WAVE PCM soundfile format
就如同看到某個偉大的數學家定義出了一套數學公式以推論自然法則一般
通常就只有他本人很懂
其他的路人甲到路人N的無限大除非是剛好跟偉大數學家頻率相同
或是天才之外,平凡的我真的是霧裡看花,到底看到什麼也不知道
不死心繼續拜大神,找到了對岸的程式設計討論區
//不管是什麼程式語言有問題,對岸的前人同胞都恰好已經種好了樹
//反觀,想找到自家人的熱情教學解惑焉..真的不大容易
該討論區有利用C語言示範讀取Header info
配合著剛找到的WAV Format,似乎有點撥雲見日了
開啟一個新的project,把之前read bitmap的code copy過來
一邊用PSpad對照著老師提供的wav,一邊數著Byte
一邊照著網頁的Format去read每組資料
好不容易13組資訊設定完畢
醜是一定的,但是還是先確認正確性比較重要
接著就埋頭拉了27個Label....設定完畢後
關鍵性的一個Open...
perfect!!
文字敘述跳了一個check的步驟
perfect是在比對過Pspad的data後才喊出的
好了,完成一半了
接下來就是畫波形圖
波形圖怎麼畫, 不 知 道 ...
更慘的是找了好久仍舊找不到究竟WAV的data如何繪出一個WAVE
(有求必應的估狗大神這個優美詞句在這裡我沒有讓他出現...因為他破功了)
難道就放棄嗎?不太像我的作風
換一堆關鍵字一直查,就是查不到
靠著最後唯一的線索拼湊一個猜測
如果"音訊範例大小"為8 bits就將data 8 bits一組
而16 bits就將兩個8bits湊成一組
再用該值當作座標,利用第一次作業的方法
以Moveto AND Lineto畫線,這也算是個沒辦法中的辦法了
過程就一樣將data讀進Buffer然後依照前述處理法
老師提供的wav是16 bits 就一次讀進16 bits畫點
最後圖是畫出來了,但是明顯跟其他工具軟體所顯示的波形長的不一樣
這回真的只能搖搖白旗投降輸一半了
究竟該如何創造出波形圖呢...
程式起始畫面,直接利用MainMenu的File > Open選擇開啟檔案
接著Show出所有資訊以及一個怪怪的波形圖...
寫在最後,其實從一開始讀Bmp檔案的時候對於一串臭臭長長又重複出現的code
iFileSize = bitSize[0] +
bitSize[1] * 256 +
bitSize[2] * 256*256 +
bitSize[3] * 256*256*256;
看了就想要自訂一個function來做這個運算
不過其實運用function已經在HW4、HW5的時候實作了
因為功能整合到HW4、HW5時,自己設定的一堆switch
稿的程式碼雜亂不堪,當時就想要用個自訂函數讓程式碼看起來簡單些
不過BCB要加一個自訂函數還得到.h去宣告
一開始不知道也是試了好久,最後仍然是拜咕狗大神解惑
但是後來我又想到一個偷吃步的自訂函數用法
只是因為自己懶的切換到.h去宣告function
所以索性乾脆creat一個隱藏的button當作自訂函數用
當要呼叫他的時候在其他的區塊內click()他就可以達到Call的效果~
言歸正傳
這次靠他如願解決了每讀一次就要臭臭長長一次
讓原本十分醜陋的程式碼稍微好看一點點..但是還是有改進空間
沒有留言:
張貼留言