Arquitetura MIDI

Este artigo descreve a arquitetura MIDI genérica, independente de qualquer implementação de plataforma, API ou recursos específicos da plataforma.

Conceitos chave

Eventos

O protocolo MIDI é projetado para comunicação baseada em eventos. Um evento é uma indicação de que algo aconteceu ou acontecerá em um determinado momento. Os eventos MIDI são representados por mensagens , pacotes atômicos de informações.

Transporte

As mensagens MIDI são codificadas e entregues por meio de uma camada de transporte , abreviada como transport , que envia os dados MIDI brutos para o destinatário, que então decodifica os dados em mensagens.

Os transportes MIDI baseados em hardware incluem:

Representação da mensagem

Uma especificação de transporte MIDI descreve como transmitir mensagens. Embora o empacotamento de mensagens seja específico de transporte no nível mais baixo, em um nível mais alto os aplicativos podem considerar uma sequência de mensagens ordenada por tempo como um fluxo de bytes demarcado. Isso é possível porque cada mensagem contém informações suficientes para determinar o comprimento total da mensagem, desde que o início do limite da mensagem seja conhecido.

A maioria das mensagens MIDI são curtas (um a três bytes), mas existe a capacidade de mensagens mais longas via SysEx .

Carimbos de data e hora

Um carimbo de data/hora é uma etiqueta opcional anexada a uma mensagem na origem ou no recebimento, dependendo do transporte. O carimbo de data/hora é expresso em unidades de tempo, como segundos ou tiques .

Na ausência de um timestamp explícito, o sistema deve substituir o timestamp da mensagem imediatamente anterior ou a hora atual. A precisão desses timestamps, sejam eles explícitos ou implícitos, é um aspecto importante da confiabilidade de um sistema baseado em MIDI.

Timestamps não fazem parte do protocolo MIDI 1.0. Eles geralmente são adicionados como parte de uma API específica da plataforma. O transporte BLE tem timestamps para indicar o tempo das múltiplas mensagens individuais enviadas dentro de um pacote BLE.

Dispositivos

Um periférico fornece capacidade de entrada/saída (E/S) para um computador. Os termos periféricos MIDI e dispositivo MIDI geralmente se referem a qualquer módulo de hardware ou software que suporte o protocolo MIDI. Neste documento, periférico MIDI refere-se à entidade física e dispositivo MIDI descreve o módulo que realmente implementa o MIDI.

Portas

Uma porta é um ponto de interface entre computadores e periféricos.

O MIDI 1.0 usa um soquete DIN fêmea de 5 pinos como porta. Cada porta é OUT (fonte de dados MIDI), IN (sink para dados MIDI) ou THRU (significando um IN que é roteado diretamente para um OUT ).

Outros transportes como USB e BLE estendem o conceito de porta .

Um dispositivo MIDI tem pelo menos uma porta OUT , uma porta IN ou ambas.

O dispositivo MIDI fornece fluxo(s) de mensagens originadas em cada porta OUT e recebe fluxo(s) de mensagens que chegam em cada porta IN . Os termos IN e OUT são, obviamente, relativos a uma porta; da perspectiva da outra porta, o termo inverso se aplica.

Conexão

No transporte MIDI 1.0, uma porta OUT se conecta a no máximo uma porta IN ou THRU devido à natureza do loop atual. Nos transportes USB e BLE, o mesmo ocorre na camada mais baixa, embora uma implementação possa recondicionar o fluxo de mensagens para que ele possa ser transmitido para várias portas IN .

Cabos

Um cabo MIDI 1.0 é o pacote físico de fios que conecta uma porta OUT a uma porta IN ou THRU . O cabo transporta apenas dados.

Nota: Existem modificações não padronizadas no MIDI que fornecem energia sobre os dois pinos não utilizados. Isso é chamado de alimentação fantasma .

Um cabo USB é semelhante, exceto que há uma grande variedade de tipos de conectores, e o conceito IN / OUT / THRU é substituído pelo papel de host/periférico.

Ao operar no modo host USB, o dispositivo host fornece energia ao periférico MIDI. A maioria dos pequenos periféricos MIDI aceita uma carga de unidade USB (100 mA) ou menos. No entanto, alguns periféricos maiores, ou periféricos com saída de áudio ou luzes, requerem mais energia do que o dispositivo host pode fornecer. Se você tiver problemas, tente outro periférico MIDI ou um hub USB alimentado.

Canal

Cada fluxo de mensagem MIDI é multiplexado entre 16 canais . A maioria das mensagens é direcionada a um canal específico, mas há tipos de mensagem que não são específicos do canal. Convencionalmente, os canais são numerados de um a 16, embora representados por valores de canal de zero a 15.

Se o aplicativo precisar de mais de 16 canais ou uma taxa de transferência maior do que um fluxo de mensagens pode suportar, várias portas devem ser usadas.

No MIDI 1.0, isso é feito por vários cabos conectando pares de portas.

No transporte MIDI sobre USB, um único terminal USB pode suportar várias portas, cada uma identificada por um número de cabo [sic]. De acordo com a especificação USB MIDI, o número do cabo identifica a porta virtual dentro do terminal.

Nota: o número da porta teria sido um termo mais preciso, já que identifica uma porta.

Assim, um único cabo físico USB pode transportar mais de um conjunto de 16 canais.

Implementação da plataforma

Conforme observado na introdução, esses conceitos genéricos de MIDI se aplicam a todas as implementações. Para a interpretação dos conceitos na plataforma Android, consulte o Android MIDI User Guide for android.media.midi .