Javascript 如何停止Web音频脚本处理器并清除缓冲区?
我正在试图找到一种方法来停止web音频脚本处理器节点的运行,而不必断开它的连接 我最初的想法是将“onaudioprocess”设置为“null”以停止它,但当我这样做时,我听到一个非常短的音频播放循环。我的猜测是音频缓冲区没有被清除或是其他什么,而是重复播放同一个缓冲区 我尝试了一些额外的技术,比如首先将缓冲通道数组值全部设置为0,然后将“onaudioprocess”设置为“null”,这仍然会产生一个循环的音频片段,而不是静音 我有一些代码如下(coffeescript) 我还尝试将缓冲区通道数组设置为0,然后将回调设置为nullJavascript 如何停止Web音频脚本处理器并清除缓冲区?,javascript,html,web-audio-api,Javascript,Html,Web Audio Api,我正在试图找到一种方法来停止web音频脚本处理器节点的运行,而不必断开它的连接 我最初的想法是将“onaudioprocess”设置为“null”以停止它,但当我这样做时,我听到一个非常短的音频播放循环。我的猜测是音频缓冲区没有被清除或是其他什么,而是重复播放同一个缓冲区 我尝试了一些额外的技术,比如首先将缓冲通道数组值全部设置为0,然后将“onaudioprocess”设置为“null”,这仍然会产生一个循环的音频片段,而不是静音 我有一些代码如下(coffeescript) 我还尝试将缓冲区
stopFunc2:->
scriptProcessor.onaudioprocess=(e)->
exputfferl=e.outputBuffer.getChannelData(0)
EXBUFFERR=e.outputBuffer.getChannelData(1)
i=0
而我喜欢你的尺寸
exputfferl[i]=0
脉冲频率[i]=0
我++
scriptProcessor.onaudioprocess=null
返回空
返回空
这两种技术都会产生一段循环速度非常快的音频,而不是没有音频。
有没有办法做到这一点,或者我只是想得不对
非常感谢您的帮助。也许我误解了 但是,如果您将audioprocess中的
设为空,则它不会立即停止播放,除非您恰好在当前缓冲区的最末端点击它
假设您的bufferSize
为2048,在当前46毫秒的缓冲区持续时间(2048/44100*1000)的一半时间内,您恰好将onaudioprocess
调零。您仍将拥有另外23毫秒的音频,这些音频已经由ScriptProcessor
处理,然后再将其置零
最好的办法可能是在路径中放置一个增益节点,然后按需将其静音。Yah,这似乎是我遇到的问题。我希望在将回调设置为null
之前有一种简单的方法来清除缓冲区,但我没有找到。您可以在audioBufferSourceNode
上调用stop()
。scriptProcessor
并不是真正用来作为启动和停止播放的机制。如果出于某种原因,您必须这样使用它,我想您可以减少缓冲区大小
,以减少在将onaudioprocess
调零后的悬垂量。
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
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