AudioContext: sinkId プロパティ

Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。

sinkIdAudioContext インターフェイスの読み取り専用プロパティで、現在の音声出力機器のシンク ID を返します。

このプロパティは、どのようにシンク ID が設定されているかにより、以下の値のいずれかを返します。

空文字列

シンク ID が明示的に設定されていない場合、デフォルトのシステム音声出力機器が用いられ、sinkId は空文字列を返します。

文字列

シンク ID が(setSinkId() を用いるか、AudioContext() コンストラクターのオプション sinkId を用いて)文字列として設定されている場合、sinkId は同じ文字列を返します。

AudioSinkInfo オブジェクト

シンク ID が(setSinkId() を用いるか、AudioContext() コンストラクターのオプション sinkId を用いて)オプションオブジェクトとして設定されている場合、sinkId は最初のオプションオブジェクトで設定された値と同じ値を持つ AudioSinkInfo オブジェクトを返します。

SetSinkId test example では、AudioBufferSourceNode により 3 秒間のホワイトノイズを生成し、GainNode を通して少し音量を下げる音声グラフを作成します。さらに、ユーザーが音声出力機器を変えることができるドロップダウンメニューを提供します。

Play ボタンがクリックされると、音声グラフを組み立て、再生を開始し、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("音声は既定の機器で再生されています");
  } else if (
    typeof audioCtx.sinkId === "object" &&
    audioCtx.sinkId.type === "none"
  ) {
    console.log("音声はどの機器でも再生されていません");
  } else {
    console.log(`音声は機器 ${audioCtx.sinkId} で再生されています`);
  }
});

仕様書

Specification
Web Audio API
# dom-audiocontext-sinkid

ブラウザーの互換性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
sinkId
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support
Experimental. Expect behavior to change in the future.

関連情報