Пару месяцев назад я был в доме гитариста моей группы, делая предварительно изготовление новой песни. Наш барабанщик отправил нам последовательность MIDI, сделанную с помощью плагина MT Powerdrum Kit 2 VST. Я хотел проверить, как звучат канавки с проб, у меня было.
Я пытался загрузить образцы, используя Kontakt и …
Участок образец имел некоторые звуки, по-разному сопоставленные от исходного плагина. Что теперь?
Я мог редактировать записку барабана, записывающуюся в мою даму, однако это утомительное и ошибка. Кроме того, если мой барабанщик прислает мне еще одну версию, мне нужно было бы все снова менять. Вручную.
Мы можем создавать барабанные линии, используя один плагин и используйте его в другом. Здесь я покажу вам, как избежать повторения и автоматизировать перевод между различными плагинами барабана с помощью Python.
MIDI – это коммуникационный протокол, созданный путь до моего существования на этой планете. В двух словах он дает музыканты, позволив нескольким цифровым музыкальным инструментам работать вместе.
Обычно MIDI-устройства использовали 5-контактный кабель DIN. В настоящее время протокол по-прежнему существует и обычно найден работает над USB, подключающими приборы к компьютеру.
MIDI использует сообщения для передачи мероприятий, таких как начало или конец примечания, ее интенсивность и высоту, изменение темпа и т. Д.
Эти сообщения могут быть сохранены в файле MIDI. Эти файлы были известны в первые дни мультимедийного Интернета в качестве фоновой музыки для персональных сайтов и как полифонические рингтоны.
Эти файлы могут представить цифровой производительность песни.
Мы могли бы искать спецификации протокола MIDI и внедряют протокол себя, однако, поскольку идея здесь состоит в том, чтобы избежать большого количества ручной работы, быстрый поиск Google для библиотеки может быть достаточно.
Googling «Библиотека Python MIDI», я нашел Мидо Отказ От Skimming Docs можно увидеть, что он должен предоставить все, что нам нужно для этой задачи. Это доступно здесь.
PIP дает это:
pip install mido
Наличие выбранных наших инструментов, теперь нам нужно планировать, какой код должен сделать код.
Сценарий Python должен прочитать последовательности примечаний в исходном файле MIDI и сопоставьте каждую записку из исходного плагина в их эквиваленты другого плагина.
Для этого необходимо понять, как каждый плагин VST отображает свои кусочки барабана в MIDI-ноты. Для Mt PowerDrum Kit 2 есть несколько файлов в Их сайт Документирование, которое примечание отображает каждый звук.
У примерной упаковки имели эту информацию в его руководстве PDF.
Было бы действительно удобно делать это отображение визуальным образом, но я не нашел никаких инструментов для этого, и создание пользовательского инструмента пойдем полностью против цели всей всей вещи. (Это может быть хороший боковой проект, ты)
С тех пор нет другого способа сделать это, я сделал это вручную, попробовал возможным лучшее совпадение между оба плагинами.
Каждая строка содержит столбцы источника, назначения и описания.
Если вы оказываете то же самое одобрение, не тратьте свое время больше, вот оно:
65,44,Hihat Pedal 63,68,Hihat Edge Tight 62,69,Hihat Edge Closed 61,71,Hihat Edge Semi-open 60,72,Hihat Edge Open 58,54,Crash 1 Choke 57,55,Crash 1 55,55,Splash -> Crash 53,53,Ride Bell 52,35,China 51,51,Ride 50,50,Tom 1 - Hi 49,52,Crash 2 48,50,Tom 1 - Hi 47,48,Tom 2 - Mid 46,72,Hihat Edge Open 45,48,Tom 2 - Mid 44,71,Hihat Edge Semi-open 43,47,Tom 3 - Low 42,69,Hihat Edge Closed 41,47,Tom 3 - Low 40,38,Snare 39,38,Snare 38,38,Snare 37,37,Sidestick 36,36,Kick 35,36,Kick
Вот последний скрипт, прокомментировал линию по линии:
from mido import MidiFile, MidiFile, MidiTrack # Opening the original MIDI sequence input_midi = MidiFile('./Murundu.mid') # Creating the destination file object output_midi = MidiFile() # Copying the time metrics between both files output_midi.ticks_per_beat = input_midi.ticks_per_beat note_map = {} # Load the mapping file with open('note_map.csv') as map_text: for line in map_text: elements = line.replace('\n','').split(',') # Each line in the mapping file will be loaded into a # dictionary with the original MIDI note as key and # another dictionary with target note # and description as value note_map[int(elements[0])] = { 'target_note': int(elements[1]), 'description': elements[2] } # Now, we iterate the source file and insert mapped notes # into the destination file # Notes are determined by note_on e note_off MIDI messages # Other types of messages will be copied directly # Notes that does not exist in the mapping will not be copied for original_track in input_midi.tracks: new_track = MidiTrack() for msg in original_track: if msg.type in ['note_on','note_off']: # mido's API allows to copy a MIDI message # changing only some of its parameters # Here, we use the mapping dictionary to create # the mapped note, keeping its properties like # intensity origin_note = msg.note if origin_note in note_map: new_track.append( msg.copy( note = note_map[origin_note]['target_note'] )) print(note_map[origin_note]['description']) else: print("Origin note",origin_note,"not mapped") else: print(msg.type) new_track.append(msg) # MIDI files are multitrack. Here we append # the new track with mapped notes to the output file output_midi.tracks.append(new_track) # Finally, save the mapped file to disk output_midi.save('./Murundu-remap.mid')
Спасибо за прочтение!
Оригинал: “https://dev.to/varlen/editing-midi-files-with-python-2m0g”