全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3296
推到 Plurk!
推到 Facebook!

改变音量控制中录音来源和音量大小

尚未結案
cavalier
一般會員


發表:11
回覆:14
積分:5
註冊:2003-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-19 14:35:40 IP:218.18.xxx.xxx 未訂閱
由于实际需要,我需要写一个程序,完成以下功能: 改变音量控制中录音来源的选项. 具体是这样的:双击右下角的音量图标,会弹出音量控制的对话框. 选择选项菜单下的属性子菜单,在这里可以选择录音并进行一些设置. 我想知道怎么来编程实现对这些选项进行设置.
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-19 20:56:57 IP:61.222.xxx.xxx 未訂閱
找一下類似 音量調整的控件就好了。 >改变音量控制中录音来源的选项. 應該是MIC 音量吧
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-19 22:02:49 IP:220.135.xxx.xxx 未訂閱
waveOutSetVolume 用"音量"下去搜尋, 可以找到答案 http://delphi.ktop.com.tw/topic.php?topic_id=54418 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34844 http://delphi.ktop.com.tw/topic.php?topic_id=41351 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
cavalier
一般會員


發表:11
回覆:14
積分:5
註冊:2003-12-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-20 10:49:34 IP:218.18.xxx.xxx 未訂閱
to wameng:     是改变上图中的录音来源的选项,比如,在line-in 和 microphone 中切换,并且对其音量大小进行控制 to Miles: 谢谢提供的连接,那种是通过枚举方法得出各种aduio line的,我希望能直接指定哪条line的,比如 MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE 这个参数就可以直接指定 下图中 microphone 这个选项的了 谢谢
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-21 01:58:24 IP:61.31.xxx.xxx 未訂閱
uses MMsystem;    //設定 麥克風的音量 0 ~ 65535 function SetMicrophoneVolume(bValue: Word): Boolean; var                             hMix: HMIXER;    mxlc: MIXERLINECONTROLS;   mxcd: TMIXERCONTROLDETAILS;   vol: TMIXERCONTROLDETAILS_UNSIGNED;   mxc: MIXERCONTROL;    mxl: TMixerLine;    intRet: Integer;    nMixerDevs: Integer;  begin   // Check if Mixer is available    // Uberprufen, ob ein Mixer vorhanden   nMixerDevs := mixerGetNumDevs();   if (nMixerDevs < 1) then   begin      Exit;    end;   // open the mixer   intRet := mixerOpen(@hMix, 0, 0, 0, 0);   if intRet <> MMSYSERR_NOERROR then Exit;   Try     mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;     mxl.cbStruct := SizeOf(mxl);        // get line info     intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);        if intRet = MMSYSERR_NOERROR then     begin       ZeroMemory(@mxlc, SizeOf(mxlc));       mxlc.cbStruct := SizeOf(mxlc);       mxlc.dwLineID := mxl.dwLineID;       mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;       mxlc.cControls := 1;       mxlc.cbmxctrl := SizeOf(mxc);          mxlc.pamxctrl := @mxc;       intRet := mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);          if intRet = MMSYSERR_NOERROR then       begin         ZeroMemory(@mxcd, SizeOf(mxcd));         mxcd.dwControlID := mxc.dwControlID;         mxcd.cbStruct := SizeOf(mxcd);         mxcd.cMultipleItems := 0;         mxcd.cbDetails := SizeOf(Vol);         mxcd.paDetails := @vol;         mxcd.cChannels := 1;            // vol.dwValue := mxlc.pamxctrl.Bounds.lMinimum; Set min. Volume / Minimum setzen         // vol.dwValue := mxlc.pamxctrl.Bounds.lMaximum; Set max. Volume / Maximum setzen         vol.dwValue := bValue;            intRet := mixerSetControlDetails(hMix, @mxcd,           MIXER_SETCONTROLDETAILSF_VALUE);         if intRet <> MMSYSERR_NOERROR then Raise Exception.Create('SetControlDetails Error');       end       else Raise Exception.Create('SetControlDetails Error');     end;   finally     intRet := mixerClose(hMix);   end; end; { 取至 Torry's} 有做一點點修改。    不曉得你們那邊 麥克風 用語,應該說什麼! 呵呵.. 發表人 -
cavalier
一般會員


發表:11
回覆:14
積分:5
註冊:2003-12-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-21 10:32:05 IP:218.18.xxx.xxx 未訂閱
to wameng: 谢谢你提供的代码,但是还是没能满足我的要求 那段代码只对“ >,不能实现在 >
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-21 11:18:00 IP:61.222.xxx.xxx 未訂閱
真奇怪!兩者不是都相通嗎! 事實上,在 Volume Control 設定好 Microphone 應該就可錄音了。 不曉得對您而言。 這兩者會間接影響到你的程序嗎!
cavalier
一般會員


發表:11
回覆:14
積分:5
註冊:2003-12-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-21 17:32:07 IP:218.17.xxx.xxx 未訂閱
to wameng: Volume Control 里的microphone 和Recording control里的microphone是不相同的 打个比方,在msn里的音频设置中,如下图: 就是对Recording control里的microphone进行设置,而不是对Volume Control 里的microphone 进行设置的
cavalier
一般會員


發表:11
回覆:14
積分:5
註冊:2003-12-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-21 17:44:33 IP:218.17.xxx.xxx 未訂閱
当Volume Control 里的microphone 取消静音时,就能听到麦克风的声音,这里的microphone的音量是控制现在麦克风的声音大小的 当Recording control里的microphone中的选择打勾时,表示声卡的录音来源是麦克风,这里的microphone的音量也是控制现在麦克风的声音大小的,但是准备的说,是控制录音源的声音大小的 上述两个麦克风是处于Mixer 中不同的Destination里的概念
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-10-21 20:50:10 IP:61.222.xxx.xxx 未訂閱
估計要改成 MIXERLINE_COMPONENTTYPE_DST_WAVEIN 方式才可以。 等我有空再改改看。
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-12-02 16:19:32 IP:61.230.xxx.xxx 未訂閱
不知這篇是否有幫助? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=60743
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-12-04 10:34:51 IP:61.62.xxx.xxx 未訂閱
這是一個可以調整錄音麥克風音量的 Sample,請試試看:
uses MMsystem;    //設定 麥克風的音量 0 ~ 65535
procedure SetMicVolume(iValue : Word);
var
   hmx : HMIXER;
   mxl : MIXERLINE;
   j, cConnections, cChannels : DWORD;
   mxc : MIXERCONTROL;
   mxlc : MIXERLINECONTROLS;
   vol : MIXERCONTROLDETAILS_UNSIGNED;
   mxcd : TMIXERCONTROLDETAILS;
begin
   // Open the mixer device
   mixerOpen(@hmx, 0, 0, 0, 0);       // Get the line info for the wave in destination line
   mxl.cbStruct := sizeof(mxl);
   mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_WAVEIN;
   mixerGetLineInfo(hmx, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);       // Now find the microphone source line connected to this wave in destination
   cConnections := mxl.cConnections;
   for j := 0 to cConnections - 1 do
   begin
      mxl.dwSource := j;
      mixerGetLineInfo(hmx, @mxl, MIXER_GETLINEINFOF_SOURCE);
      if (MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = mxl.dwComponentType) then
         break;
   end;
   // Find a volume control, if any, of the microphone line
   ZeroMemory(@mxlc, sizeof(MIXERLINECONTROLS));
   mxlc.cbStruct := sizeof(MIXERLINECONTROLS);
   mxlc.dwLineID := mxl.dwLineID;
   mxlc.dwControlID := MIXERCONTROL_CONTROLTYPE_VOLUME;
   mxlc.cControls := 1;
   mxlc.cbmxctrl :=  sizeof(MIXERCONTROL);
   mxlc.pamxctrl := @mxc;
   if(mixerGetLineControls(hmx, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = 0) then
   begin
      // Found!
      cChannels := mxl.cChannels;
      if (mxc.fdwControl and MIXERCONTROL_CONTROLF_UNIFORM) = 1 then
         cChannels := 1;          ZeroMemory(@mxcd, sizeof(TMIXERCONTROLDETAILS));
      mxcd.cbStruct := sizeof(TMIXERCONTROLDETAILS);
      mxcd.dwControlID := mxc.dwControlID;
      mxcd.cChannels := cChannels;
      mxcd.cMultipleItems := 0;
      mxcd.cbDetails := sizeof(MIXERCONTROLDETAILS_UNSIGNED);
      mxcd.paDetails := @vol;          vol.dwValue := iValue;          mixerSetControlDetails(hmx, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
   end;
   mixerClose(hmx);
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  SetMicVolume(50000);
end;
系統時間:2024-05-05 16:50:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!