\documentclass[a4paper]{report}
\usepackage[utf8]{inputenc}
\usepackage[brazilian]{babel}
\usepackage{fullpage}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{graphicx}

\renewcommand{\familydefault}{\sfdefault}

\title{G2M - Guitar 2 MIDI}
\author{Daniel Ricardo dos Santos,
Diogo de Campos,
João Paulo Pizani Flor \\
Maurício Oliveira Haensch,
Rodrigo Tridapalli Foes Linhares}

\date{\today}


\begin{document}

    \maketitle
    \tableofcontents
    
    \chapter{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.
        
        \section{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:
            \begin{description}
                \item[Altura] Grandeza que varia quando dizemos que um som é mais \emph{agudo} ou
                mais \emph{grave}. A altura de um som está relacionada à \textbf{frequência} da onda
                sonora.
                
                \item[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 \emph{volume}. Apesar de informalmente dizermos que uma música está muito
                \emph{alta} ou muito \emph{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 \textbf{amplitude} de sua onda portadora.
                
                \item[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.
                
                \item[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 \emph{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 \textbf{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.
            \end{description}
            
        \section{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 \emph{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 \emph{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''
            \cite{midiavr}. O formato possui várias peculiaridades e \emph{cornerstones}, porém em geral um fluxo MIDI
            constitui-se de uma sequência de \emph{eventos}. A maioria dos eventos MIDI tem três bytes, 
            com o formato ilustrado na figura
            \ref{fig:midievents}.
            \begin{figure}[h]
                \begin{center}
                    \textbf{STATUSBYTE, DATABYTE1, DATABYTE2}
                \end{center}
                \caption{Formato da maioria dos eventos MIDI}
                \label{fig:midievents}
            \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 \ref{tab:midievents} detalha os tipos de eventos MIDI mais comuns:
            \begin{table}[h]
                \begin{center}
                	\begin{tabular}{|c|c|c| p{6cm} |}
                	    \hline
                		\textbf{STATUSBYTE} & \textbf{DATABYTE1} & \textbf{DATABYTE2} &
                		\textbf{Descrição} \\ \hline
                		
                		1000cccc & 0nnnnnnn & 0vvvvvvv &
                		Evento NOTEOFF, onde 'cccc' é o \emph{canal}, 'nnnnnnn' a nota e
                		'vvvvvvv' o valor ``velocity'' (a intensidade).  \\ \hline
                		
                		1001cccc & 0nnnnnnn & 0vvvvvvv &
                		Evento NOTEON, onde 'cccc' é o \emph{canal}, 'nnnnnnn' a nota e
                		'vvvvvvv' o valor ``velocity'' (a intensidade).  \\ \hline
                		
                		1011cccc & 0nnnnnnn & 0vvvvvvv &
                		Evento CONTROLCHANGE, onde 'cccc' é o canal, 'nnnnnnn' é o número do
                		controle, e 'vvvvvvv' é seu valor  \\ \hline
                		
                		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 \\ \hline
                		
                		11111000 & nenhum   & nenhum   &
                		Evento MIDICLK. Ocorrem 24 eventos MIDICLK em uma
                		seminima\footnote{Nota musical com 1/4 da unidade de tempo definida},
                		e 96 em um compasso\footnote{Um certo número de unidades de tempo, expresso
                		no numerador da assinatura de tempo. Por exemplo, com uma assinatura de
                		4/4 o compasso tem a duração de 4 semínimas.}, assumindo tempo 4/4 \\ \hline
                		
                		11111010 & nenhum   & nenhum   &
                		Evento START, enviado no início do fluxo e seguido por MIDICLKs \\ \hline
                		
                		11111011 & nenhum   & nenhum   &
                		Evento CONTINUE, o fluxo continua de onde parou \\ \hline
                		
                		11111100 & nenhum   & nenhum   &
                		Evento STOP, enviado para pausar o fluxo MIDI \\ \hline
                		
                		11111110 & nenhum   & nenhum   &
                		Active sensing \\
                		\hline
                	\end{tabular}
                \end{center}
            	\caption{Principais tipos de eventos MIDI}
            	\label{tab:midievents}
            \end{table}
            
            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 \emph{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
            semicolcheia\footnote{Uma semicolcheia é uma nota com duração de 1/16 da unidade de tempo definida}
            sendo tocada (com assinatura de tempo 4/4) é representada na figura \ref{fig:semicolcheia}.
            \begin{figure}[h]
                \begin{center}
                    \textbf{NOTEON, MIDICLK, MIDICLK, MIDICLK, MIDICLK, MIDICLK, MIDICLK, NOTEOFF}
                \end{center}
                \caption{Uma semicolcheia sendo tocada}
                \label{fig:semicolcheia}
            \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 \emph{stream}
            MIDI que produziremos como saída. Essas restrições são discutidas em maiores detalhes em um capítulo
            específico.
            
    
    \chapter{Requisitos}
        \section{Restrições musicais}
            O foco do projeto é a ``tradução'' da linha melódica tocada por um guitarrista para o formato MIDI, que
            posso ser postariormente lido e armazenado em um computador que suporta tal formato. Essa visão reduz
            bastante o escopo do projeto, nos seguintes aspectos:
            
            \subsection{Múltiplas vozes}
                Múltiplas vozes refere-se à captura simultânea da execução de vários instrumentos musicais. O nosso
                projeto fica, portanto, restrito à captura da execução de somente UMA guitarra elétrica. De fato, se
                desejássemos fazer a captura da execução simultânea de vários instrumentistas, poderíamos utilizar
                vários equipamentos em paralelo e depois realizar a mixagem dos fluxos MIDI em um computador
                de mesa.
            
            \subsection{Acordes}
                Acordes\footnote{Grupo de notas musicais tocadas simultânea por um único instrumento,
                todas com a mesma duração} são um componente vital na performance de um guitarrista,
                porém a interpretação de um acorde a partir da onda sonora é mais complexa do que uma
                nota sozinha. A figura\ref{fig:chord} mostra um exemplo de acorde, a tríade de Dó Maior.
                \begin{figure}[h]
                    \begin{center}
                        \includegraphics[scale=0.15]{CM_triad.png}
                        \caption{Acorde de Dó Maior com três notas}
                        \label{fig:chord}
                    \end{center}
                \end{figure}

                Quando se realiza a análise de Fourier sobre um trecho musical contendo um acorde, estarão
                presentes no domínio da frequência todos os harmônicos de todas as notas do acorde, o que
                aumenta a complexidade do algoritmo de detecção das notas, e também a chance de notas
                serem confundidas devido à erros de ADC e erros numéricos.
                
            \subsection{Tessitura}
                A tessitura\footnote{A tessitura de um instrumento musical é o intervalo de notas musicais
                que ele é capaz de executar.} de uma guitarra típica é mostrada na figura \ref{fig:guitarrange}.
                Ela vai de E2 (nota mi da 2a oitava do piano) até D6 (nota ré da 6a oitava do piano).
                \begin{figure}[h]
                    \begin{center}
                        \includegraphics[scale=0.2]{range_guitar.png}
                        \caption{Tessitura de uma guitarra típica}
                        \label{fig:guitarrange}
                    \end{center}
                \end{figure}
                
                Em uma partitura, todos os intervalos entre duas notas consecutivas \emph{parecem} iguais,
                e de fato nosso ouvido percebe todos os intervalos entre notas consecutivas como se tivessem
                a mesma largura. Porém, à medida em que um par de notas consecutivo mais agudo é escolhido,
                a diferença entre suas frequências aumenta, e a cada intervalo de uma oitava essa diferença
                dobra. A tabela \ref{tab:escala} dá uma noção dessa variação.
                \begin{table}[h]
                    \begin{center}
                    	\begin{tabular}{|c|c|c|}
                    	    \hline
                    	    \textbf{Nota} & \textbf{Frequência} & \textbf{Diferença} \\ \hline
                    		C3 & 130.813 Hz  & 16.019 Hz \\ \hline
                    		D3 & 146.832 Hz  & - \\ \hline
                    		C4 & 261.626 Hz  & 32.039 Hz \\ \hline
                    		D4 & 293.665 Hz  & - \\ \hline
                    		C5 & 523.251 Hz  & 64.079 Hz \\ \hline
                    		D5 & 587.330 Hz  & - \\ \hline
                    		C6 & 1046.50 Hz  & 128.16 Hz \\ \hline
                    		D6 & 1174.66 Hz  & - \\
                    		\hline
                    	\end{tabular}
                    \end{center}
                    \label{tab:escala}
                    \caption{Uma escala musical e as respectivas diferenças entre pares de notas consecutivas}
                \end{table}
        
                Portanto, devido à variação dessa diferença de frequência nos intervalos, não é indiferente
                para a implementação a escolha de qual intervalo musical vamos suportar na captura.
                Caso escolhêssemos um intervalo muito alto (agudo), seria necessário utilizar uma alta taxa
                de amostragem, pois a frequência fundamental da nota e de seus harmônicos seria muito
                alta.
                
                Porém, caso escolhêssemos um intervalo muito baixo, o problema seria maior ainda. Como em um
                intervalo baixo a diferença entre notas consecutivas é muito pequena, algumas imprecisões
                devidas à conversão A/D e a erros numéricos nos algoritmos de DSP poderiam nos levar a
                detectar a nota errada. Em uma seção específica serão abordadas as características de entrada
                do equipamento (incluindo a tessitura) em mais detalhes.
                
                        
        \section{Restrições de protocolo}
            As restrições sobre as formas musicais que nosso equipamente é capaz de traduzir impõem várias
            limitações sobre o \emph{stream} MIDI produzido como saída, e o simplifica bastante.
            
            O fato de capturarmos apenas uma voz significa que no stream de saída hávera apenas um \emph{canal}
            MIDI. Todos os eventos NOTEON e NOTEOFF carregarão o mesmo número de canal, e não serão produzidos
            eventos CONTROLCHANGE.
            
            A figura \ref{fig:chord} ilustra, de forma simbólica, a sequência de eventos MIDI que ocorreriam
            ao se tocar um acorde de Dó Maior em semicolcheia.
            
            \begin{figure}[h]
                \begin{center}
                    \textbf{(NOTEON.CH1 C4) (NOTEON.CH1 E4) (NOTEON.CH1 G4)} \\
                    \textbf{MIDICLK, MIDICLK, MIDICLK, MIDICLK, MIDICLK, MIDICLK} \\
                    \textbf{(NOTEOFF.CH1 C4) (NOTEOFF.CH1 E4) (NOTEOFF.CH1 G4)}
                \end{center}
                \caption{Stream MIDI para um acorde de Dó Maior em semicolcheia}
                \label{code:chord}
            \end{figure}
            
            Em primeiro lugar, todos os eventos NOTEON e NOTEOFF têm o mesmo canal (canal 1), o que indica a presença
            de somente uma voz no trecho. Além disso, existem 6 eventos MIDICLK entre os grupos NOTEON e NOTEOFF,
            indicando que a duração é de semicolcheia. O fato de um evento NOTEON seguir imediatamente o anterior
            (sem nenhum MIDICLK entre eles) é o que indica que as notas foram acionadas simultaneamente. De
            forma análoga, a inexistência de MIDICLK entre os eventos NOTEOFF indica que as notas foram
            liberadas também ao mesmo tempo.
            

    \chapter{Características técnicas}
        \section{Captura}
            A faixa de notas musicais reconhecidas pelo G2M vai de C4 (Dó central do piano) até C6. Será possível
            reconhecer todas as notas musicais presentes nesse intervalo, inclusive os semitons. A tabela
            \ref{tab:g2mnotes} mostra todas as notas reconhecíveis, e suas respectivas frequências. As informações
            dessa tabela foram obtidas em \cite{wp-freqs}
            \begin{table}[h]
                \begin{center}
                    \begin{center}
                    	\begin{tabular}{|c|c|c|c|}
                    	    \hline
                    	    \textbf{Nota}&\textbf{Frequência (Hz)}&\textbf{Nota}&\textbf{Frequência (Hz)}\\ \hline
                    		C4     & 261.626    & C5    & 523.251     \\ \hline
                    		C\#4   & 277.183    & C\#5  & 554.365     \\ \hline
                    		D4     & 293.665    & D5    & 587.330     \\ \hline
                    		D\#4   & 311.127    & D\#5  & 622.254     \\ \hline
                    		E4     & 329.628    & E5    & 659.255     \\ \hline
                    		F4     & 349.228    & F5    & 698.456     \\ \hline
                    		F\#4   & 369.994    & F\#5  & 739.989     \\ \hline
                    		G4     & 391.995    & G5    & 783.991     \\ \hline
                    		G\#4   & 415.305    & G\#5  & 830.609     \\ \hline
                    		A4     & 440.000    & A5    & 880.000     \\ \hline
                    		A\#4   & 466.164    & A\#5  & 932.328     \\ \hline
                    		B4     & 493.883    & B5    & 987.767     \\ \hline
                    		       &            & C6    & 1046.50     \\
                    		\hline
                    	\end{tabular}
                    \end{center}
                \end{center}
                \caption{Notas musicais reconhecidas pelo G2M e suas respectivas frequências}
                \label{tab:g2mnotes}
            \end{table}
            
        \section{Taxa de amostragem}
            De acordo com o trabalho correlato \cite{gumstox}, foi detectado experimentalmente que em geral as
            notas de uma guitarra elétrica possuem de 1 a 4 harmônicos, sendo que as notas mais graves possuem
            mais harmônicos.
            
            Um harmônico é um modo de vibração de uma corda. Quando tocamos uma nota, a corda da guitarra
            vibra em uma onda estacionária com nodos nas extremidades; com a frequência da nota que estamos
            tocando. Porém ela também vibra SIMULTANEAMENTE em todos os múltiplos inteiros da frequência
            fundamental. A figura \ref{fig:harmonics} mostra os harmônicos (modos de vibração) de uma corda
            solta de uma guitarra.
            
            \begin{figure}[h]
                \begin{center}
                    \includegraphics[scale=0.65]{harmonics.png}
                \end{center}
                \caption{Alguns dos harmônicos presentes quando se toca uma corda solta de uma guitarra}
                \label{fig:harmonics}
            \end{figure}
            
            O número presente em cada modo de vibração na figura \ref{fig:harmonics} representa a \emph{fração}
            do período fundamental que o modo possui. Lembrando que a frequência de um movimento periódico é 
            o inverso de seu período, vemos que, caso adotemos como f a frequência do primeiro modo de vibração,
            teremos que o segundo modo será de frequência 2f, o terceiro 3f e assim por diante.
            
            Decidimos neste projeto interpretar até o \textbf{quinto harmônico} de cada nota, com o objetivo de
            obter uma melhor precisão na detecção das notas. Tendo que a nota mais aguda a ser capturada pelo
            G2M será o $C6 = 1046.50 Hz$, seu quinto harmônico terá a frequência $C6_5 = 1046.50 * 5$. Portanto,
            a frequência máxima $F_{max}$ de entrada a ser capturada pelo G2M é de:
            \[
                F_{max} = C6_{5} = 5232,5 Hz
            \]
            Para determinar qual é a taxa de amostragem mínima para que não haja perda de informação na
            digitalização, recorremos ao teorema de Nyquist-Shannon \cite{wp-nyquist}, o qual diz que
            para não perdermos informação na digitalização de uma onda complexa, devemos fazê-la
            com uma frequência de amostragem no mínimo duas vezes maior que a frequência do maior
            harmônico presente na onda, ou seja: $Sr_{min}(B) = 2B$. A taxa de amostragem mínima
            para o sistema G2M portanto deve ser de:
            \[
                Sr_{min} = 5232,5 \times 2 = 10465 Hz
            \]
            
            
        \section{Blocos funcionais}
            O diagrama \ref{fig:blocks} representa os blocos funcionais do sistema G2M. Também está presente, de
            forma ilustrativa, a representação da entrada e saída de cada bloco e a comunicação entre os blocos.
            
            O bloco de Entrada e conversão Analógico/Digital é conectado ao sinal provindo diretamente da guitarra,
            e deve realizar todos os três passos ADC, ou seja, amostragem, quantização e codificação, apresentando
            em sua saída um fluxo de amostras na taxa definida.
            
            O bloco FFT obtém com uma certa periodicidade uma sequência de amostras e realiza sobre elas
            uma \emph{transformada discreta de Fourier} \cite{wp-fourier}, a qual transforma o sinal do
            domínio do tempo para o domínio da frequência.
            
            A função do bloco Interpretador de altura é o de, recebendo a representação da nota (ou acorde)
            tocada no domínio da frequência, análisar tal representação e obter a frequência do primeiro harmônico
            (fundamental) de cada nota. O Interpretador deve ainda comparar o valor do fundamental obtido com uma
            tabela contendo as frequências de cada uma das notas, e dentro de uma margem de erro, atribuir o valor
            da nota.
            
            O bloco Detector de fronteira se comunica com o bloco Interpretador de duração enviando eventos que
            representam o início de um som específico sendo executado e o fim do mesmo (início do próximo).
            O Interpretador de duração deve calcular o tempo decorrido entre o início e fim da execução do som,
            e, com base no andamento fornecido, colocar na saída a representação simbólica da duração da nota.
            
            Por fim, o bloco MIDI out recebe um fluxo contendo a representação simbólica das notas sendo tocadas,
            e tem como saída o fluxo de eventos MIDI correspondentes, os quais podem ser enviados ao mundo externo
            através de uma interface serial, ou então armazenados em um arquivo no próprio dispositivo.
            
            \begin{figure}[h]
                \begin{center}
                    \includegraphics[scale=0.8]{blocos_funcionais.png}
                \end{center}
                \caption{Blocos funcionais do projeto G2M e a comunicação entre eles}
                \label{fig:blocks}
            \end{figure}
            
            
    \chapter{Plataforma}
        Como plataforma de desenvolvimento para o projeto estão sendo utilizados processadores da arquitetura Blackfin
        \cite{wp-bfin}, mais especificamente um kit de desenvolvimento BF537-STAMP, da Analog Devices. Vários foram os
        motivos que levaram à escolha dessa plataforma. A família de processadores Blackfin é caracterizada por uma
        ótima funcionalidade DSP (Processamento Digital de Sinais), acompanhada de um microcontrolador RISC de baixo
        consumo.
        
        Devido à boa performance do processador, ele consegue rodar vários sistemas operacionais, enquanto também é
        capaz de realizar tarefas numéricas complexas típicas de DSP. Existe, inclusive, uma versão do sistema
        uCLinux (Microcontroller Linux) disponível para a plataforma Blackfin, o que fornece ao desenvolvedor
        um ótimo suporte em termos de abstração de hardware e de bibliotecas, facilitando bastante o desenvolvimento.
        
        \section{uClinux}
            O uClinux (Microcontroller Linux) é uma variação do sistema operacional Linux, desenvolvido especialmente
            para sistema sem MMU\footnote{Memory Management Unit}. A versão utilizada no projeto foi a 2009R1.1-RC4, a
            mais recente no início do projeto.
            
            Um ponto muito interessante do uClinux é a presença da uClibc, a biblioteca padrão C para microcontroladores,
            já inclusa na distribuição. Além disso, existe uma vasta gama de aplicativos e uma boa documentação do sistema
            e da biblioteca, o que facilita sobremaneira a programação.
            
            As peças chave do uClinux na realização do trabalho foram o subsistema de arquivos (VFS), a comunicação
            interprocessos, a pilha de rede, e a biblioteca padrão.
        
        \section{Blackfin}
            A Blackfin é uma plataforma facilmente utilizável, com processamento rápido, que possui todas as características
            desejadas para o projeto.
          
    \chapter{Solução Adotada}
        O projeto foi separado em dois blocos principais: um para Detecção de Frequências e Duração e um para a Geração de
        MIDI. Essa metodologia foi escolhida visando paralelizar o desenvolvimento do projeto, aumentando a produtividade, 
        além de aumentar a reusabilidade do projeto. A separação em blocos ajudou muito nos testes durante o desenvolvimento, 
        permitindo que eles pudessem ser testados individualmente.
        
        O objetivo inicial do projeto era utilizar a entrada de áudio da placa para fazer captura direta da guitarra, passando 
        pelo ADC\footnote{Analog-Digital Converter} e aplicando uma FFT\footnote{Fast-Fourier Transform} sobre essas amostras, 
        para então identificar a frequência e duração das notas tocadas e fazer uma tradução para o formato MIDI. Porém, a 
        captura da placa usada no projeto não pode ser utilizada, e substituimos a entrada do programa para um arquivo de áudio 
        puro, gravado num computador e passado para a placa.
        
        \section{Detecção de Frequências e Duração}
            A função do primeiro grande bloco do projeto era pegar amostrar da entrada de áudio, aplicar a FFTs nas amostras 
            recolhidas, identificar a frequência e a duração das notas tocadas e gerar uma saída definida pela seguinte \emph{struct C}:
            
            \begin{verbatim}
            typedef struc note {
	            pitch_t pitch;
	            int time;
	            bool on;
            } note_t;
            \end{verbatim}
            
            A \emph{struct} de notas possui três campos de inteiros (com \emph{pitch\_t} e \emph{bool} sendo dois \emph{typedef}), 
            onde o primeiro, \emph{pitch}, o que determina o valor do protocolo MIDI para a frquência detectada, o segundo, 
            \emph{time}, o instante no tempo em que a nota foi detectada e o terceiro, \emph{on}, determina se o evento MIDI 
            gerado será um NOTEON ou NOTEOFF. 
            
            Essa saída do primeiro bloco do projeto, composta por diversos elementos dessa \emph{struct} definida era o esperado 
            pelo segundo bloco do projeto.
            
        \section{Conversão MIDI}
            A partir da saída do bloco anterior, a função do bloco de Conversão MIDI era criar um arquivo com as informações 
            obtidas da \emph{struct} definida, assim como todo o cabeçalho e demais dados necessários do formato MIDI. Por ter 
            sido feito separadamente, foi possível testar esse bloco diversas vezes com entradas criadas para este fim, 
            verificando quaisquer possíveis erros nesse bloco específico.
            
        \section{FFT}
        \section{Detecção de Eventos}
        \section{Detecção de Frequência Fundamental}
        
                           
    \bibliographystyle{plain}
    \bibliography{g2m}

\end{document}
