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

dim3740

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

ssm

Well-Known Member
13 Фев 2008
1.464
847
113
53
Evil Hamster records ltd.
Причины сбоев, залипаний - неоптимальный код для контроллера (сам на это налетал неоднократно), буферизации не нужно имхо, а вот хороший дебаг при отладке - необходим как воздух. Для меня выход один - курение мануала на контроллер до полного просветления, в случае с миди это грамотная обработка прерываний и чтение справочной литературы по Си. Ну и давно уже смотрю в сторону покупки Atmel ICE (как наиболее гуманного варианта по соотношению качество/возможности). Пока в командировке по основной работе, освобожусь - можно и пообсуждать ;) так как тема очень интересная. Инфы по профным устройствам найти вряд ли выйдет, копирайты и всякие защиты от копирований и прочий звериный оскал капитализьму, а на форумах англоязычных такие же энтузиасты сидят и бегают по одним и тем же граблям.
 

General Dead

Well-Known Member
26 Фев 2006
7.225
3.788
113
45
Kharkiv UA
Ну и давно уже смотрю в сторону покупки Atmel ICE (как наиболее гуманного варианта по соотношению качество/возможности).
А как же обычный JTAG на аврке? Я сто лет назад собирал, очень полезная вещь, я тогда еще через сом порт делал как оригинал, а давно уже юсб есть.
А вообще может лучше сортех м3 +дма использовать? Это что бы по взрослому и безкомпромиссно).

буферизации не нужно имхо
если это сложное устройство, например упраление синтом или секвенсер то без буффера не обойтись и дма желательно.
 

dim3740

Active Member
28 Фев 2013
431
72
28
Уфа
Отладка, имхо, важная тема и связана с алгоритмами, но хотелось бы не затрагивать ее в этом топике. И, уж тем более, обсуждение какой МК лучше)))
Возьму конкретный пример, опишу на «пальцах»: С МИДИ клавы идут сообщения, попадают в некий девайс (МК), где они преобразуются, и с его выхода попадают на звуковой модуль (ЗМ). Приортитет прерывания входа ЗМ (некий UART) должен быть выше, чем, скажем, опрос кнопок оператора на ЗМ. Если он самый быстрый в системе, то надобность в буфере по выходу МК отпадает. Если, алгоритм преобразования, а также иные времязатратные процессы в МК, медленее, чем входной поток, то нужен буфер по входу МК. МК может быть самостоятельной единицей, а может быть встроен как узел, как в Клаву, так и в ЗМ, если последние тоже являются предметом собственного конструирования. В этом случае, алгоритм МК может быть увязан с алгоримом этих девайсов. Скажем, совсем незачем анализировать МИДИ поток, если переключение некого режима априори не делается во время игры.
Все вышенаписанное, абстрактно…. ибо «самый быстрый»…. «медленее» и т.п. Пока я понял, что нужен некий тест-контроллер (имхо софтовый), который может выдавать МИДИ сообщения разного характера и периодичностью. Т.е. имитировать кластеры, посыл «сразу» по нескольким каналам, имитация вклинивания RealTime и т.п. А без него, эксперименты бесполезны((((
 

PianoIst

Well-Known Member
19 Май 2010
4.103
4.156
113
29
Kirchberg, kreis Zwickau
soundcloud.com
@Aleksandr Oleynik, увы, не соглашусь... Даже если отставить в сторону тот факт, что ТС говорит про железный вариант, bidule далек от того, что требуется сейчас от миди-примочки. Он, скорее так. контейнер для простого роутинга... Вот тот же JSFX куда как ближе к теме)
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.064
113
62
Киев
@PianoIst, во-первых, я bidule предложил в качестве тест контроллера, зачем же я буду предлагать софт там, где железяка обсуждается.
А во-вторых, в bidule можно сгенерить или преобразовать ЛЮБОЕ Миди сообщение, какой же это простой роутинг?
 

PianoIst

Well-Known Member
19 Май 2010
4.103
4.156
113
29
Kirchberg, kreis Zwickau
soundcloud.com
bidule предложил в качестве тест контроллера
А, дошло, пардон.
сгенерить или преобразовать ЛЮБОЕ Миди сообщение, какой же это простой роутинг?
Также это - как обеспечить деление/зонирование клавиатур, преобразовать Raning Status, сигналы РеалТайм, SysEx... и т.п.
ну вот такого я пытался там наворотить - неа. Тока скрипты :)
 

Gregory

Active Member
17 Май 2005
494
55
28
56
Санкт-Ленинград
www.dubrovenko.ru
А кто может точно сказать, могут ли Реал Таймы в СисЕксы вклиниваться, или нет?
По логике, вроде не должны, но хотелось бы документального подтверждения.
Пока что-то не нашёл.
 

Сейчас онлайн (Пользователей: 0, Гостей: 1)