【问题标题】:"Per Application" Audio Mixer in Windows XPWindows XP 中的“按应用程序”混音器
【发布时间】:2009-09-14 17:37:42
【问题描述】:

我需要在 Windows XP 中对来自其他进程的声音进行静音和取消静音。我正在寻找最佳策略。是否可以编写一个内核模式混合器来过滤输出设备的输入?我的另一种方法是为各种 API 设置 Hooks 以拦截它们的 Win32 调用。我更喜欢侵入性较小的方法。

一些注意事项: 涵盖使用 WinMM 和 DirectSound 系统组件的应用程序可能就足够了(即我不需要担心其他音频接口)。

这最终需要在 C# 应用程序中使用。我在互操作方面相当熟练,但没有 Win32 的内部知识来实现​​这一点。

可以列出所有需要静音的应用程序并分别处理每个应用程序,尽管该列表预计会增加。

附:万一有人担心,这些操作将在用户同意的情况下执行(没有黑幕)。

【问题讨论】:

  • 我不认为你会找到任何简单的方法来做到这一点,而不编写一些非常低级的代码。 Windows API 根本不提供那种级别的灵活性。您应该仔细考虑此功能对您的重要性。
  • 很遗憾,这不是可选功能。但我也绝对不怕写低级代码。

标签: c# winapi audio interop


【解决方案1】:

内核模式驱动程序的问题在于它们通常不支持进程。这是干净的分层架构的一部分。处理进程是操作系统本身的责任。音频驱动程序应处理音频。现在,混音器肯定应该处理多个音频流,并且可能赋予它们不相等的权重,但它不应该特别关心来自哪里。此外,内置混音器并非设计为可更换的,因此您必须在混音前截取音频流。

因此,在 XP 上,使用 Microsoft Detours 拦截 API 级别的调用更有意义。您在那里有呼叫过程信息。 Detours 基本上将程序集注入到操作系统的用户模式部分,所以我建议使用 C++ 而不是 C# 和 Detours。

据我了解,在 Vista 上,audiostack 被重写,以便可以将音频流与应用程序相关联,但这是一个系统范围的功能。

【讨论】:

    猜你喜欢
    • 2018-07-01
    • 2013-09-02
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多