Как проанализировать содержимое MIDI загруженного файла? - PullRequest
1 голос
/ 05 июня 2019

Я загружаю файл из браузера и вижу, что его содержимое начинается с MThd, за которым следует множество искаженных нечитаемых символов.

Теперь это файл MIDI .mid, и яЯ хотел бы проанализировать его с библиотекой Tonejs / midi .

Таким образом, я закодировал следующий метод обслуживания:

import * as ToneMidi from '@tonejs/midi';

public parseRawMidi(rawMidiData: ArrayBuffer): Soundtrack {
  const midi = new ToneMidi.Midi(rawMidiData);
}

Но он выдает мне ошибку: ypeError: _tonejs_midi__WEBPACK_IMPORTED_MODULE_2__.Midi is not a constructor

Я считаю, что это объясняется тем, что аргумент rawMidiData не соответствует ожидаемому типу конструктора.

Действительно, файл Midi.d.ts показывает:

constructor(midiArray?: (ArrayLike<number> | ArrayBuffer));

Вот мой загрузчик файлов:

public onUpload(fileList: FileList): void {
  const file = fileList[0];
  const fileReader: FileReader = new FileReader();
  fileReader.onloadend = (event: Event) => {
    this.rawMidi = fileReader.result as ArrayBuffer;
    // var array = new Uint8Array(new ArrayBuffer(rawLength));
    const soundtrack: Soundtrack = this.midiService.parseRawMidi(this.rawMidi);
  };
  fileReader.readAsText(file);
}

ОБНОВЛЕНИЕ: Небольшой эксперимент.Я добавил следующий исходный код:

const buffer = new ArrayBuffer(16);
console.log('Before the call to the constructor');
const midi = new ToneMidi.Midi(buffer);
console.log('and after');

Был отображен первый регистратор, но не второй, и появилась та же ошибка.

ОБНОВЛЕНИЕ: Я использовал неправильный считыватель readAsText и при переключении на readAsArrayBuffer, как в fileReader.readAsArrayBuffer(file);, я мог получить буфер массива, переданный методу сервиса.Но у меня все еще остается та же проблема, связанная с нерешением вызова конструктора: Midi is not a constructor

ОБНОВЛЕНИЕ: После того, как проблема GitHub была решена, я мог бы обновить ее до @tonejs/midi@2.0.5 с помощью npm install @tonejs/midiкоманда и конструктор тогда работали нормально.

...