Функция waveOutGetVolume

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 Функция не поддерживается драйвером

Параметры

uDeviceID
Идентификатор или описатель устройства
lpdwVolume
Текущие значения уровня громкости звука. Если поддерживаются раздельные настройки, то младшее слово определяет громкость левого канала, а старшее слово - правого. Если не поддерживается, то старшее слово игнорируется, а младшее слово определяет общую громкость (моно)

Пример

' Получим текущие настройки
' громкости звука
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

Смотри также

waveOutSetVolume

Категория

Звук