terça-feira, setembro 16, 2014

Disquetes Musicais - Arquivos MIDI

Vamos pular agora para a outra ponta do sistema e examinar os arquivos MIDI, a partir do qual serão gerados os comandos para as unidades de disquete.


MIDI é um padrão para comunicação entre instrumentos musicais eletrônicos, computadores e dispositivos relacionados (cf wikipedia). A maneira mais simples de entender como o MIDI funciona é pensar em como gravar a execução de uma música em um teclado musical. A maior parte do tempo, o músico estará apertando e soltado as teclas. Os sons emitidos dependem principalmente de quais teclas são apertadas e soltas, w quando e como isto é feito. Ocasionalmente o músico poderá fazer outros ajustes no teclado, como selecionar um "programa" (ou instrumento simulado) diferente. Cada ação do músico gera um evento MIDI.

Um arquivo MIDI é um arquivo que armazena os eventos de uma forma padronizada. Além dos eventos em si, o arquivo pode conter informações adicionais (nome da música, letra, etc). Estas informações são guardadas em meta eventos.

Não é difícil encontrar descrições do arquivo MIDI na internet. A duas referências que usei foram:

Uma descrição completa é bastante longa. Vejamos apenas alguns pontos:
  • O arquivo é organizado em chunks (blocos). No início de cada chunk temos uma identificação e um tamanho.
  • O Header Chunk contém informações sobre a música, particularmente o número de tracks (trilhas) e a base de tempo.
  • Os Track Chunks contém os eventos MIDI. Um arquivo MIDI pode conter várias trilhas, que poderão (dependendo do tipo do arquivo) tocadas em paralelo.  Cada trilha pode conter eventos para diversos instrumentos (os channels). Cada evento indica quanto tempo se passou desde o evento anterior (delta time). Existem três tipos de eventos:
    • MIDI Channel Events são os eventos diretamente relacionados à emissão de notas, como Note On e Note Off.
    • Meta Events contém informações adicionais com o nome da música.
    • System Exclusive Events são eventos para controle de hardware específicos.
As referências acima contém todos os detalhes sórdidos. Para deixar o arquivo mais compacto algumas informações tem tamanho variável o que complica um pouco a leitura e requer a manipulação de bits. Com um pouco de paciência podemos analisar arquivos MIDI. Coloquei nos arquivos do blog um programa (MidiDump.zip) em C que lê um arquivo MIDI e lista (de forma sucinta) os chunks, trilhas e eventos.

Existem muitos programas para visualizar e editar arquivos MIDI. Semi-aleatoreamente (leia-se "o primeiro listado pelo Google") escolhi o MidiEditor. Experimente abrir com ele as músicas de exemplo do Moppy.

Uma última questão interessante é a correspondência entre os "programas" e os  instrumentos simulados. Uma trillha pode ter até 16 canais e existe um evento (Program Change) que altera o programa utilizado pelo canal. O padrão MIDI em si não estabelece nenhum significado especial para os 128 programas possíveis. Para isto existe um padrão adicional, o General MIDI.

O padrão General MIDI estabelece também que o canal 10 é exclusivo para os instrumentos de percussão. Neste canal cada "nota" corresponde a um instrumento.

Nenhum comentário: