我已经了解了有关 WinMM 的所有知识(打开/关闭混音器、枚举控件等)。让我感到困惑的是,似乎 WPF 的 MediaElement 通过 WinMM 忽略了我的设置,但 Window 的音量混合器显示我正在正确更改设置.
所以我基本上可以用我的控制来静音音量,看到它在音量混合器中静音,播放声音并听到它,然后双击音量混合器中的静音按钮,播放声音而不听到它。
通过 Window 的 Volume Mixer 完成的操作不仅仅是 WinMM api 调用,而是显示使用 WinMM 设置。
有什么我想念的吗?
我用过每一行,只有 Speaker/WaveOut 工作。我从线路中获得了音量和静音控件,两者具有相同的效果。
这只是导致此问题的 MediaElement。如果我通过 WinMM 播放声音,或者如果我嵌入了本机控件或资源管理器,我可以使用音量控制将其静音。
我的第一个理论是,因为我在 Windows7 中进行测试,所以 MediaElement 被分配给一个单独的会话,而不是应用程序的默认会话,并且不知何故,音量混合器会影响应用程序中的所有会话。在这一点上,我必须根据操作系统选择是使用 WinMM 还是 WASAPI。如果这是真的,那么 WinMM 确实不像 Windows 声称的那样不受支持(为了向后兼容),但也许它们适用于较旧的技术(如 Winforms 和 AFX/MFC)。
编辑:我在这个答案中使用代码: https ://stackoverflow.com/a/294525/491837