MIDI (Musical Instrument Digital Interface) é um padrão de transmissão serial de dados, que permite a troca de informações entre instrumentos e equipamentos de aplicação musical.
Os equipamentos que implementam funções MIDI, podem não conter todas as funções previstas pelo padrão, mas aquelas implementadas devem seguir estritamente o que está padronizado.
CONVENÇÕES
A representação de números neste texto segue a seguinte convenção:
- Números representados na base hexadecimal são sempre seguidos de um H, como 34H.Os termos técnicos estão traduzidos, sempre que possível, mas os termos originais, em inglês, foram preservados e são citados, de forma a facilitar a leitura de textos estrangeiros, muito comuns nesta área.
O termo equipamento neste texto significa qualquer dispositivo eletrônico de aplicações musicais: instrumentos musicais, módulos de efeitos sonoros, baterias eletrônicas, seqüenciadores, equipamentos de áudio, etc.
CARACTERÍSTICAS DE HARDWARE
Os equipamentos que implementam o interfaceamento MIDI devem possuir um transmissor ou um receptor, ou ambos, que execute a transmissão/recepção de mensagens no padrão MIDI. Tanto transmissão quanto recepção devem operar à uma taxa de 31.250 bauds (+/- 1%), em modo assíncrono, com um bit de início (start bit), 8 bits de dados(D0 a D7) e um bit de fim (stop bit), perfazendo um total de 10 bits por byte serial, e ocupando um período de 320 micro-segundos.
O hardware do transmissor é composto de um UART (Universal Asynchronous Receiver/Transmitter) para transmissão dos dados seriais, e um acionador (buffer) de saída, capaz de drenar uma corrente de até‚ 5 mA. A saída deve possuir resistores de proteção na eventualidade de curto-circuito entre os terminais. O conector de saída deve ser aterrado ao equipamento.
O hardware do receptor é composto de um acoplador óptico e um UART para recepção dos dados seriais. O acoplador óptico deve ser capaz de chavear com uma corrente menor ou igual a 5 mA no LED, e os tempos de subida e de descida não devem ultrapassar 2 micro-segundos, sendo recomendados os acopladores ópticos PC-900 (Sharp) e 6N138 (HP). O conector de entrada não deve ser aterrado ao equipamento.
Os conectores do equipamento devem ser do tipo DIN de 5 pinos (fêmea)dispostos em 180 graus, e montados em painel. Os conectores devem ser identificados como MIDI IN (entrada), MIDI OUT (saída) e, opcionalmente, MIDI THRU (repetição da entrada). São recomendados conectores Switchcraft 57 GB5F.
A saída opcional MIDI THRU deve prover uma cópia direta dos dados que entram pelo conector MIDI IN, de forma a permitir a ligação de mais de dois equipamentos em cadeia. No caso de cadeias muito longas (mais de três equipamentos), o padrão recomenda a utilização de acopladores ópticos mais rápidos, de forma a evitar que o acúmulo de atrasos de subida e descida no acoplador afetem a largura dos pulsos de sinal. O conector MIDI THRU deve ser aterrado ao equipamento.
O cabo de interligação de equipamentos deve possuir dois condutores e mais a blindagem, e não deve ter um comprimento o maior do que 15 metros(50 p‚s). Os plugs devem ser do tipo DIN (macho) de 5 pinos em 180 graus, com a blindagem conectada ao pino 2 em ambas as extremidades. É recomendado o plug Switchcraft 05 GM5M. O diagrama abaixo apresenta uma sugestão para os circuitos de saída e de entrada, conforme estabelece o padrão.

FORMATAÇÃO DOS DADOS
A comunicação pelo padrão MIDI utiliza, basicamente, mensagens do tipo multi-bytes contendo um Byte de Status (Status Byte) seguido de um ou dois Bytes de Dados (Data Bytes). As exceções à essa regra são as mensagens de Tempo Real e as de Sistema Exclusivo. A seguir, é apresentada a classificação das mensagens MIDI. As mensagens MIDI são classificadas em duas categorias principais, que são as Mensagens de Canal (Channel Messages) e as Mensagens de Sistema(System Messages).
As Mensagens de Canal são identificadas pelos quatro bits mais significativos do Byte de Status. Os quatro bits menos significativos determinam o número do canal de MIDI (1 a 16) em que a mensagem está sendo transmitida. Isso significa que a mensagem é endereçada ao(s)equipamento(s) sintonizado(s) naquele canal.
As Mensagens de Canal são subdivididas em dois tipos: Mensagens de Voz (Voice Messages), que controlam as vozes (geradores de som) do equipamento, e são transmitidas pelo Canal de Voz (Voice Channel); e as Mensagens de Modo (Mode Messages), que definem como o equipamento deve responder à recepção das Mensagens de Voz. As Mensagens de Modo são transmitidas pelo Canal Básico (Basic Channel).
| BYTE DE STATUS | BYTE DE DADOS | DESCRIÇÃO |
| $1000nnnn | $0kkkkkkk $0vvvvvvv |
Nota Desativada (Note Off) $0vvvvvvv = veloc. que a tecla é solta |
| $1001nnnn | $0kkkkkkk $0vvvvvvv |
Nota Ativada (Note On) $0vvvvvvv = veloc. que a tecla é abaixada $0vvvvvvv = 0 --> Nota Desativada |
| $1010nnnn | $0kkkkkkk $0vvvvvvv |
Pressão na Tecla (Polyph. Aftertouch) $0vvvvvvv = valor da pressão |
| $1011nnnn | $0ccccccc $0vvvvvvv |
Controle (Control Change) $0ccccccc = número do controle (0 a 121) $0vvvvvvv = valor do controle $0ccccccc = 122 a 127: vide Tabela 3 |
| $1100nnnn |
$0ppppppp |
Mudança de Programa (Program Change) $0ppppppp = número do programa (0 a 127) |
| $1101nnnn | $0vvvvvvv |
Pressão no Teclado (Channel Aftertouch) $0vvvvvvv = valor da pressão |
| $1110nnnn | $0ggggggg $0hhhhhhh |
Variação do Pitch Bend (Pitch Bend Change) Primeiro byte de dados é a parte menos significativa (LSB), e o segundo byte de dados é a parte mais significativa (MSB) (Vide Nota 10) |
NOTAS:
1) $nnnn = N-1, onde N é o número do canal, ou seja, $0000 é Canal 1, $0001 é Canal 2, ..., $1111 é Canal 16.
2) $kkkkkkk = número da tecla (nota), que vai de 0 a 127. A nota de número 60 corresponde ao Dó central do teclado.
3) $vvvvvvv = velocidade com que a tecla foi pressionada. A faixa de valores possíveis de velocidade deve obedecer à uma escala logarítmica, do tipo abaixo:
$vvvvvvv=64, caso o teclado não tenha sensibilidade à velocidade.
Nota Ativada com vel=0 significa Nota Desativada com vel=64.
| BYTE DE STATUS | BYTE DE DADOS | DESCRIÇÃO |
| $1011nnnn | $01111010 $0vvvvvv | Controle Local (Local Control) $0vvvvvvv=0: desliga Controle Local $0vvvvvvv=127: liga Controle Local |
| $1011nnnn |
$01111011 $00000000 |
Solta Todas as Teclas (All Notes Off) |
| $1011nnnn |
$01111100 $00000000 |
Desativa Modo Omni (Omni Off) (e solta todas as teclas) |
| $1011nnnn |
$01111101 $00000000 |
Ativa Modo Omni (Omni On) (e solta todas as teclas) |
| $1011nnnn |
$01111110 $0vvvvvvv |
Ativa Modo Monofonico (Mono Mode) (e solta todas as teclas) $0vvvvvv é o número de canais $0vvvvvv=0:o número de canais é igual ao número de vozes do receptor. |
| $1011nnnn |
$01111111 $00000000 |
Ativa Modo Polifonico (Poly Mode) (e solta todas as teclas) |
NOTAS:
1) $nnnn = N-1, onde N é o número do canal, ou seja, $0000 é Canal1, $0001 é Canal 2, ..., $1111 é Canal 16..| NÚMERO | DESCRIÇÃO DO CONTROLE |
| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - 15 16 - 19 20 - 31 32 - 63 64 65 66 67 68 69 70 71 72 73 74 75 - 79 80 - 83 84 85 - 90 91 92 93 94 95 96 97 98 99 100 101 102 - 119 120 - 127 |
Seleção de Banco de Programas - MSB (Bank Select) Roda/Alavanca de Modulação - MSB (Modulation Wheel) Controle por Sopro - MSB (Breath Controller) Não definido Pedal MSB (Foot Controller) Tempo do Portamento - MSB (Portamento Time) Entrada de Dados - MSB (Data Entry) Volume Principal - MSB (Main Volume) Equilíbrio - MSB (Balance) Não definido Pan - MSB (Pan) Controle de Expressão - MSB (Expression Controller) Effect Control 1 Effect Control 2 Não definidos Controles de uso Geral 1 a 4 - MSB (General Purpose) Não definidos LSB dos Controles 1 a 31 Pedal de Sustain (Sustain/Damper Pedal) Liga/Desliga Portamento (Portamento On/Off) Pedal de Sostenuto (Sostenuto Pedal) Pedal Abafador (Soft Pedal) Pedal de Legato Pedal de Sustain 2 (Hold 2) Controle de som 1 (Sound Variation) Controle de som 2 (Timbre/Harmonic Content) Controle de som 3 (Release Time) Controle de som 4 (Attack Time) Controle de som 5 (Brightness) Controles de som 6 - 10 (ainda não determinados) Controles de Uso Geral 5 a 8 (General Purpose) Controle de portamento Não definidos Intensidade do Reverb (Ext. Effect Depth) Profundidade do Tremolo (Tremolo Depth) Profundidade do Chorus (Chorus Depth) Profundidade do Batimento (Celeste Detune Depth) Profundidade do Phaser (Phaser Depth) Incremento (Data Increment) Decremento (Data Decrement) Número de Parâmetro - LSB (Parameter Number) Número de Parâmetro - MSB (Parameter Number) Número de Parâmetro - LSB (Parameter Number) Número de Parâmetro - MSB (Parameter Number) Não definidos Reservados para as Mensagens de Modo (vide Tabela 2) |
NOTAS:
1) Os controles 0 a 63 são do tipo controle contínuo, e podem assumir valores de até 14 bits. Os controles 64 a 95 são chaves do tipo liga/desliga.
2) Os fabricantes podem alocar novos controles aos números não definidos, desde que forneçam as informações pertinentes, no manual de operação do equipamento.
3) Os controles contínuos são divididos em Bytes Mais significativos(MSB) e Bytes Menos Significativos (LSB). Caso o valor do controle não ultrapasse sete bits, apenas o MSB é transmitido. Caso haja necessidade de representar o valor com maior resolução do que sete bits, são enviados os Bytes MSB e LSB, nessa ordem. Se o valor do controle foi alterado apenas na parte LSB, pode ser transmitido apenas o Byte LSB, sem o envio do MSB.
4) Nos controles do tipo chave liga/desliga, o valor $vvvvvvv = 0 significa desligado (off), enquanto $vvvvvvv = 127 significa ligado (on). Valores de 1 a 126, inclusive, devem ser ignorados.
As Mensagens de Sistema não utilizam canal de MIDI, e são subdivididas em três tipos:
Mensagens Comuns (System Common Messages), que são comuns a todos os equipamentos de uma cadeia;
| BYTE DE STATUS | BYTE DE DADOS | DESCRIÇÃO |
| $11110001 | $0nnndddd | Reservada para MIDI Time Code (MTC) |
| $11110010 |
$0ggggggg $0hhhhhhh |
Ponteiro de Seq. (Song Position Pointer) $0ggggggg=parte menos significativa (LSB) $0hhhhhh=parte mais significativa (MSB) |
| $11110011 |
$0sssssss |
Seletor de Seqüência (Song Select) $0sssssss=número da seqüência |
| $11110100 | - | Não definido |
| $11110101 | - | Não definido |
| $11110110 | - | Requisita Afinação (Tune Request) |
| $11110111 | - | Fim de Mensagem Exclusiva |
NOTAS:
1) O Ponteiro de Seqüência (Song Position Pointer) é um registro interno que mantém o número de tempos (beats) MIDI desde o início da música (1 tempo MIDI é igual a 6 clocks MIDI). Normalmente ele‚ ajustado para zero, no momento em que o botão de INICIAR (START)‚ pressionado, dando início à execução da seqüência. O ponteiro então é incrementado a cada seis clocks MIDI, até que seja pressionada a tecla PARAR (STOP). Se a tecla CONTINUAR é pressionada, o ponteiro continua a ser incrementado de onde havia parado. O termo seqüência refere-se a qualquer grupo de notas armazenados com seus devidos tempos de ocorrência e de duração. Inclusive seqüências de bateria eletrônica.
2) Seleção de Seqüência (Song Select) especifica qual a seqüência (música) a ser executada quando da ocorrência de uma mensagem de INICIAR.
3) EOX é usado como marca de fim de transmissão de Mensagem Exclusiva.
Mensagens de Tempo Real (System Real-Time Messages), que também são comuns a todos os equipamentos de uma cadeia. Essas mensagens só possuem Byte de Status (nenhum Byte de Dados), e podem ser enviadas a qualquer momento, mesmo entre bytes de uma mensagem com outro Byte de Status. Nesse caso, a Mensagem de Tempo Real deve ser tratada (ou ignorada, se o equipamento não implementar funções de Tempo Real), sem prejuízo da mensagem dentro da qual ela foi inserida;
| BYTE DE STATUS | BYTE DE DADOS | DESCRIÇÃO |
| $11111000 | - | Clock de MIDI (Timing Clock) |
| $11111001 | - | Não definido |
| $11111010 | - | Iniciar (Start) |
| $11111011 | - | Continuar (Continue) |
| $11111100 | - | Parar (Stop) |
| $11111101 | - | Não definido |
| $11111110 | - | Sensor de Atividade (Active Sensing) |
| $11111111 | - | Reset (Reset) |
NOTAS:
1) As Mensagens em Tempo Real tem por finalidade sincronizar todos os equipamentos de um sistema operando em tempo real.
2) O padrão permite que elas possam ser enviadas em qualquer momento, mesmo inseridas entre bytes de outras mensagens.
3) O Clock de MIDI o sistema sincronizar-se. Os clocks de MIDI enviados sempre à razão de 24 clocks por semínima.
4) A mensagem de Início (Start) é enviada imediatamente após a tecla de Início ter sido pressionada no equipamento (sequenciador, bateria eletrônica, etc).
5) A mensagem de Sensor Ativo (Active Sensing) é opcional, tanto para transmissores quanto para receptores. O padrão recomenda que essa mensagem seja enviada a cada 300 milisegundos, no máximo, caso não tenha havido o envio de qualquer outra mensagem nesse intervalo de tempo. O receptor ignorar tal mensagem até que receba a primeira, quando então, passar a esperá-la quando não houver recepção de qualquer mensagem MIDI dentro de um intervalo de 300 ms. Passados os 300 ms sem qualquer mensagem nem mensagem de Sensor Ativo, o receptor apagar todas as vozes (all notes off) e retornar à operação normal. Os equipamentos que não implementam Sensor Ativo devem ignorar estas mensagens.
6) A mensagem de Reset serve para Inicializar o sistema, e não deve ser enviada automaticamente, ao ser ligado o instrumento.
As Mensagens Exclusivas devem incluir em seus Bytes de Dados um Código de Identificação do Fabricante (ID code). Caso o equipamento receptor não reconheça o Código de Identificação, dever ignorar os Bytes de Dados até o fim da mensagem.
O padrão recomenda que os fabricantes divulguem a documentação das suas Mensagens Exclusivas, de forma a permitir que os usuários possam acessar plenamente os equipamentos via MIDI.
| BYTE DE STATUS | BYTE DE DADOS | DESCRIÇÃO |
| $11110000 |
$0zzzzzzz : : |
Transferência de Dados (Bulk Dump) $0zzzzzzz=identificação Pode ser inserido aqui qualquer número de bytes, para qualquer propósito, desde que tenham sempre o bit mais significativo igual a zero. |
| $11110111 | - | Fim de Mensagem Exclusiva (EOX) |
NOTAS:
1) Nenhum Byte de Status ou de Dados deve ser inserido no meio de uma Mensagem Exclusiva, exceto Mensagens de Tempo Real.
2) A Mensagem Exclusiva termina com um EOX ou qualquer outro Byte de Status.
Existem dois tipos de bytes nas mensagens MIDI: os Bytes de Status (Status Bytes) e os Bytes de Dados (Data Bytes).
| BYTE DE STATUS | QUANTIDADE DE BYTES DE DADOS | DESCRIÇÃO |
$1000nnnn $1001nnnn $1010nnnn $1011nnnn $1100nnnn $1101nnnn $1110nnnn |
2 2 2 2 1 1 2 |
MENSAGENS DE VOZ (Channel Voice) Nota Desativada (Note Off) Nota Ativada (Note On) Pressão na Tecla (Polyph. Aftertouch) Controle (Control Change) Mudança de Programa (Program Change) Pressão no Teclado (Channel Aftertouch) Variação do Pitchbend (Pitchbend Change) |
$1011nnnn | 2 | MENSAGENS DE MODO (Channel Mode) Seleciona o Modo de Operação |
$11110000 $11110sss $11111ttt | ***** 0 a 2 0 |
MENSAGENS DE SISTEMA (System Messages) Exclusiva (System Exclusive) Comum (System Common) Tempo-Real (System Real Time) |
NOTAS:
No caso específico das Mensagens de Voz e de Modo, quando um Byte de Status é recebido e processado, o equipamento receptor deve armazenar aquele Status até que um novo Byte de Status seja recebido. O padrão determina que, se um transmissor tiver que transmitir uma nova mensagem cujo Byte de Status é idêntico ao último transmitido, ele pode (opcionalmente) omiti-lo, transmitindo apenas os Bytes de Dados seguintes.
O Byte de Status omitido, nesse caso, é considerado como Status Corrente (Running Status). O receptor deve ser capaz de interpretar a transmissão com ou sem Status Corrente. A vantagem desse artifício é que no caso de grande quantidade de mensagens de mesmo Status (como por exemplo, uma série de teclas pressionadas), onde as mensagens ficam menores. O Status Corrente é interrompido sempre que chegar outro Byte de Status, exceto se for um Byte de Status de uma Mensagem de Sistema em Tempo Real, como já foi explicado anteriormente.
O equipamento receptor deve ignorar os Bytes de Status (e respectivos Bytes de Dados, se houver) que identifiquem funções não implementadas por ele.
Os instrumentos musicais eletrônicos (sintetizadores, samplers, órgãos eletrônicos, etc) possuem dispositivos internos (hardware ou software) responsáveis pela geração das notas (sons). Esses dispositivos, chamados de vozes (voices), são em número limitado (em geral 8, 16 ou 32), e determinam a polifonia do instrumento.
Quando uma tecla é pressionada no teclado do instrumento, o processador interno do mesmo verifica se há alguma voz disponível, isto é, se o instrumento já está tocando o número máximo de notas possível. Se não está ele aloca uma voz disponível à nota correspondente à Nota Ativada. À medida que as teclas são soltas, as vozes vão ficando livres (disponíveis) para serem ocupadas por novas notas. Caso todas as vozes estejam ocupadas, o processador decide, através de um algoritmo predeterminado, como tocar a nota nova. Em geral a voz que está tocando a nota mais antiga passa a ser ocupada pela nova nota, mas pode-se encontrar instrumentos que adotem procedimento diferente.
Dentro do padrão definido na MIDI Specification 1.0, há quatro modos possíveis de se operar as vozes de um instrumento, conforme mostram as a seguir.
| MODO | OPERAÇÃO |
| Omni On / Poly | O instrumento processa todas as Mensagens de Voz, independente dos Canais de Voz em que elas estão sendo transmitidas, e responde a elas polifonicamente. |
| Omni On / Mono | O instrumento processa todas as Mensagens de Voz, independente dos Canais de Voz em que elas estão sendo transmitidas, e responde a elas monofonicamente. |
| Omni Off / Poly | O instrumento só processa as Mensagens de Voz que estão sendo enviadas no Canal de Voz "N", e responde a elas polifonicamente. |
| Omni Off / Mono | O instrumento só processa as Mensagens de Voz que estão sendo enviadas nos Canais de Voz "N" a "N+M-1", e responde a elas monofonicamente, alocando-as à s vozes 1 a "M", respectivamente. O número de vozes "M" é definido no terceiro byte da Mensagem de Modo. |
| MODO | OPERAÇÃO |
| Omni On / Poly | O instrumento transmite todas as Mensagens de Voz através do Canal de Voz "N" |
| Omni On / Mono | O instrumento transmite todas as Mensagens de Voz, para uma voz, através do Canal de Voz "N" |
| Omni Off / Poly | O instrumento transmite todas as Mensagens de Voz, para todas as vozes, através do Canal de Voz "N". |
| Omni Off / Mono | O instrumento transmite as Mensagens de Voz das vozes 1 a "M" através dos Canais de Voz "N" a "N+M-1", respectivamente (uma voz por canal). |
Um instrumento só pode operar em um único Modo de cada vez, e é recomendado que tanto transmissor quanto receptor(es) estejam operando no mesmo Modo. Caso um instrumento não possa operar no Modo requisitado, ele deve ignorar o comando de mudança de Modo de Operação, ou então utilizar um outro Modo alternativo (normalmente Modo 1).
As Mensagens de Modo só devem ser reconhecidas pelo receptor quando enviadas através do Canal Básico no qual ele está sintonizado, independentemente do seu Modo de Operação corrente. As Mensagens de Voz devem ser recebidas através dos Canais de Voz, conforme estabelecem as Tabelas 8 e 9, dependendo do Modo selecionado. O padrão permite, ainda, que um instrumento seja sintonizado em um ou mais Canais Básicos, por default ou por ação do usuário. Nesse caso, o instrumento se comporta como se fossem vários instrumentos independentes.
CONDIÇÕES INICIAIS
O padrão determina que o instrumento, ao ser ligado, adote as condições iniciais (default) de: Modo 1 de operação, recepção desabilitada de todas as Mensagens de Voz, exceto de Nota Ativada/Nota Desativada (Note On/Note Off) e supressão de quaisquer transmissões espúrias indefinidas.
OBSERVAÇÃO IMPORTANTE:
À época em que foi escrita MIDI Specification 1.0, o Modo 4 era esperado para transmissão/recepção de informações monofônicas através dos canais diferentes de MIDI, em um mesmo instrumento.
Posteriormente, os instrumentos multitimbrais passaram a operar de uma forma não definida em qualquer dos quatro modos, pois podem receber, simultaneamente, mensagens em vários canais diferentes com informações para execução polifônica em cada um desses canais, que são alocadas a uma ou mais vozes por canal. Esse quinto modo tem sido referenciado por muitos fabricantes como Modo Multi.
| Código | Fabricante | Código | Fabricante |
| 00-00-14 01H 02H 03H 04H 05H 06H 07H 08H 0AH 0BH 0CH 0DH 0EH 0FH 10H 11H 12H 14H 15H 16H 17H 18H 19H 1AH 1BH 1CH 1DH 1FH |
Perfect Fretwork Sequential Circuits IDP Voyetra/OctavePlateau Moog Passport Designs Lexicon Kurzwei Fender AKG Acoustics Voyce Music Waveframe Corp. ADA Garfield Electronics Ensoniq Oberheim Apple Computer Grey Matter Response Palm Tree Instr. JL Cooper Lowrey Adams-Smith E-Mu Systems Harmony Systems ART Baldwin Eventide Inventronics Clarity |
21H 22H 23H 24H 25H 26H 27H 28H 29H 2AH 2BH 2CH 2FH 30H 40H 41H 42H 43H 44H 46H 47H 48H 49H 7DH 7EH 7FH |
SIEL Synthaxe Stepp _ Hohner Twister Solton Jellinghaus MS Southworth Music PPG JEN SSL Audio Veritrieb Elka Dynacord Kawai Roland Korg Yamaha Casio Kamyia Studio Akai Japan Victor Mesosha Uso Não Comercial Não Tempo-Real Tempo-Real |
Este artigo foi publicado no music-center.com.br em 1996