Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF MediaElement和WinMM_Wpf_Winapi_Mediaelement_Winmm - Fatal编程技术网

WPF MediaElement和WinMM

WPF MediaElement和WinMM,wpf,winapi,mediaelement,winmm,Wpf,Winapi,Mediaelement,Winmm,我已经了解了关于WinMM(打开/关闭混音器、枚举控件等)的所有知识,但让我感到困惑的是,WPF的MediaElement似乎通过WinMM忽略了我的设置,但Window的音量混音器显示我正确地更改了设置 因此,我可以使用我的控件将音量静音,在音量混合器中看到音量已静音,播放声音并听到它,然后双击音量混合器中的“静音”按钮,播放声音而不听到它 有些事情是通过窗口的混音器完成的,它不仅仅是WinMM api调用,而是使用WinMM设置显示 有什么我遗漏的吗 我使用了每一行,只有扬声器/WaveOu

我已经了解了关于WinMM(打开/关闭混音器、枚举控件等)的所有知识,但让我感到困惑的是,WPF的MediaElement似乎通过WinMM忽略了我的设置,但Window的音量混音器显示我正确地更改了设置

因此,我可以使用我的控件将音量静音,在音量混合器中看到音量已静音,播放声音并听到它,然后双击音量混合器中的“静音”按钮,播放声音而不听到它

有些事情是通过窗口的混音器完成的,它不仅仅是WinMM api调用,而是使用WinMM设置显示

有什么我遗漏的吗

我使用了每一行,只有扬声器/WaveOut工作。我从线路上得到音量和静音控制,两者都有相同的效果

这只是导致这种情况的MediaElement。如果我通过WinMM播放声音,或者如果我嵌入了本机控件或资源管理器,我可以使用音量控制将其静音

我的第一个理论是,因为我在Windows7中进行测试,MediaElement被分配给一个独立的会话,而不是应用程序的默认会话,而且卷混合器会影响应用程序中的所有会话。在这一点上,我必须根据操作系统来选择是使用WinMM还是WASAPI。如果这是真的,那么WinMM真的不像Windows声称的那样受支持(为了向后兼容),但可能它们是针对较旧的技术(比如Winforms和AFX/MFC)

编辑: 我在回答这个问题时使用了代码:

您使用的是什么版本的Windows?WinMM是旧的音频API模型,从Vista开始被WASAPI取代。如果您不使用XP,最好使用这些API。@标记我必须与XP兼容,这就是我使用此API的原因。但我在Windows7上看到了这个问题。这并不让我感到惊讶。使用MixerAPI并使其同时在XP和Windows7上工作确实很困难。我在设置麦克风录音时遇到了完全相同的问题levels@MarkMediaElement是否使用不同的音频会话?更糟糕的是,MediaPlayer也会忽略混音器设置,因此只能通过控件或主音量设置其音量。这让我相信MediaPlayer甚至可能使用不同的流程,MediaElement会被固定在您的流程中,因为它位于窗口的可视树中。是的,这听起来似乎是一个合理的解释。WASAPI不允许您对不知道GUID的音频会话执行任何操作。