1

我一直在尝试使用 Firefox 的音频 API 来检测音频中的静音。(重点是启用半自动转录。)

令人惊讶的是,这个简单的代码或多或少足以检测静音和暂停:

var audio = document.getElementsByTagName("audio")[0];

audio.addEventListener("MozAudioAvailable", pauseOnSilence, false);

function pauseOnSilence(event) { 
  var val = event.frameBuffer[0];
  if (Math.abs(val) < .0001){
    audio.pause();
  }
}

它不完美,但作为概念证明,我深信不疑。

我现在的问题是,有没有办法在 Webkit 的音频 API 中做同样的事情?从我所见,它更倾向于合成而不是声音处理(但也许我错了?)。

(我希望 Webkit 团队能够实现 Mozilla 创建的相同界面,然后继续他们更花哨的东西......)

4

1 回答 1

2

您应该能够使用 AnalyzerNode 执行此类操作,或者可能使用 JavaScriptAudioNode 寻找阈值。

例如:

meter.onaudioprocess = function(e) {
  var buffer = e.inputBuffer.getChannelData(0); // Left buffer only. 
  // TODO: Do the same for right.
  var isClipping = false;
  // Iterate through buffer to check if any of the |values| exceeds 1.
  for (var i = 0; i < buffer.length; i++) {
    var absValue = Math.abs(buffer[i]);
    if (absValue >= 1) {
      isClipping = true;
      break;
    }
  }
  this.isClipping = isClipping;
  if (isClipping) {
    this.lastClipTime = new Date();
  }

};

您可以简单地检查足够低的级别,而不是剪辑。

大致改编自本教程。具体样品在这里

于 2012-06-15T20:09:34.217 回答