Mido midi - находит вдвое больше событий Note_On, если я играю на клавиатуре, в отличие от рисования нот в рулоне пианино...?

Я написал программу для анализа MIDI-файла и поиска всех событий Note_On.

Я вхожу в свой пианино DAW и рисую в D4, D5, F4

Моя программа правильно находит события Note_On e и правильно их идентифицирует.

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

Моя программа находит, D4,D4, D5,D5, F4,F4

т.е. это удваивает ноты! Почему я получаю другой результат? Оба файла миди выглядят одинаково в DAW: у них есть три примечания.

Вот два миди-файла:

https://drive.google.com/drive/folders/1CUgTJNH-jD5rPJEmT0aSwRp4PhaatxYq?usp=sharing

Вот мой код, который читает данные Midi из файла:

for i, track in enumerate(Ians_midi.tracks):
    for msg in track:
        if msg.type == 'note_on':   ... 

1 ответ

Решение

Спецификация MIDI гласит:

MIDI предоставляет два примерно эквивалентных средства отключения ноты (голоса). Заметка может быть отключена либо путем отправки сообщения об отключении для того же номера и канала, либо путем отправки сообщения о включении для этой заметки и канала со значением скорости, равным нулю. Преимущество использования "Note-On с нулевой скоростью" состоит в том, что он может избежать отправки дополнительных байтов состояния, когда используется статус выполнения.

Благодаря этой эффективности отправка сообщений Note-On со значениями скорости, равными нулю, является наиболее часто используемым методом. Тем не менее, некоторые клавишные инструменты реализуют скорость освобождения, когда используется код Note-Off (8nH), сопровождаемый байтом "speed off". Получатель должен быть в состоянии распознать любой метод отключения заметки и должен относиться к ним одинаково.

Поэтому, когда вы получаете note_on сообщение, вы также должны проверить его velocity,

Другие вопросы по тегам