使用 Cocoa 检测正在运行的应用程序何时播放音频

Posted

技术标签:

【中文标题】使用 Cocoa 检测正在运行的应用程序何时播放音频【英文标题】:Using Cocoa to detect when a running application plays audio 【发布时间】:2009-04-14 19:13:31 【问题描述】:

我正在考虑编写一个作为后台进程运行并检测应用程序(例如 Safari)何时播放音频的应用程序。我可以使用NSWorkspace 来获取当前正在运行的应用程序的进程ID,但是在检测这些进程在做什么时我不知所措。我假设有一种方法可以监听进程并检测对象正在发送的公共消息。对于我对这个问题的无知,我深表歉意。

有没有人尝试过这样的事情或知道任何可以提供帮助的资源?

【问题讨论】:

【参考方案1】:

SoundFlower 是一个开源项目,它允许 Mac OS X 应用程序相互传递音频。几乎可以肯定它的作用与您所描述的相似。

【讨论】:

酷,我正在使用 SoundFlower,但我完全忘记了它是开源的。感谢您提供此信息。【参考方案2】:

我不认为你的“答案”是一个答案...

并且有一个答案(不是“42”)

您最好的选择是编写一个直通音频输出设备。实际上,很像soundflower。因此,您的音频输出设备将加载实际的(物理)音频输出设备并将音频数据直接传递给它(当然,在首先查看音频流之后!)。那么您只需要说服您的用户将您的音频设备配置为默认音频输出设备,以便大多数播放声音的应用程序会自动使用它。瞧……

您的音频处理函数可能会在将缓冲区传递到实际输出设备之前对缓冲区执行快速 RMS。当音频功率超过某个阈值(苹果音频硬件可能是 -54dB 之类的)时,您就知道某个应用正在发出声音。

|K

【讨论】:

只是顺便说我喜欢签名|K 【参考方案3】:

我在另一个线程上被告知,虽然这是可能的,但这是一种非常先进的技术,不推荐使用。这将涉及使用Application Enhancer (APE),并且被认为是一件不“好”的事情。看起来这个应用创意注定要成为天空中的大回收站:)

【讨论】:

以上是关于使用 Cocoa 检测正在运行的应用程序何时播放音频的主要内容,如果未能解决你的问题,请参考以下文章

HTML5视频,如何检测没有音轨?

HTML5视频,如何检测没有音轨?

如何检测 AVPlayer 视频何时结束播放?

检测 AVAudioSession 何时被“躲避”

检测拨出电话何时开始播放回铃音

检测 Cocoa 动画是不是正在进行(使用 BOOL)以防止同时出现多个动画