Алгоритмы обработки MIDI сообщения ( для микроконтроллеров)

  • Автор темы Автор темы dim3740
  • Дата начала Дата начала

dim3740

Active Member
28 Фев 2013
439
74
28
Уфа
Предлагаю обсуждать коды программ, фрагменты написанные на любом языке программирования, или вообще алгоритмы обработки МИДИ команд. Это программы МИДИ контроллеров, преобразователей, сплиттеров, мергеров, фильтров, замены каналов и многие другие. Также это - как обеспечить деление/зонирование клавиатур, преобразовать Raning Status, сигналы РеалТайм, SysEx... и т.п.
Я разработал с десяток- другой девайсов, выполняющих данные функции, и написал программы с «нуля» для собственного опыта. Программы работают … скажем так, на 99 %. И, сейчас хотел бы найти инфу, как это делается в професиональных устройствах, и улучшить результаты. Если есть единомышленники, готов выложить (как это сделать – обсудим) фрагменты кодов на CИ++. Применяю AVR микроконтроллеры.
Если конкретный вопрос, то следующее: в моих девайсах бывают случаи «залипания» нот, т.е. отсутствие пары MidiON – MidiOFF. Редко, но бывают. Задача должна решаться буферированием потока МИДИ команд. Как повысить надежность? Причины сбоев?
 
Причины сбоев, залипаний - неоптимальный код для контроллера (сам на это налетал неоднократно), буферизации не нужно имхо, а вот хороший дебаг при отладке - необходим как воздух. Для меня выход один - курение мануала на контроллер до полного просветления, в случае с миди это грамотная обработка прерываний и чтение справочной литературы по Си. Ну и давно уже смотрю в сторону покупки Atmel ICE (как наиболее гуманного варианта по соотношению качество/возможности). Пока в командировке по основной работе, освобожусь - можно и пообсуждать ;) так как тема очень интересная. Инфы по профным устройствам найти вряд ли выйдет, копирайты и всякие защиты от копирований и прочий звериный оскал капитализьму, а на форумах англоязычных такие же энтузиасты сидят и бегают по одним и тем же граблям.
 
Ну и давно уже смотрю в сторону покупки Atmel ICE (как наиболее гуманного варианта по соотношению качество/возможности).
А как же обычный JTAG на аврке? Я сто лет назад собирал, очень полезная вещь, я тогда еще через сом порт делал как оригинал, а давно уже юсб есть.
А вообще может лучше сортех м3 +дма использовать? Это что бы по взрослому и безкомпромиссно).

буферизации не нужно имхо
если это сложное устройство, например упраление синтом или секвенсер то без буффера не обойтись и дма желательно.
 
Отладка, имхо, важная тема и связана с алгоритмами, но хотелось бы не затрагивать ее в этом топике. И, уж тем более, обсуждение какой МК лучше)))
Возьму конкретный пример, опишу на «пальцах»: С МИДИ клавы идут сообщения, попадают в некий девайс (МК), где они преобразуются, и с его выхода попадают на звуковой модуль (ЗМ). Приортитет прерывания входа ЗМ (некий UART) должен быть выше, чем, скажем, опрос кнопок оператора на ЗМ. Если он самый быстрый в системе, то надобность в буфере по выходу МК отпадает. Если, алгоритм преобразования, а также иные времязатратные процессы в МК, медленее, чем входной поток, то нужен буфер по входу МК. МК может быть самостоятельной единицей, а может быть встроен как узел, как в Клаву, так и в ЗМ, если последние тоже являются предметом собственного конструирования. В этом случае, алгоритм МК может быть увязан с алгоримом этих девайсов. Скажем, совсем незачем анализировать МИДИ поток, если переключение некого режима априори не делается во время игры.
Все вышенаписанное, абстрактно…. ибо «самый быстрый»…. «медленее» и т.п. Пока я понял, что нужен некий тест-контроллер (имхо софтовый), который может выдавать МИДИ сообщения разного характера и периодичностью. Т.е. имитировать кластеры, посыл «сразу» по нескольким каналам, имитация вклинивания RealTime и т.п. А без него, эксперименты бесполезны((((
 
@Aleksandr Oleynik, увы, не соглашусь... Даже если отставить в сторону тот факт, что ТС говорит про железный вариант, bidule далек от того, что требуется сейчас от миди-примочки. Он, скорее так. контейнер для простого роутинга... Вот тот же JSFX куда как ближе к теме)
 
@PianoIst, во-первых, я bidule предложил в качестве тест контроллера, зачем же я буду предлагать софт там, где железяка обсуждается.
А во-вторых, в bidule можно сгенерить или преобразовать ЛЮБОЕ Миди сообщение, какой же это простой роутинг?
 
bidule предложил в качестве тест контроллера
А, дошло, пардон.
сгенерить или преобразовать ЛЮБОЕ Миди сообщение, какой же это простой роутинг?
Также это - как обеспечить деление/зонирование клавиатур, преобразовать Raning Status, сигналы РеалТайм, SysEx... и т.п.
ну вот такого я пытался там наворотить - неа. Тока скрипты :)
 
А кто может точно сказать, могут ли Реал Таймы в СисЕксы вклиниваться, или нет?
По логике, вроде не должны, но хотелось бы документального подтверждения.
Пока что-то не нашёл.
 

Сейчас просматривают