Как получить ноту и ее скорость из события MIDI? - PullRequest
0 голосов
/ 06 июня 2019

Я могу проанализировать 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?

1 Ответ

0 голосов
/ 06 июня 2019

Вот как примечания читаются из файла:

....
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 байт - номер примечания, второй байт - скорость.

...