code: function initScriptMode () {
  		//buffer source node
  		let bufferNode = context.createBufferSource()
  		bufferNode.loop = true;
  		bufferNode.buffer = util.create(samplesPerFrame, channels, {context: context})
  
  		node = context.createScriptProcessor(samplesPerFrame)
  		node.addEventListener('audioprocess', function (e) {
  			//release causes synchronous pulling the pipeline
  			//so that we get a new data chunk
  			let cb = release;
  			release = null;
  			cb && cb()
  
  			if (isStopped) return;
  
  			util.copy(shift(e.inputBuffer.length), e.outputBuffer)
  		})
  
  		//start should be done after the connection, or there is a chance it won’t
  		bufferNode.connect(node)
  		bufferNode.start()
  
  		return node;
  	}
docs: Init scriptProcessor-based rendering.
  Each audioprocess event triggers tick, which releases pipe