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