Т.е. 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.
Мне было бы интересно поговорить об алгоритмах распознавания/преобразования МИДИ сообщений, не снижающих надежность устройства. В сети материалов не видел. Делал все "методом тыка", и сбои все же бывают