{A}{S0}简介
Windows Vista的功能完全一套新的用户模式音频组件,提供每个应用程序的音量控制。这些新组件的顶部,无需更改任何代码,使所有的'老'的应用程序支持这个新的音频API的全部遗产,如waveXxx和mixerXxx功能和DirectSound API已经被重建。这是一个伟大的事情,因为突然之间,你不再是控制主音量的操作系统,但只有你自己的应用程序,当您的应用程序读取或查询操作系统的主音量设置时除外。核心音频API
新的API是基于COM,并分裂成大致做了以下四个子的API: - 这个API允许系统中可用的音频设备的枚举和实例。{A3} - 这个API允许播放和录制音频流。{A4} - 这个API允许访问硬件的功能,如低音,高音和自动增益控制。{A5} - 这个API允许访问量与峰米。
MMDevice和EndpointVolume API的需要来控制主音量和静音设置,而API的本身就是一个巨大的进步,传统功能,因为缺乏一个很好的管理接口,使得与他们不知何故不愉快的经历在C#。编写COM互操作代码是新手,很容易出错,因此创建一个包装做的所有管道,对我们来说似乎是一个好主意。使用代码
你总是开始创建枚举类,让您找到您想要的设备,或者只是解决的默认设备。
你有一个到一个MMDevice对象的引用后,切换静音是那么容易,因为:{C}
或获取左声道的音量:Console.WriteLine("Left Volume : {0}",
defaultDevice.AudioEndpointVolume.Channels[0].VolumeLevelScalar);
由于包装实现了完整的EndpointVolume API,我们也可以得到更先进的东西,如所有通道的峰值米:Console.WriteLine("Master Peak : {0}",
defaultDevice.AudioMeterInformation.MasterPeakValue);
Console.WriteLine("Left Peak : {0}",
defaultDevice.AudioMeterInformation.PeakValues[0]);
Console.WriteLine("Right Peak : {0}",
defaultDevice.AudioMeterInformation.PeakValues[1]);
,如果你只是想被告知,当有人改变音量设置,您可以订阅像这样的OnVolumeNotification事件:
兴趣点defaultDevice.AudioEndpointVolume.OnVolumeNotification += new
AudioEndpointVolumeNotificationDelegate(
AudioEndpointVolume_OnVolumeNotification);
.
.
void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
{
Console.WriteLine("New Volume {0}", data.MasterVolume);
Console.WriteLine("Muted {0}", data.Muted);
}
卷的通知文件的国家,它必须是无阻塞。客户端不应该等待一个同步对象在事件回调。请记住,当编写事件处理程序。
虽然Vista的每个应用程序的音频设置,微软还没有开放API来枚举会话。所以不会有可能使一个类似sndvol.exe -的应用程序。
现在,只有MMDevice和EndpointVolume API的实现,我希望在未来的更新添加WASAPI。历史2007.04.23 - 最初的文章2010.05.17 - 更新源和样品