Subsections
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.
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.
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
|
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
|
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