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
,