Как стать автором
Обновить

Комментарии 8

Я для AVR использовал вот эту статью и ПО, которое там выложено:
Midi Player для AVR
Там достаточно хорошо проработано, с выбором каналов, примером как будет слышно в реале, с различными вариантами усилителей, различными способами модуляции сигнала. Рекомендую, уже две поделки реализовал.
Спасибо за ссылку. Посмотрел. Интересно. Очень. Но я все таки закончу начатое и создам собственную программу. Постараюсь реализовать больший функционал, чем там. Своей ссылкой только подогрели интерес) Спасибо.
В свое время тоже пришлось разбираться с MIDI. Использовал вот эту статью: www.muzoborudovanie.ru/articles/midi/midi5.php. Стоит отметить, что формат довольно изощренный в силу своей древности: во-первых, big-endian, и, во-вторых, величины переменной длины с 7-битными байтами :) Кстати, что-то не нашел у Вас упоминания про важные мета-события, такие как end-of-track, set tempo и key signature. Они не имеют значения в рамках решаемой задачи?
Вообще спасибо за статью, особенно за указание моментов, которые редко встречаются либо вообще не применяются.
Спасибо за положительный отзыв.
  1. Стоит отметить, что формат довольно изощренный в силу своей древности: во-первых, big-endian, и, во-вторых, величины переменной длины с 7-битными байтами.
    Я отметил это в статье. Да, это по-началу смущало. Да и не только это… Но описав все тонкости извлечения MIDI в отдельном классе — мы избавили себя от надобности помнить их.
  2. Кстати, что-то не нашел у Вас упоминания про важные мета-события, такие как end-of-track, set tempo и key signature
    По-поводу end-of-track. Данное событие содержит ту же структуру, что и другие мета-события. Так же: время, 0xFF, 0x2F, длинна 0. Так как данной команды нет в списке распознаваемых — мы ее просто считываем как мета-событие (3 байта, включая 0xFF). А учитывая тот факт, что после каждого считанного события мы сверяемся со счетчиком байт блока, то после прочтения данного события счетчик как раз будет равен нулю и мы выйдем из цикла чтения блока.
  3. В свое время тоже пришлось разбираться с MIDI. Использовал вот эту статью: www.muzoborudovanie.ru/articles/midi/midi5.php.
    Спасибо за ссылку, но данная серия статей уже имеется в последнем абзаце (в пункте «Используемые источники»).
  4. set tempo и key signature
    Данные мата-события, как правило, не встречаются в простых нотных произведениях. Но конкретно set tempo иногда встречается и задает тот же темп, который и так указан в заголовке MIDI файла. Пока что не было глюков со сменой темпа в процессе. Впоследствии, конечно, расширю программу и добавлю данные пункты. Как вы могли заметить, я еще не учел команду второго уровня «сбросить все ноты на канале». В подобных MIDI файлах так же редко встречается. Но в будущем обязательно планирую добавить (с данной командой довольно много заморочек, а данная программа будет в итоге лишь основой для следующей статьи о российских микроконтроллерах).
Так же хочу сказать, что в оркестровых произведения «эксклюзивные мета-события» все же используют, так что я обязательно добавлю их игнорирование.
Мы с детьми как то делали проект для изучения азбуки морзе. Тоже пришлось повозится с генерацией midi файлов. Вот может кому будет интересно.
Сложным путём вы пошли. Зачем использовать midi, когда есть xm? Он намного проще, можно просто побайтово зашивать в код и парсить на лету.
О данном формате слышу впервые. Но погуглил. Интересно. Но, опять же, редкий. Цель у меня, все же, снизить нагрузку на МК как можно сильнее. Т.к. воспроизведение звука может быть не основной задачей. Соответственно нужно еще более простой формат чем xm. О написании легковесного и быстрого драйвера на МК я напишу еще серию статеек (уже начала, можете посмотреть).
Статья замечательная)
Но рекомендую исправить грамматические ошибки, потому что всякие «Длительность ноты время обсалютное.» и «Смотрим по старшым 4-м байтам.» смотрятся не очень ;)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации