2010年1月15日 星期五

HW7

終於可以寫最後一個作業了(淚目),為什麼開頭第一句就這樣說,因為這是我寫最久的一次程式,從下午3點開始寫到晚上10點才寫完,整個不眠不休寫到眼睛都快爆掉了,真的沒想到多2個程式就快把我搞死了...好啦!趕快來寫完這最後的心得吧!


首先,要做的是將撥放的音頻檔的波形顯現出來,這個部分在老師上課的時候有提到過,所以還是實做最麻煩了,在毫無頭緒的情況下還是丟關鍵字去餵Google,於是,我找到有關WAV檔在BCB上的討論,作業6中我開WAV檔的方式是使用MediaPlayer去寫,而要找聲音的波形也可以用MediaPlayer來寫。

雖然Google上的資料有解釋波形,但要怎寫還是另一回事。 下面的程式碼就把波形抓到手!

f14_4_2->Refresh();
f14_4_2->Canvas->TextOut(10,400,IntToStr(f14_4_2->Srb->Position) );

divx=StrToInt(f14_4_2->Edit1->Text);
divy=StrToInt(f14_4_2->Edit2->Text);

f14_4_2->Canvas->MoveTo(0+dx,-data[0]/divy+dy);
f14_4_2->Canvas->Pen->Color=clBlue;
for(int i=1;(iWidth*divx)&&(i<(FileLen-dd)/2-1);i++) f14_4_2->Canvas->LineTo(i/divx+dx,-data[i+f14_4_2->Srb->Position]/divy+dy);





讀取波形的時候,或許是因為我的音樂檔案太大了,所以掃描一整段花了不少時間,而下面的X軸和Y軸比例也是,只要我動到裡面的數值時,就要整個重新掃一次。


好!接著就是做出音量控制的功能了!在Google的搜尋下,很快的我就找到了抓到WAV的音量及控制音量大小的方法!

===================================================
waveOutGetVolume(0, &Volume);
waveOutSetVolume(0, Volume);
===================================================
上面的2行程式能控制WAV音量,控制它也就相當控制了音量大小。 但是短短的這2行只能取出音量設定,還需要其他程式才行。另外程式中我用Bar這個元件做為控制音量大小的按鈕,但是寫程式時一直遇到即使寫好之後聲音還是不能控制,之後才發現我一直沒有把抓到的東西寫到Bar裡...
SetVolume(0,TrackBar1->Position*10); 這就是把值給寫進去!




最後,經過7小時的奮鬥,程式終於完成!作業7收工!

(備註:Google搜尋請打:BCB 音量控制,前面幾篇就可以看到相關的討論文章!)

2 則留言:

  1. 其實, 我要你們做的不是控制音量, 而是改變檔案中訊號的強度(就是音量)...

    回覆刪除
  2. 拍謝= =
    我會錯意以為要做的是音量控制就跑去做那部分了Orz

    回覆刪除