如何解析 Web MIDI API 输入消息 (onmidimesage)
Posted
技术标签:
【中文标题】如何解析 Web MIDI API 输入消息 (onmidimesage)【英文标题】:How to parse Web MIDI API input messages (onmidimessage) 【发布时间】:2016-12-01 04:50:23 【问题描述】:假设我已经在使用 Web MIDI API 来侦听 MIDI 输入以获取消息,现在我正在尝试理解和利用我收到的数据。
如何从MIDIMessageEvent
中解析一些基本信息?
我如何解释一些基本 MIDI 事件的解析信息?
注意 在平板上 onPitchBend onModWheel【问题讨论】:
【参考方案1】:解析和解释 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
资源:
Web MIDI API MIDI message data summary Script bycwilso
Script by cotejp
【讨论】:
以上是关于如何解析 Web MIDI API 输入消息 (onmidimesage)的主要内容,如果未能解决你的问题,请参考以下文章