Arquitetura MIDI

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

Principais conceitos

Eventos

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

Transporte

As mensagens MIDI são codificadas e enviadas por uma camada de transporte, abreviada como transporte, que envia os dados MIDI brutos ao destinatário, que decodifica os dados em mensagens.

Os transportes MIDI baseados em hardware incluem:

  • Loop de corrente MIDI 1.0 com conector DIN de 5 pinos
  • USB
  • Bluetooth de baixa energia (BLE)

Representação de mensagens

Uma especificação de transporte MIDI descreve como transmitir mensagens. Embora o empacotamento de mensagens seja específico do transporte no nível mais baixo, em um nível mais alto, os aplicativos podem considerar uma sequência ordenada por tempo de mensagens 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 (de um a três bytes), mas é possível enviar mensagens mais longas usando SysEx.

Carimbos de data/hora

Um carimbo de data/hora é um rótulo opcional anexado a uma mensagem na origem ou no recebimento, dependendo do transporte. O carimbo de data/hora é expresso em unidades de tempo, como segundos ou ticks.

Na ausência de um carimbo de data/hora explícito, o sistema precisa substituir o carimbo de data/hora da mensagem imediatamente anterior ou o tempo atual. A precisão desses carimbos de data/hora, explícitos ou implícitos, é um aspecto importante da confiabilidade de um sistema baseado em MIDI.

Os carimbos de data/hora não fazem parte do protocolo MIDI 1.0. Elas geralmente são adicionadas como parte de uma API específica da plataforma. O transporte BLE tem carimbos de data/hora para indicar o tempo das várias mensagens individuais enviadas em um pacote BLE.

Dispositivos

Um periférico oferece recursos de entrada/saída (E/S) para um computador. Os termos periférico MIDI e dispositivo MIDI geralmente se referem a qualquer módulo de hardware ou software que ofereça suporte ao protocolo MIDI. Neste documento, periférico MIDI se refere à entidade física, e dispositivo MIDI descreve o módulo que 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 cinco pinos como porta. Cada porta é OUT (origem de dados MIDI), IN (saída para dados MIDI) ou THRU, que significa uma IN roteada diretamente para uma OUT.

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

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

O dispositivo MIDI fornece streams de mensagens originadas em cada porta OUT e recebe streams de mensagens que chegam em cada porta IN. Os termos IN e OUT são relativos a uma porta. Na perspectiva da outra porta, o termo reverso 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 acontece 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 feixe físico de fios que conecta uma porta OUT a uma porta IN ou THRU. O cabo transmite apenas dados.

Observação:há modificações não padrão no MIDI que fornecem energia para os dois pinos não utilizados. Isso é chamado de fantasma.

Um cabo USB é semelhante, exceto que há uma grande variedade de tipos de conector, e o conceito IN/OUT/THRU é substituído pela função host/periferal.

Quando opera no modo de host USB, o dispositivo host fornece energia ao periférico MIDI. A maioria dos pequenos periféricos MIDI usa uma carga de unidade USB (100 mA) ou menos. No entanto, alguns periféricos maiores ou com saída de áudio ou luzes exigem 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 stream 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 1 a 16, mas são representados por valores de canal de zero a 15.

Se o aplicativo precisar de mais de 16 canais ou de uma capacidade maior do que um fluxo de mensagens pode oferecer, várias portas precisam ser usadas.

No MIDI 1.0, isso é feito com vários cabos que conectam pares de portas.

No transporte MIDI por USB, um único endpoint USB pode oferecer suporte a 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 no endpoint.

Observação:número de porta seria 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

Como observado na introdução, esses conceitos MIDI genéricos se aplicam a todas as implementações. Para a interpretação dos conceitos na plataforma Android, consulte o Guia do usuário do Android MIDI para android.media.midi.