我正在尝试找出一种方法来阻止网络音频脚本处理器节点运行,而无需断开连接。
我最初的想法是将“onaudioprocess”设置为“null”来停止它,但是当我这样做时,我听到了一个非常短的音频播放循环。我的猜测是音频缓冲区没有被清除或其他什么,并且它重复播放相同的缓冲区。
我尝试了一些其他技术,例如首先将缓冲区通道数组值全部设置为 0,然后将“onaudioprocess”设置为“null”,这仍然会产生循环的音频片段而不是静音。
我有一些如下代码(coffeescript)
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
,它不会立即停止播放,除非您恰好在当前缓冲区的末尾处点击它。
比方说你的bufferSize
是 2048,而你碰巧清零了onaudioprocess
中途当前缓冲持续时间为 46ms (2048 / 44100 * 1000)。您仍然会有另外 23 毫秒的音频已经被您的处理过ScriptProcessor
before你把它取消了。
最好的办法可能是将增益节点放入路径中并按需将其静音。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)