7

我正在尝试编写一个小后台程序,当另一个程序播放声音时,它会停止播放 Winamp 的音乐。关于通过Java访问Winamp的部分已经解决了,现在我需要一种方法来检测哪个程序播放当前播放的声音(可能我想让一些程序在不停止我的音乐的情况下播放它们的声音)。虽然我在 Java(+ winapi)中这样做,但任何语言的一切都会有所帮助。

[编辑] 因为我刚刚对我的第一个问题投了反对票,所以这里有一些更详细的信息:我已经想出了如何使用 winapi(但我不知道)并捕获诸如音量级别之类的东西。仍然造成麻烦的是所提到的对所播放声音的来源以及哪个程序播放声音的检测。winapi 中有什么可以帮助我做到这一点吗?[/edit]

4

2 回答 2

4

正如 Deanna 所提到的,您可以像 Volume Mixer 应用程序(从系统托盘图标开始)一样枚举音频播放会话,并获取指示会话状态的每个会话仪表。

您可以在此答案中找到执行此操作的 C++ 应用程序:Peak Meters for individual programs on Windows 7。仪表是每个会话的,启用音频的应用程序中可能有一个或多个会话,但最终只要您枚举它们,您就可以确定那里是否有任何活动播放。

于 2013-02-09T21:27:25.940 回答
3

我相信 Vista+ 中的Windows Core Audio API允许您获取每个应用程序的 VU 级别(毕竟,混音器显示它)。这应该允许您在播放另一个应用程序时关闭一个应用程序,等等。

于 2013-02-08T10:51:22.003 回答