Как векторизовать миди-вход? - PullRequest
0 голосов
/ 22 декабря 2018

Я хочу создать модель LSTM (с использованием Keras), которая будет обучаться музыке, но мне трудно векторизовать миди-вход.Я попытался использовать библиотеку 'Mido' в python, откуда я смог извлечь данные в следующем формате:

note_on channel=0 note=72 velocity=50 time=0
note_on channel=0 note=38 velocity=50 time=0.1171875
note_off channel=0 note=80 velocity=0 time=0.1171875
note_off channel=0 note=41 velocity=0 time=0

Я преобразую их в массив

[note_number, velocity, time]

где скорость обозначает скорость и является ли она note_on \ note_off.Теперь проблема в том, как мне кормить здесь время , я имею в виду время в тиках (я полагаю).Как мне преобразовать эти тики в секунды, и как я передам этот массив в последовательную модель, как я снова преобразую время в тики из выходных данных?

1 Ответ

0 голосов
/ 23 декабря 2018

Время в файлах MIDI равно дельта раз, количество времени ожидания после предыдущего события перед выполнением этого события.В вашем примере два события Note Off происходят одновременно.Вы можете легко преобразовать дельта-время в абсолютное время, сохраняя текущую сумму значений дельта-времени.

Показанные вами значения времени не могут быть тиками.Тики должны быть целочисленными значениями.Не видя ваш код, я не знаю, каковы эти значения, но я предполагаю, что Mido конвертируется в секунды.

Тики обычно основаны на квартальных нотах, а не на времени.Продолжительность четвертной ноты (и, следовательно, тактов) зависит от текущего темпа, который задается мета-событием Set Tempo.

Я думаю, вы выиграете, если потратите время на лучшее понимание MIDI-файлов.Документация Mido для файлов MIDI - хорошее место для начала.Существует несколько объяснений MIDI-файлов (например, , этот * .)

. Надеюсь, это поможет вам выбрать правильный путь.Если у вас все еще возникают проблемы, опубликуйте новый вопрос с примером минимального, полного и проверяемого кода , который иллюстрирует вашу проблему.

...