Найти - Пользователи
Полная версия: Как из midi файла получить массив нот
Начало » Python для новичков » Как из midi файла получить массив нот
1
Lainelir
Как из midi файла получить массив нот. Все имеющиеся библиотеки выдают массив типо [<meta message midi_port port=0 time=0>, <message sysex data126,127,9,1) time=0>, <meta message midi_port port=0 time=0>…
мне нужен массив без текста только числа.
Rodegast
Да всё очень просто
 # pip install python-midi
 import midi
>>> treki = midi.read_midifile("/home/rodegast/solaris.mid")
>>> [ [ x.data for x in e] for e in  treki ]
[[[73, 99, 104, 32, 114, 117, 102, 39, 32, 122, 117, 32, 100, 105, 114, 44, 32, 72, 101, 114, 114, 32, 74, 101, 115, 117, 32, 67, 104, 1
14, 105, 115, 116], [74, 46, 32, 83, 46, 32, 66, 97, 99, 104, 32, 47, 32, 84, 114, 97, 110, 115, 99, 105, 112, 116, 105, 111, 110, 32, 9
8, 121, 32, 74, 105, 109, 32, 71, 105, 108, 115, 105, 110, 97, 110, 32, 73, 86, 10], ......
Lainelir
(((у меня модуль midi не работает ругается на read_midifile.
Rodegast
Ну тогда вот вариант с mido
 >>> import mido
>>> mid = mido.MidiFile("/home/rodegast/solaris.mid")
>>> [ x.note for x in mid if x.type == "note_on" ]
[72, 56, 41, 29, 56, 60, 41, 29, 60, 65, 41, 29, 65, 64, 41, 29,.....
Lainelir
Вроде с mido работает. А можно массив со всей последовательностью нот времени каналов и так что бы потом его можно было обратно загрузить в миди файл?
Rodegast
Ты может быть и удивишся, но mido.MidiFile как раз такой объект и возвращает:
 >>> mid = mido.MidiFile("/home/rodegast/solaris.mid")
>>> m = list(mid)[25]
>>> m
<message note_on channel=2 note=41 velocity=80 time=0>
>>> m.channel
2
>>> m.note
41
>>> m.time
0
>>> m.velocity
80
Lainelir
<message note_on channel=2 note=41 velocity=80 time=0> этим меня не удивишь.
В общем очень признателен. Думаю дальше сам справлюсь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB