我正试图想办法阻止网络音频脚本处理器节点运行,而不会断开它。
我最初的想法是将“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
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
有没有办法正确地做到这一点,还是我只是想错了?
非常感谢任何帮助。
答案 0 :(得分:4)
也许我误解了......
但是如果你将onaudioprocess
归零,它将不会立即停止播放,除非你碰巧在当前缓冲区的最后点击它。
假设您的bufferSize
是2048,并且恰好在当前缓冲持续时间为46ms(2048/44100 * 1000)的中途将onaudioprocess
置零。你仍然需要另外23毫秒的音频已经由你的ScriptProcessor
处理过了你已经将其取消了。
最好的办法是将增益节点放入路径并按需将其静音。