【发布时间】:2019-09-07 06:54:26
【问题描述】:
有很多 AudioParams 的值可以用setValueAtTime 或linearRampToValueAtTime 设置,通常限制为gain 或frequency 值。但是,这似乎不适用于更改振荡器的波形(“类型”)或更改音频缓冲区节点的样本数据。
是否有另一种方法可以根据 WebAudio 计时器安排对振荡器 type(锯齿波、正弦波等)和缓冲区样本数据的事件更改?
那么OscillatorNode 和AudioBufferSourceNode 的start/stop 方法呢?这些似乎只能创建一次:
未捕获的 DOMException:无法在“AudioBufferSourceNode”上执行“start”:不能多次调用 start。
因此,例如,尝试多次触发鼓声播放并不简单。
就上下文而言,我正在尝试构建一个合成音乐播放器,它使用 OscillatorNode 和 BufferNode 作为音源来播放和循环一系列音符。
【问题讨论】:
-
setTimeout也许?但是你为什么不直接创建新节点呢?只需设置node.stop(time)和node.onended = startANewNode -
setTimeout/setInterval可能会控制node.start/stop,但计时器不是很可靠。当标签处于非活动状态时,大量口味或放缓。这一切都在主线程上运行,因此对于音频处理来说非常可怕。
标签: javascript web-audio-api synthesizer