
Bemvindo ao mundo fantstico do MIDI.

MIDI  uma sigla que significa Musical Instrument Digital Interface.
Traduzindo ficaria: Interface Digital para Instrumento Musical.

Quanto ao sexo dos anjos, MIDI  masculino.
Embora a palavra interface seja feminina, MIDI se refere ao protocolo que a definiu.
Protocolo  um conjunto de normas (regras).
No caso do protocolo MIDI, ele especifica voltagens eltricas, tipos de cabos e conectores a serem utilizados, padro dos dados e etc.
Como protocolo  masculino, MIDI  portanto do mesmo sexo.

O padro MIDI especifica como deve ser feita a comunicao entre instrumentos musicais eletrnicos, computadores, sequenciadores e outros equipamentos.

Quando um teclado equipado com uma interface MIDI tiver uma tecla acionada, ser enviado pela porta de sada (Out) da interface, um cdigo dizendo que uma tecla
foi acionada.
Este cdigo  chamado Note On, que significa Nota Ligada.
Da mesma forma, quando a tecla for solta, ser gerado um comando Note Off (Nota Desligada).
Para cada operao realizada no teclado, h um cdigo correspondente, como por exemplo:
Troca de Timbre, Program Change.
"Toro" (leve alterao) na Altura da nota, Pitch Bend.
Alterao da presso exercida na tecla, Key AfterTouch.
Desligar o acionamento do gerador de som pelas teclas do teclado, Local Control Off.
Este ltimo comando, faz com que o aparelho s possa ser tocado remotamente, atravs da Porta de Entrada (In).
, e assim, uma lista bem grande de comandos  definida.

Estes comandos so usados para acionar outros equipamentos que tenham interface MIDI, e podem ser gravados num sequenciador.
Um seqenciador  um gravador de comandos MIDI.
Ao invs de gravar o som resultante da execuo, ele grava a prpria execuo, atravs de todas as operaes que foram realizadas.
Por isso, graas s capacidades de edio, ser possvel alterar o resultado final, modificando as notas, os timbres, as intensidades e os tempos, s para enumerar 
alguns dos elementos possveis.
Desta forma, ser possvel tocar a mesma msica em outro tom, ou com timbre diferente, usando a mesma maneira de execuo.
Ser possvel tambm, alterar a velocidade de execuo, sem alterar as alturas das notas, ou as alturas sem alterar o andamento.

Um arquivo MIDI, aqueles com extenso .mid, contm justamente estes cdigos, ao invs de sons.
 por isso que eles teem um tamanho menor do que um arquivo de udio digital com o mesmo contedo.

Para execut-los, a placa de som dever possuir os sons dos instrumentos gravados nela, ou estes devero ser simulados por software, que sero executados obedecendo
o padro do protocolo MIDI.

Para a alegria dos programadores em ScriptVox, foram implementados alguns comandos MIDI, que passaro a ampliar as possibilidades do sistema.

So eles:

MIDI Inicia.
O comando MIDI Inicia, inicia as operaes com o sistema MIDI.
Antes de qualquer outro comando, ele dever ser usado.
A tentativa de usar qualquer comando antes dele, gerar um erro.
Se deve us-lo apenas uma vez, no incio da sesso, e a tentativa de us-lo novamente, antes de usar o comando MIDI Termina, gerar um erro.
Sua sintaxe :
MIDI Inicia
.
Este comando no tem parmetros.

Exemplo:
midi inicia
.
O comando acima inicia as operaes com o sistema MIDI.

MIDI Termina.
O comando MIDI Termina, encerra as operaes com o sistema MIDI.
Ele deve ser usado ao final do processamento.
Se ele for usado sem que o sistema esteja iniciado, gerar um erro.
Sua sintaxe :
MIDI Termina
.
Este comando no tem parmetros.

Exemplo:
midi termina
.
O comando acima termina a utilizao do sistema MIDI.

MIDI Nota Ligada.
O comando MIDI Nota Ligada, abreviado por NL, ativa uma nota em um determinado canal, com un certo volume.
Ele  o correspondente em Portugus do Note On.
Sua sintaxe :
MIDI NL canal nota volume
, onde:
canal, poder ser um valor de 1 a 16,
nota, poder ser de 0 a 127,
e volume tambm poder ser de 0 a 127.
Canal, Nota e Volume, podero ser constantes, variveis ou expresses, mas tero que ser necessariamente numricos.
Um valor fora da faixa indicada, ou a falta de algum parmetro, resultar em erro.
Todo comando MIDI Nota Ligada, dever, em algum momento, ser seguido do comando MIDI Nota Desligada (ver adiante).

Exemplo:
midi nl 1 60 127
.
O comando acima, ativa no canal 1, o Do natural (central), com a mxima intensidade (volume).
Lembre-se sempre de usar MIDI Inicia, antes de comear a utilizar os comandos MIDI.

Esta  uma boa oportunidade para falar sobre canais.
Um canal  uma via de comunicao individualizada, entre os equipamentos MIDI.
Cada canal MIDI pode ser configurado para usar um determinado timbre, no se misturando com os demais.

Voc poder pensar num canal como sendo um instrumentista da sua orquestra.
^Como compositor, voc estabelece que determinado instrumento dever tocar uma certa nota, e outro outra.
Para realizar isso, basta atribuir um timbre a um canal, e outro  timbre a outro canal.
Na hora da execuo, voc enviar as notas para cada um, usando o sistema de canais.

Exemplo:
Para executar um trio de violino, violoncelo e piano, voc dever primeiro estipular um canal para cada um.
O violino ficaria no canal 1, o violoncelo no canal 2, e o piano no canal 3.
A seguir, voc utilizaria o comando MIDI Troca Timbre (ver adiante) para configurar cada canal com o seu respectivo timbre.
Depois,  s enviar as notas que voc deseja que o violino toque, para o canal 1, as do violoncelo para o canal 2, e as do piano para o canal 3.
O primeiro parmetro dos comandos MIDI Nota Ligada, MIDI Nota Desligada, e MIDI Troca Timbre,  justamente o canal.
Veja mais informaes no comando Troca Timbre, adiante.

As notas so numeradas de 0 a 127, e cada unidade se refere a um semiton.
Um semiton  o menor intervalo entre duas notas, na msica ocidental.
Um intervalo  a diferena de altura entre duas notas.
Freqentemente ouvimos pessoas dizendo que um intervalo  a distncia entre duas notas.
 possvel se falar em distncia entre duas notas, quando se pensa nas teclas de um piano, ou no brao de um violo, mas em som no h distncia, exceto a percorrida 
por ele, quando se propaga.
O correto  dizer diferena de altura.

O Do natural (central), aquele localizado bem no centro do teclado do piano, e o mais prximo daquela tranquinha, que fecha o teclado, tem o valor 60.
O Do sustenido (#), que coincide com o R bemol (b), ser 61.
O R natural que vem depois, tem o valor 62.
O R sustenido (#), que coincide com o Mi bemol (b), tem o valor 63.
O Mi natural seguinte, tem o valor 64.
O F natural seguinte, ter o valor 65, e assim sucessivamente, at o 127.
A cada semitom, se adiciona uma unidade ao valor da nota.
Entre as notas Mi, e F, e entre as notas Si, e Do, no h sustenidos ou bemis.
H apenas um semitom entre elas.

As oitavas so numeradas, mas essa numerao  diferente no sistema clssico e no MIDI.
No sistema clssico, o Do central  conhecido como o Do 4, significando que existem 3 oitavas anteriores a ele.
No piano, a contagem se inicia em 1.
No sistema MIDI, o Do central  o Do 5, contagem iniciada a partir do 0.

No sistema clssico, o volume das notas  indicado atravs de letras, que se referem a palavras vindas do Italiano.
So elas: p e f, que se referem a piano e forte, que significam suave e intenso respectivamente.
Quando se quer exprimir um som mais suave ou mais forte, um dos recursos  duplicar a letra, gerando:
pp, pianssimo, e
ff, fortssimo.
A cada acrscimo de uma letra, se acressenta um ssi a mais no nome.

Exemplo:
ppp, pianissssimo.
fff, fortissssimo.

A elas pode ser acrescentado o prefixo mezzo, representado pela letra m, que significa menos.
Cuidado! Menos suave significa mais intenso.
mp, mezzo piano,  mais forte que piano.
mf, mezzo forte,  mais suave que forte.

a gradao clssica seria:
ppp, pianissssimo.
pp, pianssimo.
p, piano.
mp, mezzo piano.
mf, mezo forte.
f, forte.
ff, fortssimo.
fff, fortissssimo.

Um compositor no est impedido de indicar outras combinaes tais como:
mppp, mezzo pianissssimo.
mff, mezzo fortssimo.
, e outras, mas elas no so comuns.

Voltando ao sistema MIDI, o correspondente ao mezzo forte, seria o valor 64, que  o meio do caminho entre 0 e 127..
O valor 0  o silncio.
Uma Nota Ligada com volume 0,  o mesmo que a mesma nota desligada.

MIDI Nota Desligada.
O comando MIDI Nota Desligada, abreviado por ND, desliga, silencia uma nota em um determinado canal.
Sua sintaxe :
MIDI ND canal nota
,onde:
canal, poder ser um valor de 1 a 16,
e nota, poder ser de 0 a 127.
Ambos podero ser variveis, constantes ou expresses, mas tero que necessariamente ser valores numricos.
Um valor fora da faixa indicada, ou a falta de algum parmetro, resultar em erro.
Um comando MIDI Nota Desligada, que no for precedido por um comando MIDI Nota Ligada, ser ignorado.

Exemplo:
midi nd 1 60
.
O exemplo acima desliga a nota do exemplo Nota Ligada anterior.

MIDI Troca Timbre.
O comando MIDI Troca Timbre, abreviado por TT, altera o timbre do canal indicado, para um valor tambm fornecido.
Sua sintaxe :
MIDI TT canal timbre
, onde:
canal, poder ser de 1 a 16,
e timbre, poder ser de 0 a 127.
Ambos podero ser constantes, variveis ou expresses, mas devero ser necessariamente numricos.
Um valor fora da faixa indicada, ou a falta de algum parmetro, resultar em erro.

Exemplo:
midi tt 2 30
.
O comando acima, altera o timbre do canal 2 para o timbre de nmero 30.

O padro General MIDI (MIDI Geral), define cada valor universalmente, de forma que um determinado arquivo contendo comandos MIDI possa ser executado o mais fielmente 
possvel ao original, quando executado em outro equipamento.
Essas diferenas de sonoridade entre os vrios geradores de som, conhecidos como mdulos, se deve ao tipo de sntese que cada um utiliza.
Na prtica, o melhor mesmo  percorrer as vrias possibilidades que o seu equipamento em particular dispe, para utilizar as que mais lhe agradarem.
Em todos eles, o timbre de nmero 0, ser o mais prximo possvel de um piano.
Existem tambm timbres de cravo, rgo, flauta, trompete, trombone, violino, harpa e etc.

Como j foi comentado anteriormente, os canais MIDI vo de 1 a 16.
Uma coisa que no foi dita ainda,  que existe um canal especial entre eles, que  o canal 10.
Ele  diferente dos demais no seguinte aspecto:
Em todos os outros, todas as notas (de 0 a 127) possuem o mesmo timbre, que poder ser ajustado pelo comando Troca Timbre.
No canal 10 porm, cada nota corresponde a um som de um instrumento de percusso, ou de algum efeito sonoro.
O canal 10 tambm  conhecido como o "Canal da Bateria".
Nele  possvel simular a execuo no s de uma bateria, mas tambm de um grupo de percusso inteiro.

Nos demais canais, existem alguns timbres com sons de aplausos, tiros, ondas do mar, piados de passarinhos, rudo de helicpteros, telefones tocando e mais alguns 
efeitos sonoros.
Observe que alguns destes sons mudam significativamente conforme a altura da nota.
Vale a pena investigar o que est disponvel no seu sistema.
Para isso, basta percorrer as possibilidades com, por exemplo:
midi inicia
repete n 128
fala (n-1)
se (n-2)>=0 midi nd 10 (n-2)
midi nl 10 (n-1) 127
@denovo
l mudo x&
 se x="r"
 midi nd 10 (n-1)
midi nl 10 (n-1) 127
 desvia @denovo
 fim se
fim repete
midi nd 10 (n-2)
midi termina
*
.
No programa acima, ser dito o nmero da nota, e tocado o respectivo instrumento.
Se for desejado ouvi-lo novamente, tecle R (de repetir).
Qualquer outra tecla far o script passar a executar   prxima nota.
No fique frustrado! Nem todas as notas esto associadas a algum instrumento.
Na placa de som OnBoard onde foi testado, s havia instrumentos no canal 10, das notas 27 at 87.
Isso depender do seu sistema em particular.

O mesmo programa, com algumas alteraes, poder ser utilizado para inspecionar os timbres.
Voc poder tambm utilizar o script bin\TestaNotas.cmd.

Por falar em timbres, em geral o canal 10 no aceita Troca de Timbre, embora alguns mdulos possuam vrios kits de bateria que podem ser selecionados atravs do
comando de troca de timbre.

Com estes comandos, ser possvel desenvolver uma grande variedade de aplicativos, desde um sequenciador rudimentar, at um programa de treinamento auditivo.

Veja alguns exemplos de utilizao em bin\MIDIdemo.cmd.
Verifique o script bin\Teclado Tagarela*.cmd, que mostra como  possvel simular um teclado de piano rudimentar no teclado do computador.
O mesmo script demonstra como  possvel ouvir os nomes das notas tocadas.
O principal problema em ScriptVox,  que no se tem como saber quando uma tecla for solta.
O ato de soltar a tecla, deveria ser associado ao comando MIDI Nota Desligada.
Talvez seja possvel de alguma forma associar o evento KeyUp do Windows ao comando Observa Teclado, mas isso ainda  mera especulao.

Como ainda no podemos detectar este evento em ScriptVox, a soluo (hic) foi desligar a nota no acionamento da seguinte.
Qualquer tecla que no for associada a uma nota, tambm desligar a nota que estiver soando.
Infelizmente, por conta disso, s ser possvel tocar uma nota de cada vez, o que no  o que se espera de um teclado.

Este problema s ocorre na tentativa de controlar a execuo atravs do teclado do computador.
Num script, ser possvel enviar vrios comandos MIDI Nota Ligada em seguida, que faro com que se oua um acorde.
Exemplo:

midi inicia
* toca um acorde de Do Maior.
midi nl 1 60 127
midi nl 1 64 127
midi nl 1 67 127
* aguarda uma tecla pressionada.
l &
* desliga o acorde anterior.
midi nd 1 60
midi nd 1 64
midi nd 1 67
* toca um acorde de F maior.
midi nl 1 60 127
midi nl 1 65 127
midi nl 1 69 127
* aguarda uma tecla pressionada.
l &
* desliga o acorde anterior.
midi nd 1 60
midi nd 1 65
midi nd 1 69
* toca um acorde de Sol Maior.
midi nl 1 59 127
midi nl 1 62 127
midi nl 1 67 127
* aguarda uma tecla pressionada.
l &
* desliga o acorde anterior.
midi nd 1 59
midi nd 1 62
midi nd 1 67
* retorna ao Do Maior inicial.
midi nl 1 60 127
midi nl 1 64 127
midi nl 1 67 127
* aguarda uma tecla pressionada.
l &
* desliga o acorde anterior.
midi nd 1 60
midi nd 1 64
midi nd 1 67
midi termina
.
No exemplo acima, ser ouvido um acorde de Do, Maior.
O script ficar aguardando que o usurio tecle algo.
Ser ento tocado um prximo acorde, que  F, Maior.
Esse processo se repetir at que o script chegue ao final.
Com isso, ser ouvida uma cadncia perfeita de Do, Maior.
Este script encontra-se em bin\cadncia.cmd.

Como voc pde observar, tocar um acorde  simplesmente enviar vrios comandos nota ligada em seguida para o processador MIDI.
A velocidade em que isso ocorre  to rpida, que nossos ouvidos no so capazes de perceber, e ento se acredita que as notas foram tocadas simultaneamente.
No ScriptVox, essa velocidade  da ordem de centsimos de segundo.
Num programa compilado por alguma linguagem que gere cdigos executveis, ela poder chegar a milsimos de segundo.

Um ltimo comando muito importante,  o comando...

MIDI Pane.
O comando MIDI Pane desliga todas as notas de todos os canais, de uma vez s, silenciando o instrumento.
Sua sintaxe :
MIDI Pane
.
Este comando no tem parmetros.

Exemplo:
midi pane
.
O exemplo acima silencia completamente o instrumento.

Este  o conhecido "Boto de Pnico", usado para desligar aquela nota que ficou soando, e que no era desejada.
Como cada nota dever ser ligada e depois desligada individualmente, ocorrem casos em que por algum descuido do programador, ou pela complexidade do programa, poder 
ocorrer que alguma delas fique sem o comando Nota Desligada.
Isso no  problema no caso de um som de instrumento de percusso ou piano, mas ser, se for um instrumento de som contnuo, como flauta, rgo, violoncelo, e outros.

Estude, e boas experincias MIDI.
#
