
Bemvindo ao mundo fantástico 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 elétricas, tipos de cabos e conectores a serem utilizados, padrão dos dados e etc.
Como protocolo é masculino, MIDI é portanto do mesmo sexo.

O padrão MIDI especifica como deve ser feita a comunicação entre instrumentos musicais eletrônicos, computadores, sequenciadores e outros equipamentos.

Quando um teclado equipado com uma interface MIDI tiver uma tecla acionada, será enviado pela porta de saída (Out) da interface, um código dizendo que uma tecla
foi acionada.
Este código é 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 operação realizada no teclado, há um código correspondente, como por exemplo:
Troca de Timbre, Program Change.
"Torção" (leve alteração) na Altura da nota, Pitch Bend.
Alteração da pressão 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, através da Porta de Entrada (In).
, e assim, uma lista bem grande de comandos é definida.

Estes comandos são usados para acionar outros equipamentos que tenham interface MIDI, e podem ser gravados num sequenciador.
Um seqüenciador é um gravador de comandos MIDI.
Ao invés de gravar o som resultante da execução, ele grava a própria execução, através de todas as operações que foram realizadas.
Por isso, graças às capacidades de edição, será possível alterar o resultado final, modificando as notas, os timbres, as intensidades e os tempos, só para enumerar 
alguns dos elementos possíveis.
Desta forma, será possível tocar a mesma música em outro tom, ou com timbre diferente, usando a mesma maneira de execução.
Será possível também, alterar a velocidade de execução, sem alterar as alturas das notas, ou as alturas sem alterar o andamento.

Um arquivo MIDI, aqueles com extensão .mid, contém justamente estes códigos, ao invés de sons.
É por isso que eles teem um tamanho menor do que um arquivo de áudio digital com o mesmo conteúdo.

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

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

São eles:

MIDI Inicia.
O comando MIDI Inicia, inicia as operações 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 início da sessão, e a tentativa de usá-lo novamente, antes de usar o comando MIDI Termina, gerará um erro.
Sua sintaxe é:
MIDI Inicia
.
Este comando não tem parâmetros.

Exemplo:
midi inicia
.
O comando acima inicia as operações com o sistema MIDI.

MIDI Termina.
O comando MIDI Termina, encerra as operações 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 não tem parâmetros.

Exemplo:
midi termina
.
O comando acima termina a utilização 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 Português 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 também poderá ser de 0 a 127.
Canal, Nota e Volume, poderão ser constantes, variáveis ou expressões, mas terão que ser necessariamente numéricos.
Um valor fora da faixa indicada, ou a falta de algum parâmetro, 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 máxima intensidade (volume).
Lembre-se sempre de usar MIDI Inicia, antes de começar a utilizar os comandos MIDI.

Esta é uma boa oportunidade para falar sobre canais.
Um canal é uma via de comunicação individualizada, entre os equipamentos MIDI.
Cada canal MIDI pode ser configurado para usar um determinado timbre, não 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 execução, 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 parâmetro dos comandos MIDI Nota Ligada, MIDI Nota Desligada, e MIDI Troca Timbre, é justamente o canal.
Veja mais informações no comando Troca Timbre, adiante.

As notas são numeradas de 0 a 127, e cada unidade se refere a um semiton.
Um semiton é o menor intervalo entre duas notas, na música ocidental.
Um intervalo é a diferença de altura entre duas notas.
Freqüentemente ouvimos pessoas dizendo que um intervalo é a distância entre duas notas.
É possível se falar em distância entre duas notas, quando se pensa nas teclas de um piano, ou no braço de um violão, mas em som não há distância, exceto a percorrida 
por ele, quando se propaga.
O correto é dizer diferença de altura.

O Do natural (central), aquele localizado bem no centro do teclado do piano, e o mais próximo 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, não há sustenidos ou bemóis.
Há apenas um semitom entre elas.

As oitavas são numeradas, mas essa numeração é diferente no sistema clássico e no MIDI.
No sistema clássico, 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 clássico, o volume das notas é indicado através de letras, que se referem a palavras vindas do Italiano.
São 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, pianíssimo, e
ff, fortíssimo.
A cada acréscimo de uma letra, se acressenta um ssi a mais no nome.

Exemplo:
ppp, pianissíssimo.
fff, fortissíssimo.

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 gradação clássica seria:
ppp, pianissíssimo.
pp, pianíssimo.
p, piano.
mp, mezzo piano.
mf, mezo forte.
f, forte.
ff, fortíssimo.
fff, fortissíssimo.

Um compositor não está impedido de indicar outras combinações tais como:
mppp, mezzo pianissíssimo.
mff, mezzo fortíssimo.
, e outras, mas elas não são 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 silêncio.
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 poderão ser variáveis, constantes ou expressões, mas terão que necessariamente ser valores numéricos.
Um valor fora da faixa indicada, ou a falta de algum parâmetro, resultará em erro.
Um comando MIDI Nota Desligada, que não 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 também fornecido.
Sua sintaxe é:
MIDI TT canal timbre
, onde:
canal, poderá ser de 1 a 16,
e timbre, poderá ser de 0 a 127.
Ambos poderão ser constantes, variáveis ou expressões, mas deverão ser necessariamente numéricos.
Um valor fora da faixa indicada, ou a falta de algum parâmetro, resultará em erro.

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

O padrão General MIDI (MIDI Geral), define cada valor universalmente, de forma que um determinado arquivo contendo comandos MIDI possa ser executado o mais fielmente 
possível ao original, quando executado em outro equipamento.
Essas diferenças de sonoridade entre os vários geradores de som, conhecidos como módulos, se deve ao tipo de síntese que cada um utiliza.
Na prática, o melhor mesmo é percorrer as várias possibilidades que o seu equipamento em particular dispõe, para utilizar as que mais lhe agradarem.
Em todos eles, o timbre de número 0, será o mais próximo possível de um piano.
Existem também timbres de cravo, órgão, flauta, trompete, trombone, violino, harpa e etc.

Como já foi comentado anteriormente, os canais MIDI vão de 1 a 16.
Uma coisa que não 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 porém, cada nota corresponde a um som de um instrumento de percussão, ou de algum efeito sonoro.
O canal 10 também é conhecido como o "Canal da Bateria".
Nele é possível simular a execução não só de uma bateria, mas também de um grupo de percussão inteiro.

Nos demais canais, existem alguns timbres com sons de aplausos, tiros, ondas do mar, piados de passarinhos, ruído de helicópteros, 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á disponível 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 número 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  à próxima nota.
Não fique frustrado! Nem todas as notas estão 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 alterações, poderá ser utilizado para inspecionar os timbres.
Você poderá também utilizar o script bin\TestaNotas.cmd.

Por falar em timbres, em geral o canal 10 não aceita Troca de Timbre, embora alguns módulos possuam vários kits de bateria que podem ser selecionados através do
comando de troca de timbre.

Com estes comandos, será possível desenvolver uma grande variedade de aplicativos, desde um sequenciador rudimentar, até um programa de treinamento auditivo.

Veja alguns exemplos de utilização em bin\MIDIdemo.cmd.
Verifique o script bin\Teclado Tagarela*.cmd, que mostra como é possível simular um teclado de piano rudimentar no teclado do computador.
O mesmo script demonstra como é possível ouvir os nomes das notas tocadas.
O principal problema em ScriptVox, é que não 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 possível de alguma forma associar o evento KeyUp do Windows ao comando Observa Teclado, mas isso ainda é mera especulação.

Como ainda não podemos detectar este evento em ScriptVox, a solução (hic) foi desligar a nota no acionamento da seguinte.
Qualquer tecla que não for associada a uma nota, também desligará a nota que estiver soando.
Infelizmente, por conta disso, só será possível tocar uma nota de cada vez, o que não é o que se espera de um teclado.

Este problema só ocorre na tentativa de controlar a execução através do teclado do computador.
Num script, será possível enviar vários comandos MIDI Nota Ligada em seguida, que farão com que se ouça 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 usuário tecle algo.
Será então tocado um próximo acorde, que é Fá, Maior.
Esse processo se repetirá até que o script chegue ao final.
Com isso, será ouvida uma cadência perfeita de Do, Maior.
Este script encontra-se em bin\cadência.cmd.

Como você pôde observar, tocar um acorde é simplesmente enviar vários comandos nota ligada em seguida para o processador MIDI.
A velocidade em que isso ocorre é tão rápida, que nossos ouvidos não são capazes de perceber, e então se acredita que as notas foram tocadas simultaneamente.
No ScriptVox, essa velocidade é da ordem de centésimos de segundo.
Num programa compilado por alguma linguagem que gere códigos executáveis, ela poderá chegar a milésimos 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 não tem parâmetros.

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

Este é o conhecido "Botão de Pânico", usado para desligar aquela nota que ficou soando, e que não 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 não é problema no caso de um som de instrumento de percussão ou piano, mas será, se for um instrumento de som contínuo, como flauta, órgão, violoncelo, e outros.

Estude, e boas experiências MIDI.
#
