1

我一直在尝试了解如何在 chrome 上使用 Web MIDI API。我正在尝试关注 MDN 文档上的信息,并且能够获取有关我在 macOS 上安装的虚拟 MIDI 钢琴键盘的信息。

使用以下代码,我可以验证我是否能够获取有关 MIDI 设备的信息

navigator.requestMIDIAccess()
    .then(onMIDISuccess, onMIDIFailure);

function onMIDISuccess(midiAccess) {
    console.log(midiAccess);

    var inputs = midiAccess.inputs;
    var outputs = midiAccess.outputs;
}

function onMIDIFailure() {
    console.log('Could not access your MIDI devices.');
}

但是我没有得到提示,允许网站访问我的 MIDI 设备,正如我所期望的那样。

然后我尝试使用在 MDN 文档上找到的代码片段来获取onmidimessage.

// Printing all messages to console
navigator.requestMIDIAccess().then(midiAccess => {
  Array.from(midiAccess.inputs).forEach(input => {
    input[1].onmidimessage = console.log;
  })
});

https://developer.mozilla.org/en-US/docs/Web/API/MIDIMessageEvent

我没有收到任何错误,我可以console.log(input[1])看到结果。但是当我按下虚拟 MIDI 钢琴键盘上的键时,没有任何活动,我没有看到任何记录到控制台。

所以我很困惑,找不到任何关于如何让它工作的信息。有人对如何从 MIDI 设备获取事件有任何想法吗?

4

1 回答 1

0

如果您使用的是 vmpk 之类的软件乐器,则需要将 MIDI 输出配置为指向您机器上可识别的 MIDI 输出目标(如果您使用的是 Mac,则为IAC 驱动程序)。

在 Mac 上使用 vmpk,让 MIDI 消息事件显示在我的 Web MIDI 项目中就像在 vmpk 中执行以下操作一样简单:

  1. 编辑 > MIDI 连接
  2. 将 MIDI OUT 驱动程序更改为“CoreMIDI”
  3. 将输出 MIDI 连接更改为“IAC Driver Bus 1”

如果您还没有可供选择的连接(或者您想为您的目的设置专用总线),您可以使用操作系统附带的音频 MIDI 设置应用程序在 Mac 上配置新的 MIDI 总线。有关如何在此处执行此操作的说明。

我从这篇关于该主题的文章中了解到需要为软件乐器使用中间 MIDI 总线。

于 2020-11-25T23:50:30.193 回答