Declare Function waveOutGetVolume Lib "winmm" (ByVal uDeviceID As Long, lpdwVolume As Long) As Long
waveOutGetVolume получает текущие настройки громкости звука для устройства вывода звука. Если устройство имеет возможность, функция способна получать значения громкости отдельно для правого и левого каналов. Уровень громкости находится в диапазоне от &H0 (тишина) до &HFFFF (максимальный уровень). Промежуточные значения интерпретируются в логарифмическом масштабе.
В успешном случае функция возвращает MMSYSERR_NOERROR. В случае ошибки возвращаются следующие значения:
Значение | Описание |
---|---|
MMSYSERR_INVALHANDLE | Указан неправильный идентификатор устройства |
MMSYSERR_NODRIVER | В системе нет нужного драйвера |
MMSYSERR_NOMEM | Unable to allocate or lock memory |
MMSYSERR_NOTSUPPORTED | Функция не поддерживается драйвером |
' Получим текущие настройки ' громкости звука Dim volume As Long ' значения громкости Dim lvolume As Long, rvolume As Long ' уровень громкости для отдельных каналов Dim spkrcaps As WAVEOUTCAPS ' для определения поддержки двух каналов Dim numvols As Integer ' флаг, определяющий поддержку двух каналов Dim retval As Long ' возвращаемое значение ' Сначала определим, имеются ли два канала retval = waveOutGetDevCaps(0, spkrcaps, Len(spkrcaps)) If (spkrcaps.dwSupport And WAVECAPS_LRVOLUME) = WAVECAPS_LRVOLUME Then numvols = 2 ' есть два канала Else numvols = 1 ' только один канал End If ' Получим значения уровня громкости retval = waveOutGetVolume(0, volume) If numvols = 1 Then volume = volume And &HFFFF ' игнорируем старшее слово Debug.Print "Уровень громкости: "; Right(Hex(volume), 4) Else ' для двух каналов lvolume = volume And &HFFFF ' левый канал rvolume = (volume And &HFFFF0000) / &H10000 ' правый канал Debug.Print "Уровень громкости левого канала: "; Right(Hex(lvolume), 4) Debug.Print "Уровень громкости правого канала: "; Left(Hex(rvolume), 4) End If