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

浏览器兼容性

另见