Страница 1 из 1
Проблема с контролем громкости звука
Добавлено: 15 мар 2007, 01:48
timself
Не могу сделать вроде бы простую вещь: есть 2 кнопки "+" и "--" при нажатии на которые должна изменяться громкость проигрывания Audio-CD диска.
Я подключил winmm.lib и winmm.inc , пробовал использовать waveOutSetVolume и mixerSetControlDetails, но что-то упускаю - ничего не выходит. Смог добиться только того, что при нажатии на "--" громкость waveout обнуляется. Чтение Multimedia Reference оказалось также информативно, как чтение японской поэзии.
Подскажите как сделать, или подбросьте исходник на masm если есть.
Re: Проблема с контролем громкости звука
Добавлено: 15 мар 2007, 10:39
somewhere
Код проги в студию, и желательно вместе с winmm.inc
Re: Проблема с контролем громкости звука
Добавлено: 15 мар 2007, 23:51
timself
Смысл проги прост: регулировать громкость во время проигрывания Audio-CD.
Я делал так:
Код: Выделить всё
...
hMixer dd 0
mxdc MIXERCAPS <?>
mxl MIXERLINE <?>
mxlc MIXERLINECONTROLS <?>
mxc MIXERCONTROL <?>
mxcd MIXERCONTROLDETAILS <?>
mxcdVol MIXERCONTROLDETAILS_UNSIGNED <?>
...
WndProc proc ...
...
.IF eax==WM_CREATE
INVOKE mixerOpen, addr hMixer, 0, 0, 0, 0 ; открываем mixer
...
.ELSEIF eax==WM_DESTROY
INVOKE mixerClose, addr hMixer ; закрываем mixer
...
.ELSEIF eax==WM_LBUTTONDOWN
.IF eax==BUTTON_PLUS ; кнопка "+" , этот код не работает
mov mxlc.dwControlType, MIXERCONTROL_CONTROLTYPE_VOLUME
mov mxcd.cbDetails, sizeof mxcdVol
mov mxcd.paDetails, offset mxcdVol
INVOKE mixerSetControlDetails, hMixer, addr mxlc, MIXER_GETCONTROLDETAILSF_VALUE
.ELSEIF eax==BUTTON_MINUS ; кнопка "--"
; то же самое - не работает
...
Вот часть
winmm.inc реализующая миксер:
Код: Выделить всё
IFNDEF WINMM_INC
WINMM_INC equ <1>
...
mixerClose PROTO :D WORD
mixerGetControlDetailsA PROTO :D WORD, :D WORD, :D WORD
mixerGetControlDetails equ <mixerGetControlDetailsA>
mixerGetControlDetailsW PROTO :D WORD, :D WORD, :D WORD
mixerGetDevCapsA PROTO :D WORD, :D WORD, :D WORD
mixerGetDevCaps equ <mixerGetDevCapsA>
mixerGetDevCapsW PROTO :D WORD, :D WORD, :D WORD
mixerGetID PROTO :D WORD, :D WORD, :D WORD
mixerGetLineControlsA PROTO :D WORD, :D WORD, :D WORD
mixerGetLineControls equ <mixerGetLineControlsA>
mixerGetLineControlsW PROTO :D WORD, :D WORD, :D WORD
mixerGetLineInfoA PROTO :D WORD, :D WORD, :D WORD
mixerGetLineInfo equ <mixerGetLineInfoA>
mixerGetLineInfoW PROTO :D WORD, :D WORD, :D WORD
mixerGetNumDevs PROTO
mixerMessage PROTO :D WORD, :D WORD, :D WORD, :D WORD
mixerOpen PROTO :D WORD, :D WORD, :D WORD, :D WORD, :D WORD
mixerSetControlDetails PROTO :D WORD, :D WORD, :D WORD
...
ELSE
echo -----------------------------------------
echo WARNING Duplicate include file winmm.inc
echo -----------------------------------------
ENDIF
Re: Проблема с контролем громкости звука
Добавлено: 16 мар 2007, 14:37
somewhere
" писал(а):mixerSetControlDetails, hMixer, addr mxlc, MIXER_GETCONTROLDETAILSF_VALUE
Что-то ты намудрил, тебе надо кинуть смещение структуры MIXERCONTROLDETAILS, т.е. в твоем случае Mxcd. И зачем тебе MIXER_GETCONTROLDETAILSF_VALUE, может наоборот - MIXER_SETCONTROLDETAILSF_VALUE?
Код: Выделить всё
INVOKE mixerSetControlDetails, hMixer, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE
Вообще желательно заполнять все поля структур, либо получать их через mixerGetControlDetails а потом менять нужные.