当我的应用程序正在播放声音时,将其他应用程序的声音静音

Posted

技术标签:

【中文标题】当我的应用程序正在播放声音时,将其他应用程序的声音静音【英文标题】:Mute other applications' sound when my application is playing a sound 【发布时间】:2011-05-15 10:02:12 【问题描述】:

我想在我的应用程序播放声音时静音其他应用程序的声音。我知道这在 Windows 7 中是可能的,因为它允许在每个应用程序的基础上进行声音控制。

具体场景是我的应用需要独占播放声音;如果其他应用程序(例如 Winamp、Media Player Classic 等)正在播放声音,则应在我的应用程序播放声音期间将它们静音。

我想知道如何使用 Delphi 来完成?哪个库/系统调用?

【问题讨论】:

What if two programs did this? 您的假设不一定有效。仅仅因为操作系统授予用户独立控制程序音量级别的能力并不意味着操作系统授予程序控制其他程序音量级别的能力。它可能类似于 shell 通知图标:用户可以控制哪些图标保持可见,但程序无法说明哪些图标是可见的。 (他们甚至无法控制自己的自己的可见性了。)我认为这不是你要解决的问题。如果用户认为其他程序干扰了您程序的音频,请让用户处理。 我真诚地希望 Windows 2020 将允许我选择应用程序可以做什么和不能做什么。我很欣赏这有一些用例,但是除非我明确允许应用程序执行此类操作,否则应禁止此类行为。 【参考方案1】:

我怀疑这很容易实现。

如果其他应用采用相同的观点怎么办?假设另一个应用程序决定它希望播放它的声音并将所有其他应用程序静音。哪个应用会赢?

【讨论】:

@Raym... @David:同意。但是,OP 可能会在 Windows 7 中使用ducking experience。 是对的,我认为您没有办法覆盖和控制声卡以仅用于您自己的应用程序。我从来没有遇到过这样做的应用程序,实际上像 DirectX 游戏这样的 3D 应用程序甚至不能这样做。 @Andreas:有趣!谢谢。 @Andreas:您为什么不将您的 cmets 作为单独的答案发布?这是一个非常棒的建议:)【参考方案2】:

在 Vista 及更高版本上,您可以通过使用 CoreAudio/WASAPI 和 exclusive 模式流来做到这一点。

【讨论】:

【参考方案3】:

Mumble是这样做的,可以看源码。

【讨论】:

谢谢,我会看看然后回来。 我尝试浏览 Mumble 的 Git 存储库,试图找到可能与声音系统操作有关但找不到的源文件。如果你知道它是哪个文件,你可以在这里发布一个 sn-p 吗?谢谢。 不,抱歉。我只知道 Mumble 会这样做,但我从不查看他们的源代码。

以上是关于当我的应用程序正在播放声音时,将其他应用程序的声音静音的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioPlayer 播放声音时出现问题?

在android soundpool中播放新声音时如何停止所有其他以前的声音?

正在播放其他应用程序中的声音时录音停止

远程通知音量级别与应用程序中播放的声音不同

如何使用 SoundPool 播放随机声音?

如何使用winsound同时播放多个声音?