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

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

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

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

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

Моя программа находит, 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 Ответ

0 голосов
/ 02 июля 2019

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

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

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

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

...