0

我可以使用库解析 MIDI 文件midi-parser-js

并创建一个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 事件中获得实际的音符及其力度?

4

1 回答 1

0

这是从文件中读取注释的方式:

....
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字节是音符编号,第二个字节是速度。

于 2019-06-06T13:21:45.497 回答