Абсолютное значение тика MIDI с использованием библиотеки мидо - PullRequest
0 голосов
/ 13 апреля 2020

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

Мой файл MIDI выглядит следующим образом: https://www.dropbox.com/s/t80kg9l2k525g0h/file.mid?dl=0

Это просто фиктивный MIDI-файл, который я создал с помощью basi c notes.

Я открыл его с помощью библиотеки Mido и напечатал его содержимое:

from mido import MidiFile
mid = MidiFile('file.mid')
for i, track in enumerate(mid.tracks):
print('Track {}: {}'.format(i, track.name))
for msg in track:
    print(msg)

Вот что я получаю:

Track 0: 
<meta message track_name name='\x00' time=0>

<meta message time_signature numerator=4 denominator=4 clocks_per_click=36 notated_32nd_notes_per_beat=8 time=0>
<meta message time_signature numerator=4 denominator=4 clocks_per_click=36 notated_32nd_notes_per_beat=8 time=0>
note_on channel=0 note=60 velocity=100 time=0
note_on channel=0 note=64 velocity=100 time=0
note_off channel=0 note=60 velocity=64 time=384
note_on channel=0 note=62 velocity=100 time=0
note_on channel=0 note=67 velocity=100 time=0
note_off channel=0 note=62 velocity=64 time=384
note_off channel=0 note=64 velocity=64 time=0
note_on channel=0 note=64 velocity=100 time=0
note_off channel=0 note=67 velocity=64 time=0
note_off channel=0 note=64 velocity=64 time=384
note_on channel=0 note=67 velocity=100 time=0
note_on channel=0 note=66 velocity=100 time=384
note_off channel=0 note=67 velocity=64 time=0
note_off channel=0 note=66 velocity=64 time=384
note_on channel=0 note=67 velocity=100 time=0
note_off channel=0 note=67 velocity=64 time=384
note_on channel=0 note=69 velocity=100 time=0
note_off channel=0 note=69 velocity=64 time=384
note_on channel=0 note=71 velocity=100 time=0
note_on channel=0 note=60 velocity=100 time=384
note_off channel=0 note=71 velocity=64 time=0
note_off channel=0 note=60 velocity=64 time=384
note_on channel=0 note=62 velocity=100 time=0
note_off channel=0 note=62 velocity=64 time=384
note_on channel=0 note=64 velocity=100 time=0
note_off channel=0 note=64 velocity=64 time=375
note_on channel=0 note=67 velocity=100 time=9
note_on channel=0 note=66 velocity=100 time=384
note_off channel=0 note=67 velocity=64 time=0
note_off channel=0 note=66 velocity=64 time=384
note_on channel=0 note=67 velocity=100 time=0
note_off channel=0 note=67 velocity=64 time=384
note_on channel=0 note=69 velocity=100 time=0
note_off channel=0 note=69 velocity=64 time=384
note_on channel=0 note=71 velocity=100 time=0
note_off channel=0 note=71 velocity=64 time=384
<meta message end_of_track time=0>

Выполняя какой-то эксперимент, я вроде понял, что время выражено в тиках относительно предыдущего события (note_on - note_off).

Как я могу переупорядочить заметки с использованием абсолютного времени (в тиках)?

Мне бы хотелось иметь абсолютную временную шкалу моих заметок, но я не могу понять, как "извлечь" ее из имеющихся у меня данных.

Существуют ли другие библиотеки, которые уже реализуют эту функцию? Я видел эту библиотеку: Python -midi , но, к сожалению, она доступна только для Python 2.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Дельта-время не относится к соответствующему событию записи, но относится к предыдущему событию в той же дорожке.

Просто сложите все времена-дельты по порядку.

1 голос
/ 16 апреля 2020

К сожалению, абсолютные средние значения тиков еще не были реализованы как функция ... https://github.com/mido/mido/issues/185

...