Subsections

Introdução

Este projeto destina-se à construção de um sistema embarcado capaz de tomar como entrada um sinal sonoro de um instrumento musical acústico e converter esse sinal para a representação simbólica da nota, segundo o padrão MIDI (Musical Instrument Digital Interface). Mais especificamente o instrumento a ser utilizado como entrada será uma guitarra elétrica.

Na entrada do sistema embarcado estará ligado o cabo de uma guitarra, e será produzido na saída serial um fluxo de dados seguindo o protocolo MIDI.

Física do som musical

A sensação que nós humanos normalmente denominamos como ``som'' é associada a uma onda mecânica longitudinal, que carrega até nosso sistema auditivo a energia provinda de alguma fonte de vibração . Um som pode ser classificado sob vários aspectos:
Altura
Grandeza que varia quando dizemos que um som é mais agudo ou mais grave. A altura de um som está relacionada à frequência da onda sonora.

Intensidade
Na terminologia musical, os sons são classificados de acordo com sua intensidade, sendo que os menos intensos são ``fracos'' e os mais intensos ``fortes''. A intensidade de um som corresponde ao conceito intuitivo que temos de volume. Apesar de informalmente dizermos que uma música está muito alta ou muito baixa, a terminologia musical correta é forte e fraco. Alto e baixo se referem à altura. A grandeza física associada ao conceito de intensidade de um som é a amplitude de sua onda portadora.

Duração
A duração de um som é um aspecto bastante importante para caracterizá-lo, e comprovadamente o ritmo é a característica que os seres humanos percebem mais facilmente em uma música.

Timbre
Imagine um piano tocando seu Dó central (C4), e uma flauta tocando exatamente a mesma nota; ambos tocam tal nota com exatamente a mesma duração. Mesmo assim você consegue distinguir facilmente o som vindo de cada um dos instrumentos. A qualidade do som que permite tal distinção é o timbre. Em geral, os sons são ondas bastante complexas, com muitas componentes simples (senoidais) sobrepostas. A quantidade e intensidade relativa de cada uma dessas ondas componentes (também chamadas de harmônicos) é que determina o timbre de um instrumento. Cada instrumento musical possui um timbre único, e também toda vogal produzida pela voz humana tem seu timbre característico.

O formato MIDI

Desde os primórdios da eletrônica já havia a idéia de se utilizar de circuitos eletrônicos para produzir som artificialmente. Tais circuitos são os chamados sintetizadores. Com a popularização da eletrônica digital vários fabricantes de sintetizadores passaram a desenvolver padrões de comunicação com seus produtos, de forma independente. Alguns exemplos de tais protocolos são V/hz, V/Oct, DCB, PPG BUS.

Para promover a interoperabilidade entre os equipamentos de vários fabricantes e a expansão da indústria de instrumentos eletrônicos como um todo, um consórcio de vários fabricantes criou o padrão MIDI. O padrão MIDI representa o som de maneira simbólica, ou seja, não está representada no fluxo MIDI a forma de onda, e sim uma sequência de palavras binárias que descreve qualitativamente o som sendo tocado, em cada dos aspectos mencionados na seção anterior.

As informações seguintes sobre o formato foram obtidas em grande parte no ótimo tutorial ``Midi and the AVR'' [8]. O formato possui várias peculiaridades e cornerstones, porém em geral um fluxo MIDI constitui-se de uma sequência de eventos. A maioria dos eventos MIDI tem três bytes, com o formato ilustrado na figura 1.1.

Figura 1.1: Formato da maioria dos eventos MIDI
\begin{figure}\begin{center}
\textbf{STATUSBYTE, DATABYTE1, DATABYTE2}
\end{center}
\end{figure}

STATUSBYTE indica o tipo de evento, e pode indicar também alguma outra informação associada a tipos específicos de eventos, O significado de ambos os bytes de dados depende do tipo de evento, e alguns eventos MIDI possuem somente um byte. A tabela 1.1 detalha os tipos de eventos MIDI mais comuns:

Tabela 1.1: Principais tipos de eventos MIDI
STATUSBYTE DATABYTE1 DATABYTE2 Descrição
1000cccc 0nnnnnnn 0vvvvvvv Evento NOTEOFF, onde 'cccc' é o canal, 'nnnnnnn' a nota e 'vvvvvvv' o valor ``velocity'' (a intensidade).
1001cccc 0nnnnnnn 0vvvvvvv Evento NOTEON, onde 'cccc' é o canal, 'nnnnnnn' a nota e 'vvvvvvv' o valor ``velocity'' (a intensidade).
1011cccc 0nnnnnnn 0vvvvvvv Evento CONTROLCHANGE, onde 'cccc' é o canal, 'nnnnnnn' é o número do controle, e 'vvvvvvv' é seu valor
1110cccc 0LLLLLLL 0mmmmmmm Evento PITCHCHANGE, onde 'cccc' é o canal, 'LLLLLLL' é o LSB e 'mmmmmmm' é o MSB do novo valor. O valor onde não há mudança (valuecenter) é 0x2000
11111000 nenhum nenhum Evento MIDICLK. Ocorrem 24 eventos MIDICLK em uma seminima1.1, e 96 em um compasso1.2, assumindo tempo 4/4
11111010 nenhum nenhum Evento START, enviado no início do fluxo e seguido por MIDICLKs
11111011 nenhum nenhum Evento CONTINUE, o fluxo continua de onde parou
11111100 nenhum nenhum Evento STOP, enviado para pausar o fluxo MIDI
11111110 nenhum nenhum Active sensing


Alguns fatos interessantes podem ser retirados da tabela. Um deles é que todo STATUSBYTE tem seu bit mais significativo em '1', enquanto todo DATABYTE tem seu bit mais significativo em '0'. Isso permite uma rápida checagem na chegada de um byte que devemos interpretar como MIDI.

Outro ponto importante é que os eventos MIDI não guardam nenhum tipo de informação sobre a duração de uma nota tocada. Essa informação está expressa implicitamente no número de períodos de clock decorridos entre um evento NOTEON e o respectivo NOTEOFF. Uma cadência de eventos MIDI que ilustra uma semicolcheia1.3 sendo tocada (com assinatura de tempo 4/4) é representada na figura 1.2.

Figura 1.2: Uma semicolcheia sendo tocada
\begin{figure}\begin{center}
\textbf{NOTEON, MIDICLK, MIDICLK, MIDICLK, MIDICLK, MIDICLK, MIDICLK, NOTEOFF}
\end{center}
\end{figure}

Decorreram-se 6 ciclos de clock entre o evento NOTEON e o respectivo NOTEOFF, e como temos a assinatura de tempo e o fato de que em uma semínima há 24 ciclos, por uma simples regra de três :) deduzimos que a nota tocada é uma semicolcheia.

Algumas das restrições que pretende-se adotar no projeto simplificam bastante o formato do stream MIDI que produziremos como saída. Essas restrições são discutidas em maiores detalhes em um capítulo específico.

João Paulo Pizani Flor 2010-07-12