Изменение громкости

Тема в разделе "WASM.WIN32", создана пользователем pluton, 7 апр 2007.

  1. pluton

    pluton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    66
    Адрес:
    Odessa
    Привет всем!
    Как получить каналы (Master Volume, Aux, MIDI, ...) для изменения их громкости? Надо юзать функции mixer*. Но чё-то не шибко ясно как; в MSDN примера нету.
    Пробовал так (код на си, не пинайте ногами плиз, могу и на асме, но разбираться быстрее на c++ builder):
    Код (Text):
    1.     mmres = mixerOpen(&hMixer, 0, 0, 0, 0);
    2.     //   открыть девайс, тоесть саундкарту
    3.     mmres = mixerOpen(&hMixer, 0, 0, 0, 0);
    4.     mlc.cbStruct = sizeof mlc;
    5.     mlc.cControls = 1;
    6.     mlc.cbmxctrl = sizeof mc;
    7.     mlc.pamxctrl = &mc;
    8.     mlc.dwControlID = 0;
    9.     while (TRUE)
    10.     {
    11.         mmres = mixerGetLineControls(hMixer, &mlc,
    12.             MIXER_GETLINECONTROLSF_ONEBYID);
    13.         if (mmres != MMSYSERR_NOERROR) break;
    14.         ListBox2->Items->Add(mlc.pamxctrl->szName);
    15.         mlc.dwControlID++;
    16.     }
    17.     mmres = mixerClose(hMixer);
    Выводит слишком много всего.
    Пробовал константу MIXER_GETLINECONTROLSF_ONEBYTYPE:
    Код (Text):
    1.     mmres = mixerOpen(&hMixer, 0, 0, 0, 0);
    2.     mlc.cbStruct = sizeof mlc;
    3.     mlc.cControls = 1;
    4.     mlc.cbmxctrl = sizeof mc;
    5.     mlc.pamxctrl = &mc;
    6.     mlc.dwControlID = 0;
    7.     mlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
    8.     mlc.dwLineID = 0;
    9.     while (TRUE)
    10.     {
    11.         mmres = mixerGetLineControls(hMixer, &mlc,
    12.             MIXER_GETLINECONTROLSF_ONEBYTYPE);
    13.         if (mmres != MMSYSERR_NOERROR) break;
    14.         ListBox2->Items->Add(mlc.pamxctrl->szName);
    15.         mlc.dwControlID++;
    16.     }
    17.     mmres = mixerClose(hMixer);
    Выводит одну строчку: Volume.
    Ктото знает чё надо написать шобы правильно было? Может цикл неправильный?
    Спасибо
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    \masm32\examples\bcraven\mvolume
     
  3. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    Для Volume Control:
    Код (Text):
    1. GetMasterVolume proc
    2.  
    3.         invoke  mixerOpen,ADDR MixerHandle,0,hWnd,0,CALLBACK_WINDOW
    4.         .if eax == MMSYSERR_NOERROR
    5.             mov mxlc.cbStruct,SIZEOF mxlc
    6.             mov mxlc.dwLineID,SPEAKEROUTLINEID
    7.             mov mxlc.dwControlType,MIXERCONTROL_CONTROLTYPE_VOLUME
    8.             mov mxlc.cControls,1
    9.             mov mxlc.cbmxctrl,SIZEOF mxc
    10.             mov mxlc.pamxctrl,OFFSET mxc
    11.             invoke  mixerGetLineControls,MixerHandle,ADDR mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE
    12.             mov eax,mxc.dwControlID
    13.             mov VolCtlIDMtr,eax
    14.             mov mxcdVol.dwValue,1
    15.             mov mxcd.cbStruct,SIZEOF mxcd
    16.             mov eax,VolCtlIDMtr
    17.             mov mxcd.dwControlID,eax
    18.             mov mxcd.cChannels,1
    19.             mov mxcd.cMultipleItems,0
    20.             mov mxcd.cbDetails,SIZEOF mxcdVol
    21.             mov mxcd.paDetails,OFFSET mxcdVol
    22.             invoke mixerGetControlDetails,MixerHandle,ADDR mxcd,MIXER_GETCONTROLDETAILSF_VALUE
    23.             mov eax,mxcdVol[0].dwValue
    24.         .else
    25.             mov eax,MIXER_ERROR
    26.         .endif
    27. ret
    28. GetMasterVolume endp
     
  4. pluton

    pluton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    66
    Адрес:
    Odessa
    To Y_Mur и GMax:
    это я видел. там изменяется громкость Master Volume. А мне надо перечислить каналы (Master Volume, Aux, MIDI, ...)
     
  5. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    Есть RIP.
    Делал давно, все руки никак не дойдут доделать.

    Выкладываю экзешник, т.к. исходник выглядит также как код в отладчике.

    http://rapidshare.com/files/24916179/Mixer.exe.html

    P.S. Если действительно надо то можно разобратся.
     
  6. pluton

    pluton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    66
    Адрес:
    Odessa
    to GMax:
    спасибо
     
  7. pluton

    pluton New Member

    Публикаций:
    0
    Регистрация:
    8 фев 2007
    Сообщения:
    66
    Адрес:
    Odessa
    Разобрался с прогой. Было немного непривычно - нету ebp-фреймов в функциях. Это ты сам так писал, или компилятор хитрый попался?
    Если кому надо, выкладываю архив: в нём exe, idb (для IDA) и asm (сгенереный идой с моими комментами).
    http://rs87.rapidshare.com/files/25565108/mixer.rar
     
  8. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    Рад что помогло!
    Компилятор у проги был VС++ 6, он иногда такое делает. Типа оптимизация, использует ebp для своих нужд.