Темп и время подписи от MIDI
В настоящее время я создаю программное обеспечение для отображения музыкальных нот из файла MIDI. Я могу получить каждую букву тонов из событий NoteOn и NoteOff, но я не знаю, как получить или как рассчитать типы нот (целые, половинные, восьмые...) и другие временные подписи. Как я могу получить это? Я искал пример, но безуспешно.
1 ответ
MIDI не представляет ноты в абсолютных количествах, как в классической музыке. Вместо этого длина ноты продолжается до тех пор, пока не будет проанализировано соответствующее событие выключенной заметки (также довольно часто MIDI-файлы используют заметку о событии со скоростью 0 в качестве выключенной заметки, просто имейте это в виду). Таким образом, в основном вам нужно будет перевести время в тиках между двумя событиями в музыкальное время, чтобы узнать, используете ли целую, половинную, четвертную ноту и т.д.
Этот перевод, очевидно, зависит от знания темпа и временной сигнатуры, которые являются мета-событиями MIDI. Более подробную информацию о разборе можно найти здесь:
http://www.sonicspot.com/guide/midifiles.html
Обычно вы берете PPQ для определения количества миллисекунд на тик, а затем используете временную сигнатуру и темп для определения длины четвертной ноты в миллисекундах. Есть несколько ответов на Stackru с этим преобразованием, но я пишу этот пост на своем телефоне и не могу потрудиться посмотреть их прямо сейчас.:-)
Надеюсь, что это указывает вам в правильном направлении!