切断せずに Web オーディオ スクリプト プロセッサ ノードの実行を停止する方法を見つけようとしています。
私の最初の考えは、「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
どちらの手法でも、オーディオがない代わりに、非常に高速にループするオーディオのスライスが生成されます。
これを正しく行う方法はありますか、それとも間違っていると考えていますか?
どんな助けでも大歓迎です。