根据音频音调触发功能

问题描述

我们正在开发一个Web应用程序,该程序将在左声道上以2.5秒的35hz音调监视音频流。提示音将用于触发功能,特别是使音频流静音30秒钟。我一直在阅读WebAudio API,但没有发现类似的情况。任何建议将不胜感激。

解决方法

有很多不同的方法可以做到这一点。您如何决定执行此操作取决于几件事,包括何时希望能够触发静音。是否要在检测到35 Hz音调后立即产生静音? 35 Hz音调何时结束?声音是左声道上唯一的音频吗? (这使它容易得多。)

您可以使用AnalyserNode,但是检测到35 Hz的音调可能很困难,因为您可能需要相当大的FFT大小,从而导致延迟。

另一种可能性是使用带通BiquadFilterNode来滤除35 Hz音调以外的所有内容。 (可能需要多个这样的过滤器。这成为过滤器设计问题)。然后,如果滤波器有任何输出,并且输出足够大,您就会知道有35 Hz的声音。您可以使用ScriptProcessorNodeAudioWorkletNodeAnalyserNode(检查时域数据)查看过滤器的输出。

另一种方法是使用matched filter。创建一个35 Hz的音频并将其保存在AudioBuffer中。使用ConvolverNode(与normalization disabled一起使用)。将左声道连接到卷积器并查看输出(使用ScriptProcessor / AudioWorklet / Analyser)。当输出足够大时,您就会知道35 Hz的音调。

最后,您可以通过在ScriptProcessorNode或AudioWorkletNode中编写分析代码来进行所有查找音调的分析。

我遗漏了很多细节,但这可能足以使您入门。如果您需要更多详细信息,请跟进。