Автоматически создавать файлы репетиций хора из миди-файлов

Я неоднократно создаю репетиционные файлы для моего хора из миди-файлов, то есть я загружаю миди-файл песни (или создаю его сам), импортирую его в секвенсор, а затем качаю разные аудиофайлы, где части смешаны так, что один из них слышно лучше остальных.

Это довольно трудоемкий процесс, и хотя мне удалось убрать некоторые его части из сценария (путем микширования каждой дорожки в виде отдельного аудиофайла, а затем использования sox в сценарии bash для создания всех файлов), я Я все еще в поиске чего-то еще более эффективного.

Есть ли какая-то программа, которая принимает миди-файлы и на вход и создает репетиционные аудиофайлы на выходе?

Ответы (1)

Если я правильно понимаю, у вас есть миди-файл с N разными дорожками, и вы хотите создать из него N звуковых файлов, где для каждого звукового файла одна из дорожек пропорционально громче всех остальных дорожек.

Если это так, вы можете сделать это с помощью python и фантастической библиотеки music21 :

from music21 import *
##Load in a MIDI file
st = converter.parse(filePath)

Затем для каждого файла, который вы хотите создать, и для каждой партии в потоке music21 отрегулируйте громкость всех нот + аккордов.

for n in streamPart.notes:
    n.volume.velocity = (n.volume.velocity * scaleFactorForPart)

где scaleFactorForPart равно (например) 1, если это та часть, которую вы хотите сделать громче, или 0,8 (например) для всех остальных частей.

Наконец, сохраните MIDI-файлы:

mf = midi.translate.streamToMidiFile(finalStream)
fileName ="whatever.mid"
mf.open(fileName, 'wb')
mf.write()
mf.close()

Очевидно, что эти фрагменты кода являются псевдокодом, и я упустил немного логики. После того, как вы сохранили все файлы MIDI, вы можете использовать сценарий bash и конвертер для преобразования файлов MIDI в MP3/Wav/что угодно.

Спасибо! Я проверю этот пакет, а затем вернусь к вам и сообщу, как все прошло.
Я полагал, что для такого рода вещей не было готовых пакетов, и в итоге сам написал все это, хотя и использовал midicsvвместо предложенной программы в этом ответе. Я все еще пытаюсь понять миди-звуковую часть (это можно сделать через fluidsynthи soundfonts, но это звучит не особенно хорошо, даже при использовании самых качественных).
кстати - последний раздел можно сделать просто с помощью finalStream.write('midi', fp="whatever.mid").