如何停止Web音频脚本处理器并清除缓冲区?

科尔·里德

我试图找出一种方法来停止Web音频脚本处理器节点的运行,而不断开它的连接。

我最初的想法是将“ onaudioprocess”设置为“ null”以将其停止,但是当我这样做时,我听到的声音循环非常短。我的猜测是音频缓冲区没有被清除或其他东西,并且它反复播放相同的缓冲区。

我尝试了一些其他技术,例如先将缓冲通道数组值全部设置为0,然后将“ onaudioprocess”设置为“ null”,这仍然会产生循环的音频片段,而不是静音。

我有一些类似下面的代码(咖啡)

context = new webkitAudioContext()
scriptProcessor = context.createScriptProcessor()

scriptProcessor.onaudioprocess = (e)->
  outBufferL = e.outputBuffer.getChannelData(0)
  outBufferR = e.outputBuffer.getChannelData(1)
  i = 0
  while i < bufferSize
    outBufferL[i] = randomNoiseFunc()
    outBufferR[i] = randomNoiseFunc()
    i++
  return null
return null

那我想停下来的时候

stopFunc1: ->
  scriptProcessor.onaudioprocess = null

我也尝试将缓冲通道数组设置为0,然后将回调设置为null

stopFunc2: ->
  scriptProcessor.onaudioprocess = (e)->
    outBufferL = e.outputBuffer.getChannelData(0)
    outBufferR = e.outputBuffer.getChannelData(1)
    i = 0
    while i < bufferSize
      outBufferL[i] = 0
      outBufferR[i] = 0
      i++
    scriptProcessor.onaudioprocess = null
    return null
  return null

两种技术都会产生一片真正快速循环的音频,而不是没有音频。

有没有办法正确地做到这一点,或者我只是在想错了?

任何帮助,不胜感激。

凯文·恩尼斯

也许我误会了...

但是,如果您onaudioprocess将其设为null ,除非您碰巧将其击中当前缓冲区的尽头,否则它不会立即停止播放。

假设您bufferSize是2048,而您碰巧会onaudioprocess在当前46ms的缓冲区持续时间(2048/44100 * 1000)的中途清零。你仍然会有一个已经被你的被处理音频的另一23MSScriptProcessor 之前你归零出来。

最好的选择可能是将增益节点放入路径中,然后按需将其静音。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何停止清除清除回滚缓冲区的“清除”

来自分类Dev

如何停止清除清除回滚缓冲区的“清除”

来自分类Dev

如何清除ReplaySubject上的缓冲区?

来自分类Dev

如何清除Neovim缓冲区

来自分类Dev

Elasticsearch提取管道脚本处理器无法投射

来自分类Dev

如何停止清除命令缓冲区之间的内容?

来自分类Dev

如何从音频标签创建音频缓冲区?

来自分类Dev

清除缓冲区/缓存的脚本仍然说权限被拒绝

来自分类Dev

清除键盘缓冲区

来自分类Dev

安排Web音频缓冲区中的回调

来自分类Dev

在金属中如何清除深度缓冲区或模板缓冲区?

来自分类Dev

如何获得3sn的音频缓冲区ios

来自分类Dev

如何从bash清除konsole中的回滚缓冲区?

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

如何使用Web Audio API将音频从合成器渲染到缓冲区(PCM值数组)

来自分类Dev

HTML5 Web音频-将音频缓冲区转换为WAV文件

来自分类Dev

如何停止RubyMine / IntelliJ关闭缓冲区?

来自分类Dev

从文件读取时如何停止堆栈缓冲区溢出?

来自分类Dev

如何停止hange复制到粘贴缓冲区?

来自分类Dev

在ObjectiveC中串联音频缓冲区

来自分类Dev

清除cout缓冲区(C ++)

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

强制在scanf中清除缓冲区

来自分类Dev

清除MIDI输出缓冲区

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

Python:清除标准输入缓冲区

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

Tmux,禁用缓冲区清除功能