Сплиттеры, сумматоры и прочие преобразователи МИДИ

Различная музыкальная электроника

Модератор: Модераторы

dim3740
Пользователь
Сообщения: 192
Зарегистрирован: 02 янв 2016, 10:00
Местоположение: Уфа

Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение dim3740 » 08 окт 2016, 06:18

Т.е. Merger, Thru, Event…
Типичные представители:
http://www.midisolutions.com/products.htm
http://www.kentonuk.com/
Если разветвитель
http://i-fotki.info/20/3e69f0e63f308be0 ... 6.gif.html
может быть выполнен на дискретной логике, то большинство остальных преобразователей требуют применения программного кода. Это обусловлено тем, что просто «гальванически» соединить 2 источника МИДИ сообщений в 1 (по схеме 2-1) не получится. Сообщения идут пакетами до 3-х байт, и могут вклиниваться друг в друга, нарушая МИДИ протокол. Даже схема 1-1 может работать НЕ надежно (по крайней мере, теоретически) при коде UDR вых = UDR вх. В этом случае, хотя команды и принимаются по-байтно через прерывание и, вроде бы, сразу отправляются на выходной порт, но и микроконтроллер может «уйти» на обработку прерывания более высокого уровня, а за это время музыкант сыграет следующую ноту или крутанет дальше ручку контроллера. Применение алгоритмов буферизации решает это проблему. Вывод буфера осуществляется, когда входной МИДИ поток «менее насыщен», а в условиях неравномерности следования нот во времени, это всегда имеет место.
Частным случаем схемы 2-1 является построение МИДИ контроллеров (задача широко распространена в Инете), но с дополнительным МИДИ входом, скажем, для приема МИДИ сообщений от внешнего клавишного синтезатора. На таком МИДИ контроллере может осуществляться как формирование команд управления контроллами, так и распознавание, обработка и принятие решений по дальнейшей передачи МИДИ сообщений от подключенной клавиатуры. Например, так делается маппинг, т.е. зонирование диапазона. Определяется код ноты, и если она попадает в заданный диапазон, то, пропускается, но МИДИ канал принудительно устанавливается другим. Я широко использую данный подход для назначения конкретным клавишам управляющих функций, типа смена пресетов и т.п.
Еще более сложным являются алгоритмы при Real Time и Running Status.
Мне было бы интересно поговорить об алгоритмах распознавания/преобразования МИДИ сообщений, не снижающих надежность устройства. В сети материалов не видел. Делал все "методом тыка", и сбои все же бывают :cry:

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение Dmitry Dubrovenko » 09 окт 2016, 01:06

Начало прямо на статью походит. :roll:

dim3740 писал(а):Применение алгоритмов буферизации решает это проблему
Эту проблему решает грамотная расстановка приоритетов прерываний, т.е. продуманный алгоритм работы (а буфер, это - само собой разумеющееся). :-)

dim3740 писал(а):В сети материалов не видел
Тут лежит документ под названием "MIDI 1.0 Detailed Specification", там есть полная раскладка рекомендуемого алгоритма.
Подпись

dim3740
Пользователь
Сообщения: 192
Зарегистрирован: 02 янв 2016, 10:00
Местоположение: Уфа

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение dim3740 » 09 окт 2016, 06:13

Dmitry Dubrovenko писал(а):Эту проблему решает грамотная расстановка приоритетов прерываний

Естественно, это в первую очередь. Хотя и плохая буферизация, и пропускная способность, и фронты сигналов - все может привести к ошибкам... Это первый класс :-)
За статью- спасибо, никогда не читал ее. Изучим... Пока бегло просмотрел, алгоритм с Running Status впечатлил, значит и более простые вещи там найду.

dim3740
Пользователь
Сообщения: 192
Зарегистрирован: 02 янв 2016, 10:00
Местоположение: Уфа

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение dim3740 » 09 дек 2016, 08:50

Для смешивания сообщений 2-х МИДИ источников можно брать МК с 2-я UART и настраивать каждый на 31250. Далее, организовать программный буфер по каждому входу, и один из Uart использовать как выходной. Но что делать, если нужно более 2-х источников? Как вариант: ставить отдельный МК на каждый, и еще один на выход. Делать запросы на прерывание по наличию инфы в буферах каждого. Причем, программировать придется каждый отдельно. Есть иные способы?

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение Dmitry Dubrovenko » 09 дек 2016, 18:28

dim3740 писал(а):один из Uart использовать как выходной
Что-то недопонял, это как?
А если в этот момент на него что-нибудь придёт?

dim3740 писал(а):Есть иные способы?
Сейчас вполне есть МК у которых больше, чем два УАРТа.
Или ещё вариант, софтовая реализация (тут нужна высокая производительность).
Подпись

dim3740
Пользователь
Сообщения: 192
Зарегистрирован: 02 янв 2016, 10:00
Местоположение: Уфа

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение dim3740 » 10 дек 2016, 17:41

Dmitry Dubrovenko писал(а):А если в этот момент на него что-нибудь придёт?

Я всегда думал, что RX и TX назависимы(( может поэтому у меня и проскакивают ошибки в МИДИ... Т.е. есть 2 Rx1 и Rx2 - это приемники, и любой из TX использую как выходной. Даже хотелось бы оставшийся TX завязать как выход на компьютер по COM, но к сожалению 31250 общая, и это не стандарт для компа... Итак, вы полагаете как у меня делать нельзя?

За МК с несколькими Uart спасибо. Расширил кругозор)))

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение Dmitry Dubrovenko » 11 дек 2016, 02:55

dim3740 писал(а):Я всегда думал, что RX и TX назависимы
А, вот Вы о чём. :-)
Тогда, да, так можно использовать, для матрицы 2x2.
Подпись

Ю.Соколовский
Пользователь
Сообщения: 50
Зарегистрирован: 10 янв 2017, 21:57
Местоположение: Саратов

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение Ю.Соколовский » 06 фев 2017, 19:43

ucapps.de не спасет отца русской демократии?
Например, http://ucapps.de/midimerger.html

dim3740
Пользователь
Сообщения: 192
Зарегистрирован: 02 янв 2016, 10:00
Местоположение: Уфа

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение dim3740 » 07 фев 2017, 13:54

Ох, пополняется багаж интересных ссылок! Спасибо! Надо PIC начинать осваивать))))

dim3740
Пользователь
Сообщения: 192
Зарегистрирован: 02 янв 2016, 10:00
Местоположение: Уфа

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение dim3740 » 27 фев 2017, 20:19

В качестве МИДИ сплиттера для IPAD можно использовать простой HUB. Все источники, что в него воткнутся - смешаются по МИДИ. Специального ничего городить не надо))

Аватара пользователя
Dmitry Dubrovenko
Администратор
Сообщения: 2017
Зарегистрирован: 12 окт 2014, 20:20
Местоположение: Санкт-Ленинград
Контактная информация:

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение Dmitry Dubrovenko » 27 фев 2017, 22:47

dim3740 писал(а):Все источники, что в него воткнутся - смешаются по МИДИ
А сплитер-то наоборот, один источник на несколько выходов пускает. :-)
Подпись

dim3740
Пользователь
Сообщения: 192
Зарегистрирован: 02 янв 2016, 10:00
Местоположение: Уфа

Re: Сплиттеры, сумматоры и прочие преобразователи МИДИ

Сообщение dim3740 » 28 фев 2017, 10:49

Ох... точно):))


Вернуться в «Музыкальная электроника»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей

cron