扫描特定进程的声音

Scan for a sound on a specific process

我想知道是否有一种方法可以在 Java 中扫描预定义过程中的特定卷。如果这个音量超过某个 dB 值,某个 KeyEventMouseEvent 应该只在这个进程上执行,所以这也可以 运行 在后台。 到目前为止,我还没有在 Java 中看到实现此功能的好方法,所以我也想知道这是否可行以及如何实现。 提前致谢!

基本计划:

  • 设置在 SourceDataLine 上播放的声音(不适用于 Clip
  • 播放时,将字节数据转换为PCM(具体算法取决于音频格式)
  • 对 PCM 数据应用 RMS 滤波器算法(查看 root mean square 了解更多信息)
  • 如果 RMS 值超过目标值,则发送通知(使用“松耦合”设计模式,阻塞音频播放的风险最小)。

播放时读取SourceDataLine暴露的数据,查看教程“Using Files and Format Converters”中的第一个例子,代码读取如下:

  // Here, do something useful with the audio data that's 
  // now in the audioBytes array...

就确定什么 RMS 值对应于所需的触发 DB 或响度级别而言,事情会变得相当复杂。音频数据基本上是相对的而不是绝对的,并且 RMS 算法给出的值可以具有不同的“感知”响度,具体取决于声音的频率内容。此 post、How to get the volume level from PCM data 讨论了在此领域中遇到的一些并发症。不过可能是想多了,看你的目的了。