Что вы сделали, это взяли поток music21
, преобразовали его в MIDI, а затем преобразовали его обратно в поток music21
, и вы удивитесь, что круговая передача не дает вам такой же вывод в качестве исходного ввода.
Но если бы вы преобразовали, скажем, электронную таблицу Excel в .csv
и обратно, я думаю, вы бы не удивились.
Вы предполагаете, что music21
и MIDI - две эквивалентные нотации. Они не. music21
ориентирован на анализ баллов. Он знает о заметках, отдыхе, барах, ключевых подписях и ключах (и многое другое).
MIDI, с другой стороны, представляет собой набор инструкций воспроизведения, ориентированный на синтезатор. Подумайте о нотации рояля, которую вы увидите в некоторых синтезаторных программах, например, в этой:
.
Черные горизонтальные полосы обозначают ноты, которые играют. Но где остальные? Их нет, потому что нет разницы между примечанием, которое молчит для всей пьесы, и примечанием в такте, которое прерывается молчанием на длину нотки четверти. Вот почему я сказал в своем комментарии, что MIDI на самом деле не отдыхает. Отдых здесь только для того, чтобы показать игроку, где не играть ноты в баре. Но MIDI ничего не знает о барах (если вы видите бары в MIDI-файле, они, по сути, являются комментариями), и поэтому ему также не нужны остатки. Когда music21
импортирует из MIDI, он делает все возможное с вводом, но угадывать, где отдыхать следует из-за отсутствия нот, чрезвычайно сложно, и вы не должны удивляться, если music21
не так хорошо справляется с работой, как тебе бы хотелось.
MIDI - это очень менее богатое средство выражения музыки, поскольку оно заменяет прямой необработанный контроль над целевым инструментом на нотации, которые имеют смысл для людей. Вам не нужен знак двойной четкости, если все, что вам нужно сделать, это добавить 2 (или 1, в зависимости от контекста) к номеру заметки в сообщении. Вот почему преобразование из music21
в MIDI и обратно похоже на запись электронной таблицы в виде .csv
и ее чтение. Большая часть информации теряется.
На самом деле не существует независимого от приложения стандарта для музыкальной нотации, и он определенно не является MIDI. MusicXML пытается быть таким, но он не охватывает все, как вы обнаружите, если вы используете его для преобразования, скажем, musci21
, Сибелиуса и Дорико. На самом деле Дорико будет игнорировать некоторые пробелы в MusicXML, потому что считает, что может сам сделать лучше.
Настоящим тестом на отсутствие остатков в вашем MIDI-файле является воспроизведение MIDI-файла , а не преобразование его в какую-либо другую нотацию и его обработку в качестве прокси для того, что находится в MIDI-файле. , Слышите ли вы отсутствие остатков в файле? Отличается ли воспроизводимый выходной звук от оригинала (игнорируя такие ноты, как инструменты, тембр, темп и т. П.)?