1.先在窗體中添加一個trackbar控件,可通過改變它的位置來調節音量,在trackbar1的屬性中,我們把Max屬性修改成255,改成
這個值是爲了便於進行二進制的音量調節操作。
2.爲了調用一個Windows函數,在uses子句里加上Mmsystem。
3.爲trackbar1的Onchange事件編寫如下代碼:
procedure Tform1.TrackBar1change(Sender:Tobject);
var
t,v:longint;
// t的最大值爲8位的二進制:11111111;
//用v來表示音量的大小,這是個32位的整數,高16位表示右聲道的音量,低16位表示左聲道的音量
begin
t:=trackbar1.Position;
//得到Trackbar的位置,可用這個值來表示音量的大小
v:=(t shl 8) or (t shl 24);//將t左移8位、24位
waveoutsetvolume(0,v);//設置音量
end;
二、分別控制兩個聲道的方法
1.控制左聲道
procedure Tform1.TrackBar1change(Sender:Tobject);
var
t,v:longint;
begin
t:=trackbar1.Position;
waveoutgetvolume(0,@v);
//@表示指向變量v的指針(32位),調用此函數的用意就是得到右聲道的值,做到在調節左聲道的時候,不改變右聲道
v:=v and $ffff0000 or (t shl 8);
//數字前面加$表示是十六進制數字
waveoutsetvolume(0,v);
end;
2.控制右聲道
procedure Tform1.TrackBar2change(Sender:Tobject);
var
t,v:longint;//它的原理同上
begin
t:=trackbar2.Position;
waveoutgetvolume(0,@v);
v:=v and $0000ffff or (t shl 24);
waveoutsetvolume(0,v);
end;
三、設置滑塊的初始位置
1.程序開始執行時,缺省情況下,Trackbar的位置在0,但我們希望程序開始執行時,這兩個滑塊能自動得到當前的音量,而處在相應
的位置。
procedure TForm1.FormCreate(Sender: TObject);
var
v:longint;
begin
waveoutgetvolume(0,@v);//得到現在音量
trackbar1.Position:=hi(v);//設置左滑塊的正確位置
trackbar2.Position:=hi(v shr 16);//設置右聲道滑塊的正確位置
end;
注:函數hi(v)的作用爲:返回一個16位無符號整數的高8位值。如果v爲32位,則高16位自動被忽略了。
2.只使用高8位時,可使調節效果更明顯。
3.對波形文件可以用waveoutgetvolume函數,對cd文件可以用auxgetvolume函數。