asvmfd
一般會員
發表:46 回覆:30 積分:15 註冊:2004-11-09
發送簡訊給我
|
可以是Line or Microphone音量.
應用waveInGetPosition? 請高手指點.
謝謝
|
allenchan
資深會員
發表:10 回覆:306 積分:283 註冊:2004-01-06
發送簡訊給我
|
這一篇有相關的討論:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58108
|
asvmfd
一般會員
發表:46 回覆:30 積分:15 註冊:2004-11-09
發送簡訊給我
|
BCB 內好像沒有SetMicrophoneVolume....
可有C Builder 的Samples?
Thanks
|
allenchan
資深會員
發表:10 回覆:306 積分:283 註冊:2004-01-06
發送簡訊給我
|
程式改寫自下列文章:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58108
#include //設定 麥克風的音量 0 ~ 65535
bool SetMicrophoneVolume(unsigned int bValue)
{
HMIXER hMix;
MIXERLINECONTROLS mxlc;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;
MIXERCONTROL mxc;
MIXERLINE mxl;
int intRet;
int nMixerDevs; // Check if Mixer is available
// Uberprufen, ob ein Mixer vorhanden
nMixerDevs = mixerGetNumDevs();
if (nMixerDevs < 1) return false; // open the mixer
intRet = mixerOpen(&hMix, 0, 0, 0, 0);
if (intRet != MMSYSERR_NOERROR) return false; 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) {
memset(&mxlc, 0, 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) {
memset(&mxcd, 0, 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) {
intRet = mixerClose(hMix);
throw new Exception("SetControlDetails Error");
}
}
}
else {
intRet = mixerClose(hMix);
throw new Exception("SetControlDetails Error");
}
}
catch (...) {
return false;
} intRet = mixerClose(hMix);
return true;
} /**** 在畫面上拉一個按鈕點兩下 ****/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SetMicrophoneVolume(50000);
}
SetMicrophoneVolume 即使在 Delphi 也不會有,這是一個自己包裝的 Function,我幫你改寫成 BCB 能用的了。
|
asvmfd
一般會員
發表:46 回覆:30 積分:15 註冊:2004-11-09
發送簡訊給我
|
Thank Allenchan大大,
那我去試試看 謝謝你喔....
|
asvmfd
一般會員
發表:46 回覆:30 積分:15 註冊:2004-11-09
發送簡訊給我
|
請問Allenchan大大
這是對Line 或對Microphone 有效? 做一個TrackBar來調,有看到Caption的值有變化,但是同時錄的聲音好像也沒變大聲...
void __fastcall TForm1::TrackBar2Change(TObject *Sender)
{
int value = 0xFFFF - TrackBar2->Position;
SetMicrophoneVolume( value);
Label1->Caption=IntToStr(value);
}
是問題出在哪?
|
allenchan
資深會員
發表:10 回覆:306 積分:283 註冊:2004-01-06
發送簡訊給我
|
請參考:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=60743 我另外寫了一個範例,您試試看可不可以。
|
asvmfd
一般會員
發表:46 回覆:30 積分:15 註冊:2004-11-09
發送簡訊給我
|
|