BaseAudioContext: state 屬性
BaseAudioContext 介面的只讀屬性 state 返回 AudioContext 的當前狀態。
值
一個字串。可能的值是
closed-
音訊上下文已關閉(透過
AudioContext.close()方法)。 interrupted-
音訊上下文已被 Web 應用控制之外的事件中斷。
running-
音訊上下文正常執行。
suspended-
音訊上下文已暫停(透過
AudioContext.suspend()方法)。
描述
音訊上下文的 state 屬性用於暴露其當前的執行狀態。這通常透過在 statechange 事件處理程式中查詢 state 來實現,以便可以適當地響應狀態的變化。
running 和 closed 值不言自明——它們表示音訊上下文正在正常執行,或者已關閉(透過 AudioContext.close() 方法)。
interrupted 和 suspended 狀態都表示一個可以稍後恢復的“暫停”狀態,但它們的含義有所不同。
suspended狀態表示音訊上下文響應 Web 應用內的使用者操作而暫停,透過在click(或類似)事件處理程式中執行AudioContext.suspend()方法。在這種情況下,上下文將透過執行AudioContext.resume()方法來恢復。interrupted狀態表示音訊上下文響應 Web 應用控制之外的中斷而暫停。在這種情況下,瀏覽器決定何時暫停和恢復應用程式。然後,Web 應用可以適當地處理interrupted狀態,例如透過暫停音訊流以避免在不使用應用程式時浪費資源。
可能觸發 interrupted 狀態的中斷包括
- 同一系統上的會議或電話應用程式需要獨佔訪問裝置的音訊硬體。
- 使用者關閉了他們的筆記型電腦。
- 用於啟動或響應音訊中斷的 API 功能。
注意: interrupted 狀態的觸發方式可能因瀏覽器而異。
另請注意 interrupted 和 suspended 狀態之間可能發生的轉換
- 如果在中斷期間(
state為interrupted)對音訊上下文呼叫suspend(),狀態將立即轉換為suspended。 - 如果在中斷期間對
suspended音訊上下文呼叫resume(),狀態將立即轉換為interrupted。 - 如果音訊上下文處於
suspended狀態時發生中斷,上下文不會轉換為interrupted。除非對上下文呼叫resume()(如前一點所述),否則不會發生此轉換。做出此選擇是為了避免向網頁公開過多的裝置資訊——例如,記錄每次筆記型電腦關閉都可能是一個隱私問題。
示例
處理狀態更改
以下程式碼段摘自我們的 AudioContext 狀態演示(線上檢視)。onstatechange 處理程式用於在每次狀態更改時將當前狀態記錄到控制檯。
js
audioCtx.onstatechange = () => {
console.log(audioCtx.state);
};
恢復 iOS Safari 中的中斷播放狀態
在 iOS Safari 中,當用戶離開頁面(例如,切換標籤頁、最小化瀏覽器或關閉螢幕)時,音訊上下文的狀態會變為“interrupted”,並且需要恢復。例如:
js
function play() {
if (audioCtx.state === "interrupted") {
audioCtx.resume().then(() => play());
return;
}
// rest of the play() function
}
規範
| 規範 |
|---|
| Web Audio API # dom-baseaudiocontext-state |
瀏覽器相容性
載入中…