// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0 > or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT >, at your option.
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
use ctypes::c_float;
use shared::basetsd::UINT32;
use shared::guiddef::{GUID, LPCGUID};
use shared::minwindef::{BOOL, DWORD, UINT};
use um::unknwnbase::{IUnknown, IUnknownVtbl};
use um::winnt::HRESULT;
STRUCT !{
struct AUDIO_VOLUME_NOTIFICATION_DATA {
guidEventContext: GUID,
bMuted: BOOL,
fMasterVolume: c_float,
nChannels: UINT,
afChannelVolumes: [c_float;
1 ],
}}
pub type PAUDIO_VOLUME_NOTIFICATION_DATA = *
mut AUDIO_VOLUME_NOTIFICATION_DATA;
pub const ENDPOINT_HARDWARE_SUPPORT_VOLUME: DWORD =
0 x00000001;
pub const ENDPOINT_HARDWARE_SUPPORT_MUTE: DWORD =
0 x00000002;
pub const ENDPOINT_HARDWARE_SUPPORT_METER: DWORD =
0 x00000004;
RIDL!{
#[ uuid(
0 x657804fa,
0 xd6ad,
0 x4496,
0 x8a,
0 x60,
0 x35,
0 x27,
0 x52,
0 xaf,
0 x4f,
0 x89)]
interface IAudioEndpointVolumeCallback(IAudioEndpointVolumeCallbackVtbl): IUnknown
(IUnknownVtbl) {
fn OnNotify(
pNotify: PAUDIO_VOLUME_NOTIFICATION_DATA,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 x5cdf2c82, 0 x841e, 0 x4546, 0 x97, 0 x22, 0 x0c, 0 xf7, 0 x40, 0 x78, 0 x22, 0 x9a)]
interface IAudioEndpointVolume(IAudioEndpointVolumeVtbl): IUnknown(IUnknownVtbl) {
fn RegisterControlChangeNotify(
pNotify: *mut IAudioEndpointVolumeCallback,
) -> HRESULT,
fn UnregisterControlChangeNotify(
pNotify: *mut IAudioEndpointVolumeCallback,
) -> HRESULT,
fn GetChannelCount(
pnChannelCount: *mut UINT,
) -> HRESULT,
fn SetMasterVolumeLevel(
fLevelDB: c_float,
pguidEventContext: LPCGUID,
) -> HRESULT,
fn SetMasterVolumeLevelScalar(
fLevel: c_float,
pguidEventContext: LPCGUID,
) -> HRESULT,
fn GetMasterVolumeLevel(
pfLevelDB: *mut c_float,
) -> HRESULT,
fn GetMasterVolumeLevelScalar(
pfLevel: *mut c_float,
) -> HRESULT,
fn SetChannelVolumeLevel(
nChannel: UINT,
fLevelDB: c_float,
pguidEventContext: LPCGUID,
) -> HRESULT,
fn SetChannelVolumeLevelScalar(
nChannel: UINT,
fLevel: c_float,
pguidEventContext: LPCGUID,
) -> HRESULT,
fn GetChannelVolumeLevel(
nChannel: UINT,
pfLevelDB: *mut c_float,
) -> HRESULT,
fn GetChannelVolumeLevelScalar(
nChannel: UINT,
pfLevel: *mut c_float,
) -> HRESULT,
fn SetMute(
bMute: BOOL,
pguidEventContext: LPCGUID,
) -> HRESULT,
fn GetMute(
pbMute: *mut BOOL,
) -> HRESULT,
fn GetVolumeStepInfo(
pnStep: *mut UINT,
pnStepCount: *mut UINT,
) -> HRESULT,
fn VolumeStepUp(
pguidEventContext: LPCGUID,
) -> HRESULT,
fn VolumeStepDown(
pguidEventContext: LPCGUID,
) -> HRESULT,
fn QueryHardwareSupport(
pdwHardwareSupportMask: *mut DWORD,
) -> HRESULT,
fn GetVolumeRange(
pflVolumeMindB: *mut c_float,
pflVolumeMaxdB: *mut c_float,
pflVolumeIncrementdB: *mut c_float,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 x66e11784, 0 xf695, 0 x4f28, 0 xa5, 0 x05, 0 xa7, 0 x08, 0 x00, 0 x81, 0 xa7, 0 x8f)]
interface IAudioEndpointVolumeEx(IAudioEndpointVolumeExVtbl):
IAudioEndpointVolume(IAudioEndpointVolumeVtbl) {
fn GetVolumeRangeChannel(
iChannel: UINT,
pflVolumeMindB: *mut c_float,
pflVolumeMaxdB: *mut c_float,
pflVolumeIncrementdB: *mut c_float,
) -> HRESULT,
}}
RIDL!{#[ uuid(0 xc02216f6, 0 x8c67, 0 x4b5b, 0 x9d, 0 x00, 0 xd0, 0 x08, 0 xe7, 0 x3e, 0 x00, 0 x64)]
interface IAudioMeterInformation(IAudioMeterInformationVtbl): IUnknown(IUnknownVtbl) {
fn GetPeakValue(
pfPeak: *mut c_float,
) -> HRESULT,
fn GetMeteringChannelCount(
pnChannelCount: *mut UINT,
) -> HRESULT,
fn GetChannelsPeakValues(
u32ChannelCount: UINT32,
afPeakValues: *mut c_float,
) -> HRESULT,
fn QueryHardwareSupport(
pdwHardwareSupportMask: *mut DWORD,
) -> HRESULT,
}}
Messung V0.5 in Prozent C=96 H=100 G=97
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-22)
¤
*© Formatika GbR, Deutschland