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

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅