【问题标题】:WebAudio scheduling non-AudioParam eventsWebAudio 调度非 AudioParam 事件
【发布时间】:2019-09-07 06:54:26
【问题描述】:

有很多 AudioParams 的值可以用setValueAtTimelinearRampToValueAtTime 设置,通常限制为gainfrequency 值。但是,这似乎不适用于更改振荡器的波形(“类型”)或更改音频缓冲区节点的样本数据。

是否有另一种方法可以根据 WebAudio 计时器安排对振荡器 type(锯齿波、正弦波等)和缓冲区样本数据的事件更改?

那么OscillatorNodeAudioBufferSourceNodestart/stop 方法呢?这些似乎只能创建一次:

未捕获的 DOMException:无法在“AudioBufferSourceNode”上执行“start”:不能多次调用 start。

因此,例如,尝试多次触发鼓声播放并不简单。

就上下文而言,我正在尝试构建一个合成音乐播放器,它使用 OscillatorNode 和 BufferNode 作为音源来播放和循环一系列音符。

【问题讨论】:

  • setTimeout 也许?但是你为什么不直接创建新节点呢?只需设置 node.stop(time)node.onended = startANewNode
  • setTimeout/setInterval 可能会控制node.start/stop,但计时器不是很可靠。当标签处于非活动状态时,大量口味或放缓。这一切都在主线程上运行,因此对于音频处理来说非常可怕。

标签: javascript web-audio-api synthesizer


【解决方案1】:

对于振荡器,您无法安排更改类型。做到这一点的唯一方法是创建一个正确类型的新振荡器并在所需时间启动它。当然,你必须停止旧的振荡器。

AudioBufferSource 的答案几乎相同。使用新的示例数据创建一个新数据,并在适当的时候start()

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多