![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Использование звука [D5, WinXP]
Начинающий делфер © (2002-09-30 07:12:00)Народ, такая проблема! Надо чтобы из моей проги можно было прибавлять и убавлять звук. Как енто сделать.
Заранее спасибо!
Squeez (2002-10-02 05:13:00) [1]Cамое эффективное использовать готовую и отлаженную компоненту для работы с миксером.
Например:
http://www.fi.muni.cz/~xkovalc/zip/amixer.zip
<Большое спасибо ее автору>
alxx (2002-09-30 10:49:00) [2]
Type TDMCIDevice = (dmciMaster, dmciWave, dmciMIDI, dmciCD);
Function GetVolumeControlID(DEV:TDMCIDevice):Integer;
Function SetVolume(dwVolume:DWORD;DEV:TDMCIDevice):Boolean;
implementation
Function SetVolume;
Var mxcd:TMIXERCONTROLDETAILS;
mxcd_u:MIXERCONTROLDETAILS_UNSIGNED;
mmr:Integer;
ghmx:Integer;
Begin
ghmx:=0;
mxcd.cbStruct := sizeof(mxcd);
mxcd.dwControlID := GetVolumeControlID(DEV);
mxcd.cChannels := 1;
mxcd.cMultipleItems := 0;
mxcd.cbDetails := 4;
mxcd.paDetails := @mxcd_u;
mmr := mixerGetControlDetails(HMIXEROBJ(ghmx), @mxcd, 0);
if (MMSYSERR_NOERROR <> mmr) Then Begin Result:= FALSE; Exit; End;
mxcd_u.dwValue := dwVolume*655;
mmr := mixerSetControlDetails(HMIXEROBJ(ghmx), @mxcd, 0);
if (MMSYSERR_NOERROR <> mmr) Then Begin Result:=FALSE; Exit; End;
Result:=TRUE;
End;
Function GetVolumeControlID;
Var mxl:MIXERLINE;
ghmx:Integer;
mxc:MIXERCONTROL;
mxlc:MIXERLINECONTROLS;
Begin
ghmx:=0;
mxl.cbStruct := sizeof(MIXERLINE);
Case DEV of
dmciMaster: mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
dmciWave : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
dmciMIDI : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
dmciCD : mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC;
End;
if (mixerGetLineInfo(HMIXEROBJ(ghmx), @mxl,
MIXER_OBJECTF_HMIXER or MIXER_GETLINEINFOF_COMPONENTTYPE)
<> MMSYSERR_NOERROR) THen Begin Result:=34;Exit;End;
mxlc.cbStruct := sizeof(MIXERLINECONTROLS);
mxlc.dwLineID := mxl.dwLineID;
mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls := 1;
mxlc.cbmxctrl := sizeof(MIXERCONTROL);
mxlc.pamxctrl := @mxc;
if (mixerGetLineControls(HMIXEROBJ(ghmx), @mxlc,
MIXER_OBJECTF_HMIXER or MIXER_GETLINECONTROLSF_ONEBYTYPE)
<> MMSYSERR_NOERROR) Then Begin Result:=34; Exit; End;
Result:=mxc.dwControlID;
End;
Opuhshii (2002-09-30 09:08:00) [3]mixerSetControlDetails()
mixerGetControlDetails().. соответственно,.. ;)