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

控制音量的元件

 
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-13 22:08:52 IP:61.219.xxx.xxx 未訂閱
請問前輩們.... 是否有使用過貴站的' TAudioMixer '元件? 是控制音量的元件 雖然很方便很簡單使用 不過在XP上無法動作 原因是在XP上執行 TAudioMixer 便會將音量設在靜音 請問各位前輩是否有辦法可以克服 或是有其他的元件可以推薦小弟替代 還有一個問題... 小弟正在試作一個程式 是在執行時將另一個程式 COPY到啟動程序中 小弟是循著路徑拷貝進去 如:c:\documents and settings\all users\開始功能表..... (2000 NT 中文版) 可是英文版的路徑就不相同了 98 的也不相同 該如何COPY過去 才能在每次開啟電腦時 此程式也自動開啟...? TOMMY
------
TOMMY
scottliou
版主


發表:16
回覆:56
積分:47
註冊:2002-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-16 02:21:07 IP:61.70.xxx.xxx 未訂閱
參考 HKEY_LOCAL_MACHINE\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Microsoft\Windows\CurrentVersion\Run ~~~~~~~~~~~~~~~~ 有夢想最美......
------
~~~~~~~~~~~~~~~~
有夢想最美......
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-17 14:15:23 IP:61.219.xxx.xxx 未訂閱
很感謝scottliou 前輩的指導 不過......小弟是不懂耶~ 可以舉例一下嗎? TOMMY
------
TOMMY
scottliou
版主


發表:16
回覆:56
積分:47
註冊:2002-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-17 20:33:22 IP:61.70.xxx.xxx 未訂閱
只要在 HKEY_LOCAL_MACHINE\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Microsoft\Windows\CurrentVersion\Run 這兩個位置加入程式執行位置的機碼那麼Windows開機時系統會自動執行 Ex. 加入字串名稱 AudioMixer 資料輸入 c:\program files\AudioMixer\AudioMixer.exe (程式位置) 即可 如果不知道如何加入Register時請再Post上來我有寫關於Register的函數我再上傳或Mail給你 ~~~~~~~~~~~~~~~~ 有夢想最美......
------
~~~~~~~~~~~~~~~~
有夢想最美......
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-06-17 23:43:55 IP:61.219.xxx.xxx 未訂閱
引言: 請問前輩們.... 是否有使用過貴站的' TAudioMixer '元件? 是控制音量的元件 雖然很方便很簡單使用 不過在XP上無法動作 原因是在XP上執行 TAudioMixer 便會將音量設在靜音 請問各位前輩是否有辦法可以克服 或是有其他的元件可以推薦小弟替代
試看看這個控制音量的程式碼 (直接覆製貼上至Delphi就會有縮排) unit Volume; interface uses windows,mmsystem; type Tvolume=record left,right:word; // end; procedure fillstruct(control:PMixerControl;var Cdetails:tMIXERCONTROLDETAILS); function getpeak(control:PMixerControl;var peak:integer):boolean; function setvolume(control:Pmixercontrol; volume:Tvolume):boolean; function getvolume(control:Pmixercontrol; volume:Tvolume):boolean; var mcontrols:array of array of array of PMixerControl; fmixerhandle:HMIXER; implementation procedure fillstruct(control:PMixerControl;var Cdetails:tMIXERCONTROLDETAILS); begin Cdetails.cbStruct:=sizeof(cdetails); cdetails.dwControlID:=Control.dwControlID; cdetails.cbDetails:=sizeof(integer); cdetails.hwndOwner:=0; end; function getpeak(control:PMixerControl;var peak:integer):boolean; var details:TMixerControlDetailsSigned; cdetails:tMIXERCONTROLDETAILS; begin Result:=false; if control.dwControlType<> mixercontrol_controltype_peakmeter then exit; cdetails.cChannels:=1; cdetails.paDetails:=@details; fillstruct(control,cdetails); result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0; end; function setvolume(control:Pmixercontrol; volume:Tvolume):boolean; var details:array[0..30] of integer; cdetails:tMIXERCONTROLDETAILS; begin fillstruct(control,cdetails); cdetails.cChannels:=2; cdetails.paDetails:=@details; details[0]:=volume.left; details[1]:=volume.right; result:=mixerSetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0; volume.left:=details[0]; volume.right:=details[1]; end; function getvolume(control:Pmixercontrol; volume:Tvolume):boolean; var details:array[0..30] of integer; cdetails:tMIXERCONTROLDETAILS; begin fillstruct(control,cdetails); cdetails.cChannels:=2; cdetails.paDetails:=@details; result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0; volume.left:=details[0]; volume.right:=details[1]; end; end. procedure TForm1.Button1Click(Sender: TObject); var s : Tvolume; kz : Pmixercontrol; begin new(kz); kz.dwControlID := 0; s.left := 0; s.right := 0; try setvolume(kz,s); except end; freemem(kz); end; ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-06-21 09:15:35 IP:61.219.xxx.xxx 未訂閱
引言: 只要在 HKEY_LOCAL_MACHINE\Microsoft\Windows\CurrentVersion\Run HKEY_CURRENT_USER\Microsoft\Windows\CurrentVersion\Run 這兩個位置加入程式執行位置的機碼那麼Windows開機時系統會自動執行 Ex. 加入字串名稱 AudioMixer 資料輸入 c:\program files\AudioMixer\AudioMixer.exe (程式位置) 即可 如果不知道如何加入Register時請再Post上來我有寫關於Register的函數我再上傳或Mail給你 ~~~~~~~~~~~~~~~~ 有夢想最美......
感謝~ 不過我該如何加入程式執行位置的機碼 從何處加入 例如我要在每次開機時執行c:\program files\FB\FB.exe 麻煩您再指導一次.... 小弟也不知道如何加入Register耶~ TOMMY
------
TOMMY
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-06-21 10:06:19 IP:61.219.xxx.xxx 未訂閱
引言:
引言: 請問前輩們.... 是否有使用過貴站的' TAudioMixer '元件? 是控制音量的元件 雖然很方便很簡單使用 不過在XP上無法動作 原因是在XP上執行 TAudioMixer 便會將音量設在靜音 請問各位前輩是否有辦法可以克服 或是有其他的元件可以推薦小弟替代
試看看這個控制音量的程式碼 (直接覆製貼上至Delphi就會有縮排) unit Volume; interface uses windows,mmsystem; type Tvolume=record left,right:word; // end; procedure fillstruct(control:PMixerControl;var Cdetails:tMIXERCONTROLDETAILS); function getpeak(control:PMixerControl;var peak:integer):boolean; function setvolume(control:Pmixercontrol; volume:Tvolume):boolean; function getvolume(control:Pmixercontrol; volume:Tvolume):boolean; var mcontrols:array of array of array of PMixerControl; fmixerhandle:HMIXER; implementation procedure fillstruct(control:PMixerControl;var Cdetails:tMIXERCONTROLDETAILS); begin Cdetails.cbStruct:=sizeof(cdetails); cdetails.dwControlID:=Control.dwControlID; cdetails.cbDetails:=sizeof(integer); cdetails.hwndOwner:=0; end; function getpeak(control:PMixerControl;var peak:integer):boolean; var details:TMixerControlDetailsSigned; cdetails:tMIXERCONTROLDETAILS; begin Result:=false; if control.dwControlType<> mixercontrol_controltype_peakmeter then exit; cdetails.cChannels:=1; cdetails.paDetails:=@details; fillstruct(control,cdetails); result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0; end; function setvolume(control:Pmixercontrol; volume:Tvolume):boolean; var details:array[0..30] of integer; cdetails:tMIXERCONTROLDETAILS; begin fillstruct(control,cdetails); cdetails.cChannels:=2; cdetails.paDetails:=@details; details[0]:=volume.left; details[1]:=volume.right; result:=mixerSetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0; volume.left:=details[0]; volume.right:=details[1]; end; function getvolume(control:Pmixercontrol; volume:Tvolume):boolean; var details:array[0..30] of integer; cdetails:tMIXERCONTROLDETAILS; begin fillstruct(control,cdetails); cdetails.cChannels:=2; cdetails.paDetails:=@details; result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0; volume.left:=details[0]; volume.right:=details[1]; end; end. procedure TForm1.Button1Click(Sender: TObject); var s : Tvolume; kz : Pmixercontrol; begin new(kz); kz.dwControlID := 0; s.left := 0; s.right := 0; try setvolume(kz,s); except end; freemem(kz); end; ~~~Delphi K.Top討論區站長~~~
直接貼上去就ok了嗎?? 小弟試不出來耶~ 會出現錯誤訊息 error in module unit1:declaration of class Tform1 is missing or incorrect. 還是我哪裡又搞錯了?? TOMMY
------
TOMMY
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-06-21 14:01:53 IP:61.219.xxx.xxx 未訂閱
引言: ~~~Delphi K.Top討論區站長~~~
直接貼上去就ok了嗎?? 小弟試不出來耶~ 會出現錯誤訊息 error in module unit1:declaration of class Tform1 is missing or incorrect. 還是我哪裡又搞錯了?? 不知道各位前輩是否有使用過'TAudio'元件 它可以在XP內執行 功能一切正常,沒有問題 不過.... 再加入這個元件時竟然無法關機 快.....救......救......我.....ㄚ [/quote] TOMMY
------
TOMMY
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-06-21 15:28:25 IP:192.168.xxx.xxx 未訂閱
這段程式我忘了從那來的 我已改好可run
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,mmsystem;    type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type Tvolume=record
       left,right:word;
            end ;    var
  Form1: TForm1;
procedure fillstruct(control:PMixerControl;var Cdetails:tMIXERCONTROLDETAILS);
function getpeak(control:PMixerControl;var peak:integer):boolean;
function setvolume(control:Pmixercontrol; volume:Tvolume):boolean;
function getvolume(control:Pmixercontrol; volume:Tvolume):boolean;    implementation    {$R *.DFM}    var
mcontrols:array of array of array of PMixerControl;
fmixerhandle:HMIXER;        procedure fillstruct(control:PMixerControl;var Cdetails:tMIXERCONTROLDETAILS);
begin
Cdetails.cbStruct:=sizeof(cdetails);
cdetails.dwControlID:=Control.dwControlID;
cdetails.cbDetails:=sizeof(integer);
cdetails.hwndOwner:=0;
end;    function getpeak(control:PMixerControl;var peak:integer):boolean;
var
details:TMixerControlDetailsSigned;
cdetails:tMIXERCONTROLDETAILS;
begin
Result:=false;
if control.dwControlType<> mixercontrol_controltype_peakmeter then exit;
cdetails.cChannels:=1;
cdetails.paDetails:=@details;
fillstruct(control,cdetails);
result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0;
end;    function setvolume(control:Pmixercontrol; volume:Tvolume):boolean;
var
details:array[0..30] of integer;
cdetails:tMIXERCONTROLDETAILS;
begin
fillstruct(control,cdetails);
cdetails.cChannels:=2;
cdetails.paDetails:=@details;
details[0]:=volume.left;
details[1]:=volume.right;
result:=mixerSetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0;
volume.left:=details[0];
volume.right:=details[1];
end;    function getvolume(control:Pmixercontrol; volume:Tvolume):boolean;
var
details:array[0..30] of integer;
cdetails:tMIXERCONTROLDETAILS;
begin
fillstruct(control,cdetails);
cdetails.cChannels:=2;
cdetails.paDetails:=@details;
result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0;
volume.left:=details[0];
volume.right:=details[1];
end;    procedure TForm1.Button1Click(Sender: TObject);
var s : Tvolume;
kz : Pmixercontrol;
begin
 new(kz); kz.dwControlID := 0;
 s.left := 0;
 s.right := 0;
 try
 setvolume(kz,s);
 except
 end;
 freemem(kz);
end;    end.
但好像無效果喔! 您先試試! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-06-21 16:38:26 IP:61.219.xxx.xxx 未訂閱
引言: 這段程式我忘了從那來的 我已改好可run

但好像無效果喔!
您先試試!    剛剛試了
還是不行耶
我使用過的兩個音量控制元件
一個不能控制xp
一個無法關機
我該如何做ㄚ?????    ~~~Delphi K.Top討論區站長~~~
TOMMY
------
TOMMY
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-06-21 17:53:41 IP:192.168.xxx.xxx 未訂閱
再來一段
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, mmsystem;    type
  TForm1 = class(TForm)
    TrackBar1: TTrackBar;
    TrackBar2: TTrackBar;
    TrackBar3: TTrackBar;
    procedure TrackBar1Change(Sender: TObject);
    procedure TrackBar2Change(Sender: TObject);
    procedure TrackBar3Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}
// Wave音量
procedure TForm1.TrackBar1Change(Sender: TObject);
var
t,v:Longint;
begin
// if a=0 then Exit;
 t:=TrackBar1.Position;
 v:=(t shl 8)or(t shl 24);
 waveOutSetVolume(0,v);
end;    //左聲道
procedure TForm1.TrackBar2Change(Sender: TObject);
var
t,v:Longint;
begin
  t:=TrackBar2.Position;
  waveOutGetVolume(0,@v);
  v:=v and $ffff0000 or (t shl 8);
  waveOutSetVolume(0,v);
end;    //右聲道
procedure TForm1.TrackBar3Change(Sender: TObject);
var
t,v:Longint;
begin
  t:=TrackBar3.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);
  TrackBar2.Position:=hi(v);
  TrackBar3.Position:=hi(v shr 16);
  if hi(v)>hi(v shr 16) then
   TrackBar1.Position:=hi(v)
  else
   TrackBar1.Position:=hi(v shr 16);
end;    end.    
這次好像可以喔! ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-06-21 20:03:53 IP:61.219.xxx.xxx 未訂閱
相當感謝!! 已經可以調音量了 不過...好像只可以調音波那一欄耶 如果我要調主音量或cd音量 要怎麼改ㄚ? 天使站長.感謝你又一次解救我.... TOMMY
------
TOMMY
TOMMY
一般會員


發表:16
回覆:32
積分:9
註冊:2002-03-15

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-06-25 10:49:38 IP:61.219.xxx.xxx 未訂閱
引言: 相當感謝!! 已經可以調音量了 不過...好像只可以調音波那一欄耶 如果我要調主音量或cd音量 要怎麼改ㄚ? 天使站長.感謝你又一次解救我.... TOMMY SORRY 又再次打擾您了 不好意思~ 小弟已經收到您寄的檔案了 前幾天去了南部昨晚才看到 試了一下..... 編輯程式都沒有問題 可是執行的時候會出現這個錯誤訊息: projectproject1.exe raised exception class EOutOFResources with message 'unable to inserta line'. process stopped 然後就不能執行了.請問我又哪裡出錯啦!? 剛剛又用了另一台電腦試了一下 程式從編輯到執行都沒有錯誤訊息 不過就是抓不到音量.無法調整!!
TOMMY 發表人 - tommy 於 2002/06/25 11:44:09
------
TOMMY
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-06-26 07:45:54 IP:192.168.xxx.xxx 未訂閱
引言: 程式從編輯到執行都沒有錯誤訊息
請問您用的電腦為win ??? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
jauds
一般會員


發表:1
回覆:3
積分:0
註冊:2003-06-24

發送簡訊給我
#15 引用回覆 回覆 發表時間:2004-11-24 11:43:39 IP:202.39.xxx.xxx 未訂閱
領航天使大大: 我試了你在6/12 post的例子,結果是會將Wave的音量 設成0,至於TrackBar怎麼變動好像都不會有影響; 我用的是WinXP Delphi 7,這有影響嗎? 麻煩有研究的大大指導一下...
系統時間:2024-05-08 15:26:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!