gpt4 book ai didi

javascript - 如何解析 Web MIDI API 输入消息 (onmidimessage)

转载 作者:行者123 更新时间:2023-11-29 16:46:21 25 4
gpt4 key购买 nike

假设我已经在使用 Web MIDI API 来监听消息的 MIDI 输入,现在我正在尝试理解和使用我接收到的数据。

如何从 MIDIMessageEvent 中解析一些基本信息?

  • 命令
  • channel
  • 注意
  • 速度

如何解释一些基本 MIDI 事件的解析信息?

  • 笔记
  • 平板电脑
  • 在弯音上
  • onModWheel

最佳答案

解析和解释 Web MIDI API 输入消息数据

用 ES6 编写的示例。

MIDIMessageEvent 中的data 可以像这样用解析函数 拆分:

/**
* Parse basic information out of a MIDI message.
*/
function parseMidiMessage(message) {
return {
command: message.data[0] >> 4,
channel: message.data[0] & 0xf,
note: message.data[1],
velocity: message.data[2] / 127
}
}

给定一些事件函数来处理基本的 MIDI 事件:

function onNote(note, velocity) {}
function onPad(pad, velocity) {}
function onPitchBend(value) {}
function onModWheel(value) {}

我们可能会使用上面的解析函数来通过 MIDI 消息进行解释并调用上述事件函数:

/**
* Handle a MIDI message from a MIDI input.
*/
function handleMidiMessage(message) {

// Parse the MIDIMessageEvent.
const {command, channel, note, velocity} = parseMidiMessage(message)

// Stop command.
// Negative velocity is an upward release rather than a downward press.
if (command === 8) {
if (channel === 0) onNote(note, -velocity)
else if (channel === 9) onPad(note, -velocity)
}

// Start command.
else if (command === 9) {
if (channel === 0) onNote(note, velocity)
else if (channel === 9) onPad(note, velocity)
}

// Knob command.
else if (command === 11) {
if (note === 1) onModWheel(velocity)
}

// Pitch bend command.
else if (command === 14) {
onPitchBend(velocity)
}
}

处理程序附加到正确的 MIDI 输入:

midiInput.onmidimessage = handleMidiMessage

资源:

关于javascript - 如何解析 Web MIDI API 输入消息 (onmidimessage),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40902864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com