線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2187
推到 Plurk!
推到 Facebook!

請問如何改變和取得主音量的大小,而不是改變和取得Wave音量的大小

尚未結案
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-14 13:42:16 IP:211.75.xxx.xxx 未訂閱
請教各位先進: 我參照幾位前輩的文章寫了一個可改變和取得Wave音量的大小 的程式如下,但是如果我想要改變和取得主音量的大小要如何改呢? //設定音量 procedure SetVolume(const volL, volR: Word); var V:Longint; begin v:=(volL shl 8)or(volR shl 24); waveOutSetVolume(0,v); end; procedure TForm1.FormCreate(Sender: TObject); begin TrackBar1.Max := 255; //設定最大音量值 TrackBar1.Position := GetSetVolume; end; //取得音量 function GetSetVolume:Integer; var v:longint; begin WaveOutGetVolume(0,@v); if hi(v) > hi(v shr 16) then Result := hi(v) else Result := hi(v shr 16); end; procedure TForm1.TrackBar1Change(Sender: TObject); begin SetVolume(TrackBar1.position, TrackBar1.position); end;
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-14 19:54:34 IP:61.155.xxx.xxx 未訂閱
我不知道你将的是什么意识,但我认为你可能需要同时控制左右声道,下面的文章供参考:    分别控制两个声道的方法 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; //调用 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函数。        风花雪月 e梦情缘
------
风花雪月 e梦情缘
saam
初階會員


發表:61
回覆:75
積分:27
註冊:2003-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-16 11:45:13 IP:211.75.xxx.xxx 未訂閱
感謝wnhoo前輩的指導: 在下使用這個方法來取得音量,得到的是Wave的音量,但是粉奇怪的是我在公司 都可以到音量值,但在家裏卻抓不到,我二邊都是用Windows 2000 Server,但是 家裏的音效卡驅動是AC97 Audio,為什麼呢? waveoutgetvolume(0,@v);//得到现在音量 trackbar1.Position:=hi(v);//设置左滑块的正确位置 trackbar2.Position:=hi(v shr 16);//设置右声道滑块的正确位置 又如果我想改變 音量控制 的音量(Wave音量左邊)要如何寫呢?
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-20 14:05:20 IP:61.30.xxx.xxx 未訂閱
請參考我之前回答另一位網友的討論 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30589
系統時間:2024-05-02 20:20:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!