Установка значений свойств контрола аудиолинии
MMRESULT mixerSetControlDetails( HMIXEROBJ hmxobj, LPMIXERCONTROLDETAILS pmxcd, DWORD fdwDetails );
Устанавливает харатеристики одиночного контрола аудиолинии.
hmxobj -- обработчик микшера, которого мы опрашиваем.
pmxcd -- указатель на структуру MIXERCONTROLDETAILS, которая заполнена информацией о контроле предыдущим вызовом mixerGetControlDetails.
fdwDetails -- флаги, определяющие возвращаемую информацию. Используем MIXER_OBJECTF_HMIXER or MIXER_SETCONTROLDETAILSF_VALUE.
MIXER_SETCONTROLDETAILSF_VALUE -- устанавливается новое значение контрола.
PaDetails из структуры MIXERCONTROLDETAILS указывает на структуру, соответствующую типу контрола.
При вызове этих функций используется структура
MIXERCONTROLDETAILS
Эта структура указывает на список структур, содержащих конкретную информацию по контролам аудиолинии.
typedef struct { DWORD cbStruct; DWORD dwControlID; DWORD cChannels; union { HWND hwndOwner; DWORD cMultipleItems; }; DWORD cbDetails; LPVOID paDetails; } MIXERCONTROLDETAILS;
cbStruct -- размер структуры в байтах.
dwControlID -- идентификатор контрола, свойства которого мы читаем/изменяем
cChannels - число каналов, свойства которых меняются. Ставьте значение 0, 1 или MIXERLINE.cChannels, если свойства контрола относятся ко всем каналам аудиолинии. Других значений не ставьте.
hwndOwner - указатель окна. Для наших целей неважно. Ставьте 0.
cMultipleItems - ставьте 0 и будет хорошо
cbDetails - размер структуры, содержащей конкретную информацию по контролу.
paDetails - указатель на одну или более структур, содержащих конкретную информацию по контролу.
Из структур, содержащих конкретную информацию по контролам аудиолинии, сейчас нас интересуют только две, связанные с управлением громкостью и включением звука: MIXERCONTROLDETAILS_BOOLEAN и MIXERCONTROLDETAILS_UNSIGNED.
MIXERCONTROLDETAILS_BOOLEAN
Возвращает или устанавливает значение свойства контрола булевского типа.
typedef struct { LONG fValue; } MIXERCONTROLDETAILS_BOOLEAN;
fValue - значение логического типа ( 0- FALSE, ненулевое - TRUE)
Подходит для управления контролом типа MIXERCONTROL_CONTROLTYPE_MUTE.
MIXERCONTROLDETAILS_UNSIGNED
Возвращает или устанавливает значение свойства контрола целого беззнакового типа.
typedef struct { DWORD dwValue; } MIXERCONTROLDETAILS_UNSIGNED;
dwValue - Целое беззнаковое
Подходит для управления контролом типа MIXERCONTROL_CONTROLTYPE_VOLUME
Без уровня. Поддержка сообщений. Отправка определенного пользователем сообщения.
DWORD mixerMessage( HMIXER hmx, UINT uMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2 );
Посылка пользовательского сообщения напрямую драйверу микшера
hmx -- обработчик открытого микшера
uMsg -- пользовательское сообщение Должно быть больше или равно MXDM_USER.
dwParam1, dwParam2 -- параметры сообщения.
MM_MIXM_CONTROL_CHANGE
Сообщение, которое посылается микшером приложению чтобы уведомить об изменении состояния контрола.
wParam = (WPARAM) hMixer
lParam = (LPARAM) dwControlID
hMixer -- обработчик микшера, который послал сообщение.
dwControlID -- идентификатор контрола, который изменил состояние.
MM_MIXM_LINE_CHANGE
Сообщение, которое посылается микшером приложению чтобы уведомить об изменении состояния аудиолинии.
wParam = (WPARAM) hMixer
lParam = (LPARAM) dwLineID
hMixer -- обработчик микшера, который послал сообщение.
dwLineID -- идентификатор аудиолинии, которая изменила свое состояние.
И еще немножко :)
Вот, собственно, и все, что желательно знать, чтобы начать работать с микшером. Да и этого многовато ;) В качестве примера приведена программа, которая прочитывает все, что связано с микшером и отображает это в виде дерева
Далее по плану: как записать звук и что такое fullduplex.