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

瀏覽器相容性

另見