Reconhecimento Automatizado de Acordes em Sinais de Áudio

Aluno:
Carlos Augusto Motta de Lima

Supervisor:
Prof. Dr. Marcelo Queiroz

Apreciação Pessoal

Quando ingressei no curso de Bacharelado em Ciência da Computação do IME, imaginei muitas coisas a respeito de como seriam os anos que viria a passar por aqui. Mas não imaginei que encontraria na minha graduação um espaço onde eu poderia me dedicar à música.

Sou um apaixonado incurável pela música, e descobrir o curso de Computação Musical como optativa na minha grade foi uma surpresa boa. Decidi cursar a matéria, talvez um pouco cedo demais - no meu terceiro semestre, quando ainda não tinha muita compreensão do que era ciência da computação. Confesso que fiquei um pouco perdido em relação à disciplina no decorrer do semestre, mas mesmo sem entender muito, achei interessante, divertido.

Quando chegou o momento de escolher o tema do TCC, fiquei dividido. Naquele momento, eu já tinha feito um ano e meio de estágio, onde trabalhei com desenvolvimento de sistemas web. Pensei que fazer um trabalho que envolvesse principalmente esse tipo de desenvolvimento não seria muito desafiador, e que eu poderia fazê-lo com relativa tranquilidade.

Decidi procurar algum tema na área de Computação Musical. Disse a mim mesmo que, mesmo sendo uma área mais desafiadora para mim, seria também prazeroso estudar aquilo. Dito e feito: desafiador, prazeroso. Com a ajuda do professor Marcelo Queiroz, meu supervisor, e a quem sou imensamente grato pela interminável paciência e dedicação, cheguei ao tema de reconhecimento de acordes.

O TCC foi um processo totalmente novo para mim. Nunca tinha feito um trabalho desse porte. O começo consistiu em muitas leituras e aprofundamento teórico; em particular, cursei no primeiro semestre MAC0317 - Processamento de Sinais Digitais, para entender melhor a teoria por trás da computação musical.

Depois, começou a parte prática, que envolvia implementação. Essa parte também foi um processo novo para mim, pois, apesar de já ter desenvolvido alguns programas ao longo da minha curta trajetória como programador, nunca havia implementado um sistema sem uma especificação objetiva e requisitos bem definidos. Na verdade, eu estava construindo um ambiente de experimentação para mim mesmo, e eu não tinha totalmente claro qual era a melhor forma de organizar tudo.

Essa incerteza me fez refatorar meu código várias vezes; a cada vez eu adicionava algo para atender a alguma necessidade nova. Em uma dessas várias refatorações, eu literalmente reconstruí o ambiente inteiro do zero (algo que só consegui fazer em tempo hábil porque não era um ambiente muito complexo, mas que requiria uma arquitetura bem feita). Depois dessa refatoração, me senti muito satisfeito em relação à forma como eu podia produzir novos experimentos ou implementar novas técnicas de aperfeiçoamento do algoritmo que eu estudei.

Por último, veio a escrita. Talvez a parte que menos achei prazerosa, mas de certa forma, muito gratificante, porque faz seu trabalho passar de um patamar mais individual (do grupo que o está fazendo) para um mais coletivo (toda a comunidade acadêmica).

Fazer este trabalho foi uma grande experiência de vida. Foi um grande desafio fazê-lo enquanto cursava outras disciplinas e fazia estágio, mas aprendi muito com cada etapa, desde como funciona um trabalho acadêmico até um monte de detalhes sobre como uma música, uma onda sonora, pode ser representada num computador e depois reproduzida novamente.

Muitas disciplinas me deram o suporte intelectual e técnico para fazer este trabalho, como laboratório de programação, análise de algoritmos, estruturas de dados etc., mas as que acredito que foram as mais importantes de forma direta são: