防止在发送 MIDI 消息时触发事件

Prevent event from being fired when sending a midi message

当我在输出端口上发送 MIDI 消息时,它会导致我的输入端口触发一个事件。这是预期的行为还是因为我使用 IAC 驱动程序并且输出连接回 IAC 驱动程序输入?

let output = midiAccess.outputs.get(portID)
output.send(action.data)

navigator.requestMIDIAccess({sysex: true})
  .then((midiAccess) => {
    midiAccess.inputs.forEach((entry) => {
      entry.onmidimessage = (event) => {
        dispatch(midiMessage(event))
      }
    })
  })

我在不同的地方回答,但我也在这里解释一下。

IAC 的意思是"Inter-application communication"。 该驱动程序旨在在应用程序之间进行通信,因为一个可以通过输出端口发送 MIDI 消息,另一个可以通过输入端口接收它们。这是 IAC 特定的功能和行为。您不能指望其他虚拟或物理设备会出现这种情况。

在 Linux,ALSA 提供了类似的直通设备。此外,您也许可以为 Windows 找到类似的驱动程序。或者您甚至可以通过 DIN 电缆将传统的 MIDI output/input 端口相互物理连接。