如何从 MIDI 事件中获取音符及其速度?
How to get the note and its velocity from MIDI event?
我可以使用 midi-parser-js
library
解析 MIDI 文件
并创建一个包含所有轨道及其事件的 soundtrack
对象:
export class Soundtrack {
name: string;
duration: number;
tracks: Array<Track>;
}
export class Track {
events: Array<MidiEvent>;
}
export class MidiEvent {
data: any;
deltaTime: number;
metaType: number;
type: number;
}
我还有一个可用的合成器服务,我想将这些 MIDI 音符提供给它:
synth.triggerAttack(note, null, velocity);
synth.triggerRelease(note);
如何过滤属于音符的 MIDI 事件?
如何从此类 MIDI 事件中获取实际音符及其力度?
这是从文件中读取注释的方式:
....
MIDI.track[t-1].event[e-1].type = parseInt(statusByte[0], 16);// first byte is EVENT TYPE ID
MIDI.track[t-1].event[e-1].channel = parseInt(statusByte[1], 16);// second byte is channel
...
switch(MIDI.track[t-1].event[e-1].type){
...
case 0x8: // Note off
case 0x9: // Note On
MIDI.track[t-1].event[e-1].data = [];
MIDI.track[t-1].event[e-1].data[0] = file.readInt(1);
MIDI.track[t-1].event[e-1].data[1] = file.readInt(1);
第一个data
字节是音符编号,第二个字节是力度。
我可以使用 midi-parser-js
library
并创建一个包含所有轨道及其事件的 soundtrack
对象:
export class Soundtrack {
name: string;
duration: number;
tracks: Array<Track>;
}
export class Track {
events: Array<MidiEvent>;
}
export class MidiEvent {
data: any;
deltaTime: number;
metaType: number;
type: number;
}
我还有一个可用的合成器服务,我想将这些 MIDI 音符提供给它:
synth.triggerAttack(note, null, velocity);
synth.triggerRelease(note);
如何过滤属于音符的 MIDI 事件?
如何从此类 MIDI 事件中获取实际音符及其力度?
这是从文件中读取注释的方式:
....
MIDI.track[t-1].event[e-1].type = parseInt(statusByte[0], 16);// first byte is EVENT TYPE ID
MIDI.track[t-1].event[e-1].channel = parseInt(statusByte[1], 16);// second byte is channel
...
switch(MIDI.track[t-1].event[e-1].type){
...
case 0x8: // Note off
case 0x9: // Note On
MIDI.track[t-1].event[e-1].data = [];
MIDI.track[t-1].event[e-1].data[0] = file.readInt(1);
MIDI.track[t-1].event[e-1].data[1] = file.readInt(1);
第一个data
字节是音符编号,第二个字节是力度。