改变音量控制中录音来源和音量大小 |
尚未結案
|
cavalier
一般會員 發表:11 回覆:14 積分:5 註冊:2003-12-05 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
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 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
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 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
cavalier
一般會員 發表:11 回覆:14 積分:5 註冊:2003-12-05 發送簡訊給我 |
|
cavalier
一般會員 發表:11 回覆:14 積分:5 註冊:2003-12-05 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
allenchan
資深會員 發表:10 回覆:306 積分:283 註冊:2004-01-06 發送簡訊給我 |
|
allenchan
資深會員 發表:10 回覆:306 積分:283 註冊:2004-01-06 發送簡訊給我 |
這是一個可以調整錄音麥克風音量的 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; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |