Интерфейс IAudioEndpointVolume (endpointvolume.h)
Интерфейс IAudioEndpointVolume представляет элементы управления громкостью в звуковом потоке на устройство конечной точки звука или из нее. Клиент получает ссылку на интерфейс IAudioEndpointVolume устройства конечной точки, вызывая метод IMMDevice::Activate с параметром iid , равным REFIID IID_IAudioEndpointVolume.
Звуковые приложения, использующие API MMDevice и WASAPI , обычно используют интерфейс ISimpleAudioVolume для управления уровнями громкости потока для каждого сеанса. В редких случаях специализированное звуковое приложение может потребовать использования интерфейса IAudioEndpointVolume для управления уровнем громкости master устройства конечной точки звука. Клиент IAudioEndpointVolume должен позаботиться о том, чтобы избежать потенциально разрушительных последствий для других звуковых приложений при изменении master уровней громкости конечных точек аудиоустройств. Как правило, пользователь имеет монопольный контроль над уровнями громкости master с помощью программы управления громкостями Windows, Sndvol.exe.
Если устройство адаптера, которое выполняет потоковую передачу звуковых данных на устройство конечной точки или с него, имеет аппаратные элементы управления громкостью и отключением звука, интерфейс IAudioEndpointVolume использует эти элементы управления для управления параметрами громкости и отключения звука звукового потока. Если звуковое устройство не имеет аппаратного управления громкостью для потока, звуковой модуль автоматически реализует элементы управления громкостью и отключением звука в программном обеспечении.
Для приложений, которые управляют потоками общего режима на устройства конечных точек и с устройств конечных точек, поведение IAudioEndpointVolume отличается для потоков отрисовки и захвата потоков.
Для потока отрисовки в общем режиме элемент управления громкостью конечной точки, к которому клиент обращается через интерфейс IAudioEndpointVolume , работает независимо от элементов управления объемом для каждого сеанса, которые реализуют интерфейсы ISimpleAudioVolume и IChannelAudioVolume . Таким образом, уровень громкости потока отрисовки является результатом объединенных эффектов управления объемом конечной точки и элементов управления для каждого сеанса.
Для потока записи общего режима элементы управления объемом для каждого сеанса, реализуемые интерфейсами ISimpleAudioVolume и IChannelAudioVolume , привязаны непосредственно к элементу управления громкостью конечной точки, реализованной интерфейсом IAudioEndpointVolume . Изменение элемента управления громкостью для каждого сеанса с помощью методов в интерфейсах ISimpleAudioVolume и IChannelAudioVolume изменяет настройку элемента управления громкостью интерфейса IAudioEndpointVolume , и обратное также верно. Уровни тома, представленные каждым из интерфейсов, соответствуют друг другу следующим образом:
- Для каждого канала в потоке IAudioEndpointVolumeпредоставляет звуковые уровни громкости, выраженные в децибелах (дБ), которые сопоставляются с нормализованными значениями в диапазоне от 0,0 (минимальный объем) до 1,0 (максимальный объем). Возможный диапазон зависит от звукового драйвера. Дополнительные сведения см. в разделе IAudioEndpointVolume::GetVolumeRange .
- Том сеанса, представленный ISimpleAudioVolume::GetMasterVolume , является скалярным значением в диапазоне от 0,0 до 1,0, которое соответствует параметру наибольшего объема в различных каналах. Например, если левый канал имеет значение 0,8, а правый — 0,4, то ISimpleAudioVolume::GetMasterVolume вернет значение 0,8.
- Если уровень громкости канала управляется с помощью методов в интерфейсе IChannelAudioVolume , скаляр, указывающий том, всегда находится относительно тома сеанса. Это означает, что канал или каналы с наибольшим томом имеют том 1,0. В примере двух каналов для IChannelAudioVolume::GetChannelVolume заданы тома 0,8 и 0,4 по IAudioEndpointVolume::SetChannelVolume::SetChannelLevelScalar, IChannelAudioVolume будет указывать тома 1,0 и 0,5.
Если на устройстве есть аппаратные элементы управления громкостью и отключением звука, изменения, внесенные в параметры громкости устройства и отключения звука с помощью интерфейса IAudioEndpointVolume , влияют на уровень громкости как в общем, так и в монопольном режиме. Если на устройстве отсутствуют аппаратные элементы управления громкостью и выключением звука, изменения, внесенные в программный том и отключающие элементы управления с помощью интерфейса IAudioEndpointVolume , влияют на уровень громкости в общем режиме, но не в монопольном режиме. В монопольном режиме клиент и устройство обмениваются звуковыми данными напрямую, минуя элементы управления программным обеспечением. Однако элементы управления программным обеспечением являются постоянными, а изменения тома, внесенные во время работы устройства в монопольном режиме, вступают в силу, когда устройство переключается на режим работы в общем режиме.
Чтобы определить, имеет ли устройство элементы управления томом оборудования и отключением звука, вызовите метод IAudioEndpointVolume::QueryHardwareSupport .
Методы интерфейса IAudioEndpointVolume позволяют клиенту выражать уровни громкости в децибелах или в виде нормализованных звуковых значений. В последнем случае уровень громкости выражается в виде значения с плавающей запятой в нормализованном диапазоне от 0,0 (минимальный объем) до 1,0 (максимальный объем). В этом диапазоне связь нормализованного уровня громкости с затуханием амплитуды сигнала описывается нелинейной звуковой кривой. Дополнительные сведения о кривых с коникой звука см. в разделе Аудио-конусообразные элементы управления громкости.
Кроме того, для удобной поддержки ползунков громкости в пользовательских интерфейсах интерфейс IAudioEndpointVolume позволяет клиентам устанавливать и получать уровни громкости, выраженные в виде дискретных значений или шагов. Шаги равномерно распределены по нелинейной кривой со звуком. Если диапазон содержит n шагов, шаги нумеруются от 0 до n–1, где шаг 0 представляет минимальный уровень громкости, а шаг n–1 — максимальный.
Пример кода, в котором используется интерфейс IAudioEndpointVolume , см. в разделе Элементы управления громкостью конечных точек.
Наследование
Интерфейс IAudioEndpointVolume наследуется от интерфейса IUnknown . IAudioEndpointVolume также содержит следующие типы элементов:
Методы
Интерфейс IAudioEndpointVolume содержит следующие методы.
IAudioEndpointVolume::GetChannelCount Метод GetChannelCount получает количество каналов в звуковом потоке, который входит или покидает устройство конечной точки аудио. |
IAudioEndpointVolume::GetChannelVolumeLevel Метод GetChannelVolumeLevel получает уровень громкости указанного канала в звуковом потоке, который входит или покидает устройство конечной точки звука. |
IAudioEndpointVolume::GetChannelVolumeLevelScalar Метод GetChannelVolumeLevelScalar получает нормализованный уровень громкости звука указанного канала аудиопотока, который входит или покидает устройство конечной точки звука. |
IAudioEndpointVolume::GetMasterVolumeLevel Метод GetMasterVolumeLevel получает master уровне громкости аудиопотока, который входит в устройство конечной точки звука или покидает его. |
IAudioEndpointVolume::GetMasterVolumeLevelScalar Метод GetMasterVolumeLevelScalar получает master уровень громкости аудиопотока, который входит или покидает устройство конечной точки звука. Уровень громкости выражается как нормализованное звуковое значение в диапазоне от 0,0 до 1,0. |
IAudioEndpointVolume::GetMute Метод GetMute получает состояние отключения звукового потока, который входит в устройство конечной точки звука или покидает его. |
IAudioEndpointVolume::GetVolumeRange Метод GetVolumeRange получает диапазон громкости (в децибелах) аудиопотока, который входит в устройство конечной точки звука или покидает его. |
IAudioEndpointVolume::GetVolumeStepInfo Метод GetVolumeStepInfo получает сведения о текущем шаге в диапазоне томов. |
IAudioEndpointVolume::QueryHardwareSupport Метод QueryHardwareSupport запрашивает у конечного устройства аудио его аппаратные функции. (IAudioEndpointVolume.QueryHardwareSupport) |
IAudioEndpointVolume::RegisterControlChangeNotify Метод RegisterControlChangeNotify регистрирует интерфейс обратного вызова уведомления клиента. |
IAudioEndpointVolume::SetChannelVolumeLevel Метод SetChannelVolumeLevel задает уровень громкости в децибелах указанного канала аудиопотока, который входит или покидает устройство конечной точки звука. |
IAudioEndpointVolume::SetChannelVolumeLevelScalar Метод SetChannelVolumeLevelScalar задает нормализованный уровень громкости звука указанного канала в аудиопотоке, который входит или покидает устройство конечной точки аудио. |
IAudioEndpointVolume::SetMasterVolumeLevel Метод SetMasterVolumeLevel задает master уровень громкости аудиопотока, который входит или покидает устройство конечной точки звука. |
IAudioEndpointVolume::SetMasterVolumeLevelScalar Метод SetMasterVolumeLevelScalar задает master уровень громкости аудиопотока, который входит или покидает устройство конечной точки аудио. Уровень громкости выражается как нормализованное звуковое значение в диапазоне от 0,0 до 1,0. |
IAudioEndpointVolume::SetMute Метод SetMute задает состояние выключения звукового потока, который входит в устройство конечной точки звука или покидает его. |
IAudioEndpointVolume::UnregisterControlChangeNotify Метод UnregisterControlChangeNotify удаляет регистрацию интерфейса обратного вызова уведомления клиента, зарегистрированного клиентом в предыдущем вызове метода IAudioEndpointVolume::RegisterControlChangeNotify. |
IAudioEndpointVolume::VolumeStepDown Метод VolumeStepDown на один шаг уменьшает уровень громкости аудиопотока, который входит или покидает устройство конечной точки звука. |
IAudioEndpointVolume::VolumeStepUp Метод VolumeStepUp увеличивает на один шаг уровень громкости звукового потока, который входит или покидает устройство конечной точки звука. |
Требования
Минимальная версия клиента | Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | endpointvolume.h |