我建立了一个外部设备来控制Windows7-Applications的级别。串行通信有效,但是我在使用内置的Windows Audio Session API(WASAPI)时遇到了麻烦。
特别是,我有两个问题:
如果您能帮助我,我会很高兴!
最佳答案
尚未检查,但看来您确实可以使用WASAPI。使用此http://msdn.microsoft.com/en-us/library/windows/desktop/dd316769%28v=vs.85%29.aspx文档作为起点。我希望这种方法的工作方式是,对于每个IMMDevice(从IMMDeviceEnumerator获得),您都可以激活IAudioSessionManager,使用它来获取ISimpleAudioVolume,然后可以对 session 使用Get / SetMasterVolume。为了使IAudioSessionManager获得ISimpleAudioVolume,您还需要 session GUID作为要控制的 session ,因为多个进程可能以共享模式写入同一设备。为此,您可以使用IAudioSessionEnumerator获取“当前” session ,但是请注意,随着新 session 添加到系统中,该 session 将不会更新。为此,您将需要IAudioSessionManager2::RegisterSessionNotification(请注意,有一些特定的线程要求:它必须在MTA公寓中运行)并实现自己的回调以将 session 添加到一些内部集合中(由您维护并最初从IAudioSessionEnumerator填充) )。还要注意, session 枚举器的通知内容将为您提供IAudioSessionControl,您必须将QueryInterface插入IAudioSessionControl2以获取 session guid,最终需要控制每个 session 的音量。最后,您还需要使用IAudioSessionControl::RegisterAudioSessionNotification来通知 session 主卷中的更改,以便您可以与Windows卷混合器sndvol保持同步。再次注意,这些全部来自内存,而我还没有实际测试或验证任何这些。关于WASAPI的尺寸过大,是的,我认为您是正确的。无论如何,这至少应该让您入门。祝好运。
关于visual-c++ - 使用串行设备控制应用程序卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840352/