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 foi projetado para comunicação baseada em eventos. Um evento é uma indicação de que algo aconteceu ou acontecerá em um horário específico. 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 transporte , que envia os dados MIDI brutos ao destinatário, que então 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 mensagem

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 de mensagens ordenada no tempo como um fluxo de bytes demarcado. Isto é 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 para 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 ticks .

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

Os carimbos de data e hora não fazem parte do protocolo MIDI 1.0. Freqüentemente, eles são adicionados como parte de uma API específica da plataforma. O transporte BLE possui carimbos de data/hora 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érico 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 MIDI.

Portas

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

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

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

Um dispositivo MIDI possui 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, aplica-se o termo inverso.

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 múltiplas 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 transporta apenas dados.

Nota: Existem modificações não padrão no MIDI que fornecem energia aos dois pinos não utilizados. Isso é chamado de poder fantasma .

Um cabo USB é semelhante, exceto que há uma grande variedade de tipos de conectores e o conceito IN / OUT / THRU é substituído pela função 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 carrega uma 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 tiver problemas, tente outro periférico MIDI ou um hub USB alimentado.

Canal

Cada fluxo de mensagens MIDI é multiplexado em 16 canais . A maioria das mensagens é direcionada a um canal específico, mas existem tipos de mensagens 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 de um rendimento superior ao que um fluxo de mensagens pode suportar, diversas portas deverão ser usadas.

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

No transporte MIDI sobre USB, um único endpoint USB pode suportar múltiplas 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.

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

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

Implementação de 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 para android.media.midi .