AudioBufferSourceNode: start() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

AudioBufferSourceNode 接口的 start() 方法用于调度缓冲区中包含的音频数据的播放,或立即开始播放。

语法

js
start(when)
start(when, offset)
start(when, offset, duration)

参数

when 可选

声音应该开始播放的时间(以秒为单位),使用与 AudioContext 相同的时坐标系。如果 when 小于 (AudioContext.currentTime),或者为 0,则声音会立即开始播放。默认值为 0。

offset 可选

一个偏移量,以与 AudioContext 相同的时坐标系下的秒数指定,表示在音频缓冲区内播放应该开始的时间。例如,要在一个 10 秒的音频剪辑中途开始播放,offset 应该为 5。默认值 0 会从音频缓冲区的开头开始播放,超过音频末尾(基于音频缓冲区的 duration 和/或 loopEnd 属性)的偏移量将被静默地限制在允许的最大值。到声音的偏移量的计算是使用声音缓冲区的自然采样率进行的,而不是当前播放速率,因此即使声音以正常速度的两倍播放,一个 10 秒的音频缓冲区的中间点仍然是 5。

duration 可选

要播放的声音的时长,以秒为单位指定。如果未指定此参数,则声音会一直播放直到自然结束,或者使用 stop() 方法停止。使用此参数在功能上等同于调用 start(when, offset) 然后调用 stop(when+duration)

返回值

无(undefined)。

异常

TypeError

如果为三个时间参数中的一个或多个指定了负值,则抛出此异常。请不要试图干扰时间物理定律。

InvalidStateError DOMException

如果 start() 已经被调用,则抛出此异常。在 AudioBufferSourceNode 的生命周期中,您只能调用此函数一次。

示例

最简单的例子就是让音频缓冲区从头开始播放——在这种情况下,您不需要指定任何参数。

js
source.start();

以下更复杂的示例将从现在起 1 秒后开始播放音频缓冲区中从第 3 秒开始的 10 秒声音。

js
source.start(audioCtx.currentTime + 1, 3, 10);

注意: 有关 start() 用法的更完整示例,请查看我们的 AudioContext.decodeAudioData() 示例。您也可以 尝试实时示例,并查看 示例源代码

规范

规范
Web Audio API
# dom-audiobuffersourcenode-start

浏览器兼容性

另见