AudioContext:sinkId 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

AudioContext 介面的只讀屬性 sinkId 返回當前輸出音訊裝置的接收器 ID。

此屬性根據接收器 ID 的設定方式返回以下值之一:

空字串

如果未顯式設定接收器 ID,將使用預設的系統音訊輸出裝置,並且 sinkId 將返回空字串。

字串

如果接收器 ID 設定為字串值(使用 setSinkId()sinkId AudioContext() 建構函式選項),則 sinkId 將返回相同的字串值。

一個 AudioSinkInfo 物件

如果接收器 ID 設定為選項物件(使用 setSinkId()sinkId AudioContext() 建構函式選項),則 sinkId 將返回一個 AudioSinkInfo 物件,反映初始選項物件中設定的相同值。

示例

在我們 SetSinkId 測試示例(請檢視 原始碼)中,我們建立了一個音訊圖,透過 AudioBufferSourceNode 生成三秒的白噪聲,並將其透過 GainNode 來稍微降低音量。我們還為使用者提供了一個下拉選單,允許他們更改音訊輸出裝置。

當點選“播放”按鈕時,我們組裝音訊圖並開始播放,同時根據 sinkId 的值將當前裝置的資訊記錄到控制檯。

  • 空字串表示仍在使用預設裝置。
  • 如果值為物件,則音訊不會在任何裝置上播放,因為我們設定了一個包含 type: 'none' 的選項物件。
  • 否則,該值將是接收器 ID 字串,然後我們將其記錄下來。
js
playBtn.addEventListener("click", () => {
  const source = audioCtx.createBufferSource();
  source.buffer = myArrayBuffer;
  source.connect(gain);
  gain.connect(audioCtx.destination);
  source.start();

  if (audioCtx.sinkId === "") {
    console.log("Audio playing on default device");
  } else if (
    typeof audioCtx.sinkId === "object" &&
    audioCtx.sinkId.type === "none"
  ) {
    console.log("Audio not playing on any device");
  } else {
    console.log(`Audio playing on device ${audioCtx.sinkId}`);
  }
});

規範

規範
Web Audio API
# dom-audiocontext-sinkid

瀏覽器相容性

另見