visual-c++ - 使用串行设备控制应用程序卷

标签 visual-c++ audio windows-7 volume wasapi

我建立了一个外部设备来控制Windows7-Applications的级别。串行通信有效,但是我在使用内置的Windows Audio Session API(WASAPI)时遇到了麻烦。

特别是,我有两个问题:

  • 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/

    相关文章:

    C# 通用平台音频合并或输入视频

    audio - 使用软件合成器制作实时音频应用程序

    python - 将音频录制从浏览器流式传输到服务器?

    windows-7 - Windows 7 家庭高级版足以用于软件开发吗?

    haskell - 将 Leksah 调试器与使用 readLn 和类似程序的程序一起使用

    c++ - 枚举类的关系运算符重载

    visual-studio - 在 Visual Studio 调试器中查看非平凡表达式时出现问题

    c++ - Boost 最新版本兼容 VC++6 是什么?

    WPF 图标规范以支持 Windows 7 并向后兼容

    c - 宏观参数