现在需要获得用户权限才能访问 MIDI 设备

François Beaufort
François Beaufort

乐器数字接口 (MIDI) 是电子乐器、硬件和计算机进行通信的标准方式。借助 Web MIDI API,网站可以通过连接到用户的 MIDI 键盘或控制器来控制虚拟合成器、电子鼓或其他乐器。

Browser Support

  • Chrome: 43.
  • Edge: 79.
  • Firefox: 108.
  • Safari: not supported.

Source

由于使用 Web MIDI API 自由访问已连接的 MIDI 设备存在安全问题,W3C 音频工作组要求在 Web MIDI 规范中针对所有 MIDI API 使用情况提出明确的权限要求。此变更之前仅适用于 Chrome 中的高级 MIDI 用法(SysEx 消息),现在也适用于标准 MIDI 互动。

这意味着,整个 Web MIDI API 现在都需要用户先通过权限提示才能使用。从 Chrome 124 开始,这项更改将逐步生效。

Chrome 中 Web MIDI 权限提示的屏幕截图。
Chrome 中的 Web MIDI 权限提示。

以下代码展示了在用户尚未授予访问权限时,如何处理由调用 navigator.requestMIDIAccess() 触发的权限提示。

try {
  // Prompt user to access MIDI devices.
  const access = await navigator.requestMIDIAccess();
  // Get lists of available MIDI controllers...

} catch (error) {
  if (error.name === "SecurityError") {
    // The website is not allowed to control and reprogram MIDI devices.
  }
}

只有在您的网站绝对需要此功能时,应请求使用 navigator.requestMIDIAccess({ sysEx: true }) 支持 SysEx 消息。Chrome 权限提示字符串未来可能会发生变化。

测试

这项变更将在 Chrome 124 中逐步推出。您可能需要使用 --enable-features=BlockMidiByDefault 命令行开关运行 Chrome,才能在设备本地启用该功能。

https://permission.site 网站上测试此更改,方法是点击“MIDI”和“MIDI + SysEx”按钮。

浏览器支持

在 Chrome 和 Firefox 浏览器中,访问 MIDI 设备都需要用户授予权限。

反馈

Chrome 团队和 Web 标准社区希望了解您对这项变更的体验。您可以通过对现有问题发表评论或提交新的 GitHub 问题来提供反馈。

致谢

感谢 Michael Wilson 审核这篇帖子。