Col*_*eed 6 javascript html5 web-audio-api
我试图找出一种方法来阻止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
Run Code Online (Sandbox Code Playgroud)
stopFunc1: ->
scriptProcessor.onaudioprocess = null
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
有没有办法正确地做到这一点,还是我只是想错了?
任何帮助非常感谢.
或许我理解有误...
但是,如果您 null out onaudioprocess,它不会立即停止播放,除非您恰好在当前缓冲区的最末尾点击它。
假设您的bufferSize值为 2048,并且您碰巧onaudioprocess在当前缓冲区持续时间 46 毫秒 (2048 / 44100 * 1000) 的中途清零。在您将其清零ScriptProcessor 之前,您仍然会拥有已经处理过的另外 23 毫秒的音频。
最好的选择可能是将增益节点放入路径中并按需将其静音。
| 归档时间: |
|
| 查看次数: |
3507 次 |
| 最近记录: |