Рубрики
Без рубрики

Редактирование файлов MIDI с Python

Вот как манипулировать файлами MIDI с Python и автоматизировать задачи производства музыки. Помечено с Python, Midi, Music, MusicProduction.

Пару месяцев назад я был в доме гитариста моей группы, делая предварительно изготовление новой песни. Наш барабанщик отправил нам последовательность 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”