【问题标题】:Grab Audio Sessions as they appear in the windows audio mixer (C# or C++)在 Windows 音频混音器(C# 或 C++)中显示音频会话
【发布时间】:2015-04-29 19:21:20
【问题描述】:

我正在尝试弄清楚如何在音频混音器中出现的单个音频流中获取它们,以将它们重新路由到聚合音频设备。为了我正在制作的节目的目的,我特别希望将它们保持为谨慎的流(如果它们被混合到 2 通道混音,那将违背我想要实现的目的。)

E.X.:(因为我刚刚创建了这个帐户,我显然无法发布图片,所以这里是图片的链接)

windows audio mixer

在这方面,我希望将“系统声音”和“流客户端引导程序”作为谨慎的音频流路由到其他地方,同时也保持其原始目的地(本质上是将进入原始音频设备的音频复制到另一个同时)。

我希望在 C# 或 C++ 中执行此操作。我仔细阅读了微软发布的音频 API,虽然有些事情看起来与我正在尝试做的事情很接近,但没有什么能一针见血。我很感激任何帮助。谢谢。

【问题讨论】:

  • 您是否查看过 NAudio (github.com/naudio/NAudio) 是否可以实现您想要的功能?它可以枚举输入流并选择用于路由其他地方(如通过网络)的输入流。查看他们提供的示例代码。

标签: c# c++ windows audio mixer


【解决方案1】:

可以使用IAudioSessionManager2::GetSessionEnumerator 和朋友枚举会话(示例C++ 代码是herethere)。标准的 Windows 音量混合器应用程序也在使用这个 API。

但是,API 无法访问数据流,您也不会拥有(无论它们是否被缩混,您肯定没有数据)。您也不能将流重新路由到另一台设备。不允许应用程序干扰那么深。您可以做的最好的事情是创建自己的设备,以交互方式将其选择为默认输出设备,然后接受来自通过该设备播放音频的应用程序的数据。

【讨论】:

  • 感谢两位的回答。看起来如果无法访问单个流,那么我想要构建的东西也将不可能。它完全依赖于能够从计算机上运行的应用程序复制谨慎的音频源,并将它们发送到可以混合的虚拟输出设备(类似于 Windows 混音器的形式)。我的目的是为直播游戏构建一个解决方案,在这种游戏中,与其他玩家进行语音交流至关重要,但希望防止其他玩家的声音被流式传输。
  • 这也适用于从您的计算机在同一输出设备上输出的任何其他内容(例如浏览器中的 netflix 或其他任何内容。)通过虚拟音频电缆在技术上是半可能的,但它充其量是错误的,并且不允许基于应用程序进行分离,而是基于您为应用程序本身选择的音频输出设备。并非所有应用都能够选择默认设备以外的任何内容。
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
相关资源
最近更新 更多