Получить переменные из midi-событий с библиотекой python-midi - PullRequest
0 голосов
/ 10 ноября 2018

Я использую библиотеку python-midi для чтения файла midi в список.

variable = midi.read_midifile(source)

Записи выглядят так:

   midi.NoteOffEvent(tick=2, channel=10, data=[48, 98]),
   midi.NoteOnEvent(tick=46, channel=10, data=[48, 100]),
   midi.NoteOffEvent(tick=12, channel=10, data=[48, 100]),
   midi.NoteOnEvent(tick=36, channel=10, data=[48, 91]),
   midi.NoteOffEvent(tick=14, channel=10, data=[48, 91]),
   midi.NoteOnEvent(tick=34, channel=10, data=[48, 122]),

Теперь я хотел бы получить параметры этих событий, но я не знаю, как это сделать. Я хочу посчитать все тики, получить все разные каналы, а также прочитать данные (поэтому примечание и скорость). Я заглянул в Github-Repository, но не нашел ответа на свой вопрос. ссылка на хранилище: https://github.com/vishnubob/python-midi

Может быть, Pyhton-Midi не предназначен для чтения и манипулирования midi-файлами?

1 Ответ

0 голосов
/ 10 ноября 2018

Я ничего не знаю о библиотеке python-midi, но из исходного кода я предполагаю, что метод read_midifile() возвращает объект Pattern. Объект Pattern содержит список событий.

Каждое событие будет содержать свойство tick, channel и data.

Я предполагаю, что вы можете нарезать объект Pattern как список, так что вы должны быть в состоянии сделать это:

pattern = midi.read_midifile(source)
print pattern[0].tick

Это выберет первое событие в Pattern и напечатает его свойство галочки.

Затем вы можете считать тики, выполняя что-то вроде:

pattern = midi.read_midifile(source)
tick_count = 0
# a unique list
channels = set()

for event in pattern:
    tick_count += event.tick
    channels.add(event.channel)

Если вам когда-либо понадобится узнать, что находится в объекте, вы всегда можете использовать функцию dir(). Э.Г.

print dir(event)

Удачи в обучении. Продолжай стремиться высоко!

...