我试图找出一种方法来停止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
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] 删除。
我来说两句