MIDI - ao nível quântico
Daqui para frente, vamos ver como as máquinas entendem todas estas mensagens, isto é, vamos ver como são os bytes enviados e recebidos pelo protocolo. Isso será útil em algumas situações, especialmente quando se dominar razoavelmente o funcionamento ‘macroscópico’ do padrão.
Veja a tabela abaixo. Na terceira coluna estão todos os comandos MIDI existentes. A quarta coluna mostra quantos bytes compõem cada comando (cada < > representa um byte).
CHANNEL | Voice | Note On | <Note On><Key Number> <Velocity> |
Note Off | <Note Off><Key Number> <Velocity> | ||
Poly Key Pressure | <PolyKeyPress><Key Number> <Pres Value> | ||
Channel Pressure | <Chanel Pres> <Value> | ||
Program Change | <Prog Change> <Prog Number> | ||
Control Change | <ControlChange> <Control#><Contr.Val> | ||
Pitch Bend Change | <Pitch Wheel Change> <LSB><MSB> | ||
Mode | Local Control | <Control Change> <122><0/127>(off/on) | |
All Notes Off | <Control Change> <123><0> | ||
Omni Mode Off | <Control Change> <124><0> | ||
Omni Mode On | <Control Change> <125><0> | ||
Mono Mode On | <Control Change><126><0 a 16> | ||
Poly Mode On | <Control Change> <127><0> | ||
SYSTEM | Common | Song Position Pointer | 242> <pointer LSB> <pointer MSB> |
Sont Select | <243> <song number> | ||
Tune Request | <246> | ||
EOX | <247> | ||
Real Time | Timing Clock | <248> | |
Start | <250> | ||
Stop | <252> | ||
Continue | <251> | ||
Active Sensing | <254> | ||
System Reset | <255> | ||
System exclusive messages | <240> <manufacturer ID> *** <247> |
Dois tipos de bytes
Todas as mensagens MIDI só tem dois tipos de bytes: o status e o data.
Numa mensagem MIDI, o primeiro byte sempre distingue qual a mensagem que está sendo transmitida, e os demais levam os valores desta mensagem. Este primeiro byte é o chamdo status byte.
Imagine que você fosse capaz de ver de alguma forma todos aqueles bytes passando pelo fio. Será que você saberia quando um byte é o começo de uma mensagem? Ou será que ele não é o fim ou meio da mensagem anterior? Agora imagine um teclado ou computador, como é que ele sabe?
O que ele sabe é que o primeiro byte de uma mensagem é diferente dos demais. Como? Na verdade o primeiro byte (chamado de status byte) é sempre maior que 127. Ou seja, naquele monte de "0" e "1", o primeiro bit é sempre "1". Com isso, ele não tem de "pensar" muito se aquele byte é o começo ou meio de mensagem. Todo byte de mensagem (Data byte) é menor que 127, ou seja, o primeiro bit é "0". Ficamos, portanto, com a configuração:
Status Bytes (MSB 1XXXXXXX) -> isto é, o número é maior que 127 (Em outras palavras, pode ser um número entre 128 até 255). Lembre-se que 10000000 em binário é o equivalente a 128 em decimal.
Estes bytes são aqueles que identificam qual o tipo de mensagem que será enviada. O padrão (e por consequencia, os teclados e computadores que operam com ele) diz que qualquer número maior que 127 tem a ver com uma nova mensagem, e não é confundido como sendo uma parte da mensagem anterior.
Data Byte (MSB 0XXXXXXX) -> isto é, o número não é maior que 127 (isto é, entre 0 e 127), e é usado para transmitir o conteúdo da mensagem, caso haja algum. Por esse motivo o número 128 é ‘redondo’ em MIDI: temos 128 notas, 128 timbres possíveis com Program Change, 128 velocidades para uma determinada nota, e assim por diante.
Temos, portanto, que para ligar uma nota num teclado, transmitimos 3 bytes: o status, dizendo: ‘Ligue a uma nota do canal MIDI x’. O segundo byte, data diz qual nota será e o terceiro diz a sua velocidade. Simples assim.
Taxa de transmissão
MIDI transmite dados a uma velocidade de 31.25 Kbaud (31250 bits por segundo, precisando 10 bits para cada porção de informação. Uma nota tem três bytes para tocar, portanto consegue-se mais ou menos 1000 notas por segundo, para se ter uma idéia). E qual foi a ‘cartola’ que tiraram o número 31.25? Na verdade, ele é a divisão exata de 1/32 megahertz. Na época que MIDI foi criado, 1 MHz era a velocidade de clock básica usada pela primeira geração de microprocessadores, fazendo dele também um número ‘redondo’.
Na prática, cada nota demoraria pelo menos 1ms para ser transmitida. Conseguiríamos, portanto, ter entre 50 a 150 mensagens MIDI por segundo (dependendo do tamanho da mensagem). Parece um tempo mínimo, mas ainda assim estamos pensando em uma situação ideal, onde o sintetizador seja rápido o suficiente para responder a todos os comandos MIDI nos 16 canais, o que ainda está longe de ser verdadeiro.
Running status
Toque uma nota no sintetizador. Conforme foi dito, ele transmitirá 3 bytes. Se você ainda transmitir outra nota, sem mexer em mais nada, o teclado irá transmitir apenas mais dois bytes data sem o status byte. O aparelho que estiver recebendo, por sua vez, irá entender que aqueles dois bytes seguintes não são outra coisa além de mais uma nota. Como ele sabe disso? Por uma convenção chamada ‘running status’. Com ela, o aparelho receptor presume que bytes data (que ele conhece por serem menores que 128) sem o status são do mesmo tipo que a última mensagem recebida. Num acorde de quatro notas, portanto, serão transmitidas 9 bytes (três bytes para a primeira nota e dois para cada uma das outras três notas), e não 12 - uma economia de 25%. Em certas situações este tipo de comportamento permite um tráfego de informação bem menos congestionado.
por Theophilo Augusto Pinto
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.