MIDI-файл хранит не звук, а команды: ноты, скорость нажатия, дорожки и темп. Поэтому один и тот же файл звучит по-разному в зависимости от синтезатора.
Плеер читает Standard MIDI File прямо в браузере, показывает дорожки и исполняет ноты через Web Audio API. Можно отключать дорожки, менять темп и громкость, перематывать и смотреть фортепианную дорожку.
Как работает
Парсер читает заголовок MThd и дорожки MTrk, учитывает переменную длину delta-time, running status, темповые события и ноты. Время событий переводится из тиков в секунды по карте темпов.
Воспроизведение планируется с опережением: ноты ставятся в очередь Web Audio на доли секунды вперёд, поэтому звук не зависит от частоты кадров. Тембр выбирается по MIDI-программе дорожки, а ударные каналы звучат короткими шумовыми импульсами.
Частые вопросы
Файл загружается на сервер?
Нет. MIDI-файл читается и воспроизводится локально в браузере.
Почему звук отличается от оригинальной записи?
MIDI не содержит аудио. Плеер синтезирует ноты простыми осцилляторами, поэтому тембр отличается от инструментов в DAW или на синтезаторе.
Поддерживаются ли все MIDI-файлы?
Поддерживаются Standard MIDI File формата 0 и 1 с PPQ или SMPTE-таймингом. Экзотические системные сообщения могут игнорироваться.