Не могу сделать вроде бы простую вещь: есть 2 кнопки "+" и "--" при нажатии на которые должна изменяться громкость проигрывания Audio-CD диска.
Я подключил winmm.lib и winmm.inc , пробовал использовать waveOutSetVolume и mixerSetControlDetails, но что-то упускаю - ничего не выходит. Смог добиться только того, что при нажатии на "--" громкость waveout обнуляется. Чтение Multimedia Reference оказалось также информативно, как чтение японской поэзии.
Подскажите как сделать, или подбросьте исходник на masm если есть.
Проблема с контролем громкости звука
Модератор: Andy
Код проги в студию, и желательно вместе с winmm.inc
It's a long way to the top if you wanna rock'n'roll
Смысл проги прост: регулировать громкость во время проигрывания Audio-CD.
Я делал так:
Вот часть winmm.inc реализующая миксер:
Я делал так:
Код: Выделить всё
...
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 ; кнопка "--"
; то же самое - не работает
...
Код: Выделить всё
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
tim-soft.narod.ru
Что-то ты намудрил, тебе надо кинуть смещение структуры MIXERCONTROLDETAILS, т.е. в твоем случае Mxcd. И зачем тебе MIXER_GETCONTROLDETAILSF_VALUE, может наоборот - MIXER_SETCONTROLDETAILSF_VALUE?" писал(а):mixerSetControlDetails, hMixer, addr mxlc, MIXER_GETCONTROLDETAILSF_VALUE
Код: Выделить всё
INVOKE mixerSetControlDetails, hMixer, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE
It's a long way to the top if you wanna rock'n'roll