Sonata – Um sistema de rearmonização semi-automática de partituras de piano

Sonata foi o projeto desenvolvido durante meu trabalho de conclusão de curso para obtenção do grau de Bacharel em Ciência da Computação em 2010. Trata-se de um software para rearmonização semi-automática de partituras de piano que foi desenvolvido como uma extensão da biblioteca musical Jmusic. O projeto consistiu na criação de uma estrutura de dados própria para representação da Melodia e Harmonia assim como a construção da lógica para identificação de padrões e reescrita de Harmonia da partitura de piano de acordo com algumas regras de rearmonização.

É importante salientar que rearmonização musical é um tema bastante complexo que envolve conhecimentos avançados de teoria musical, sendo assim o desenvolvimento de um software que pudesse automatizar este processo em sua totalidade seria praticamente impossível  devido ao número de variáveis envolvidas e o tempo que tínhamos para conclusão do projeto.
Por este motivo, durante o desenvolvimento do software foi necessário adotar algumas premissas e impor algumas limitações de forma que o processo de rearmonização funcionasse corretamente. Uma dessas premissas é que o software apenas efetua alterações sobre a harmonia, mantendo a melodia e o ritmo original da música intactos,  além disso ele aceita apenas partituras escritas em um arquivo midi com apenas 2 canais e cuja harmonia possua apenas acordes fechados, ou seja, sem dedilhados. Em um primeiro momento foram implementadas 4 técnicas de rearmonização (interpolação em Cadências,  substituição de acordes – por tom comum ou trítono,  inserção de notas de tensão sobre acordes e inserção de acordes fora do campo harmônico) porém nada impede que em futuras versões sejam suportadas demais técnicas de rearmonização ou seja permitido manipulação das notas da melodia.
Durante o desenvolvimento do projeto alguns resultados parciais foram publicados em um artigo na 18ª edição do Simpósio Internacional de Iniciação Científica da USP (Siicusp). Para aqueles que tiverem interesse uma versão resumida do artigo, de título "Composição Musical Auxiliada por Computador: Teoria e Aplicações", pode ser acessada neste link, bastando buscar pela 18ª edição (ano 2010) e número de inscrição 5118. Atualmente o software está disponivel em duas versões (um website e um aplicativo mobile android),  sendo que o website pode ser acessado em https://sonatamusic.io e a versão mobile encontra-se disponivel no google play e pode ser adquirida em duas versões –  completa e de demonstração.

Versão CompletaGet it on Google Play

Versão de DemonstraçãoGet it on Google Play

Abaixo algumas imagens do aplicativo:

export_pdf                         select_rules

score

Projeto Visão Computacional – Reconhecimento de Íris

No segundo semestre de 2010  um amigo e eu desenvolvemos uma pequena aplicação que permitia reconhecer a íris de olhos humanos através do algoritmo de crescimento de região e corte. Na época foi utilizada a biblioteca de visão computacional OpenCV – https://opencv.willowgarage.com/wiki/, este trabalho foi desenvolvido para a disciplina de Visão Computacional.

Para o reconhecimento de íris todas as imagens foram submetidas a alguns procedimentos experimentais. Primeiramente dividimos a imagem em três canais de cor (R/G/B) e em um próximo passo fizemos o corte da imagem** e observamos que o canal R (red) ao ser binarizado apresentava os melhores resultados de separação da irís + pupila do resto da imagem.

**Corte/binarização da imagem, neste contexto, é considerado uma técnica de processamento de imagens que analisa os pixels da imagem e cria uma outra imagem onde os pixels com menor intensidade recebem valor zero e os demais recebem valor  máximo de intensidade (valor 1).

Então utilizamos o resultado do corte sobre o canal R,  a partir dele fizemos procedimentos para remover a região da pupila da íris, e na sequencia utilizamos o algoritmo de crescimento de região (algoritmo que a partir de um pixel “semente” vai formando uma área com os pixels vizinhos até encontrar bordas/ regiões de valor muito diferente de intensidade), assim conseguimos chegar a um reconhecimentos aceitável da região da íris. É claro que esse reconhecimento não é perfeito, o algoritmo ainda poderia ser aprimorado.

Fizemos ainda um tratamento para cores de íris mais claras e mais escuras (ambas necessitam de um procedimento diferenciado para tal reconhecimento). Algumas imagens com os resultados obtidos estão abaixo, são mostradas as imagens de 3 olhos diferentes onde respectivamente temos as imagens  Original, canal Red, Corte (ou imagem binarizada),  somente a íris + pupila, somente a íris  – passo onde existe um tratamento diferente para cores claras e escuras de íris, e o crescimento de região (onde a íris foi reconhecida):

olho exemplo 1:

 

olho exemplo 2:

olho exemplo 3 (um caso em que o algoritmo não conseguiu reconhecer a íris de maneira significativa):

Animação Digital

Na disciplina de Animação Digital, o projeto final consistia na produção de uma animação de no mínimo 1 minuto, tendo a mesma que ser desenvolvida totalmente no software Blender. Eu e dois amigos pensamos em uma história bastante simples:

Um homem palito frustrado por não se dar bem no esporte que praticava (Futebol), se depara com a grande oportunidade de fazer sucesso em outro esporte e então participa de um emocionante torneio em busca de sua satisfação pessoal.

Abaixo disponibilizo o vídeo do projeto desenvolvido por nós:

O vídeo acima foi o resultado da compilação final de nossa animação. Consiste de uma animação de 1:30 min, totalmente desenvolvida no software Blender.

Desenvolvimento de jogos utilizando XNA Game Studio 3.1

XNA é um framework (conjunto de classes prontas para uso específico, diferente de uma API que é um conjunto de classes para uso geral) para desenvolvimento de games escrito em C# e desenvolvido pela Microsoft.

Meu contato com XNA ocorreu durante a graduação, onde eu e três amigos participamos de um concurso de Plano de Negócios e fomos aprovados para trabalhar na pré-incubadora de empresas do Mackenzie com um projeto de desenvolvimento de games. Optamos pelo framework XNA devido ao enorme suporte dado pela Microsoft, a grande quantidade de materiais disponíveis online,  livros e a enorme documentação oficial, o diferenciando de outras linguagens/frameworks próprios para  desenvolvimento de games que ofereciam pouco suporte e muitas vezes com grande quantidade de programação via scripts, dificultando o desenvolvimento dos games.

A idéia que tivemos foi criar um game que uniria o jogo Mesoamericano de bola ( mais informações na wikipedia  https://pt.wikipedia.org/wiki/Jogo_de_bola_mesoamericano ) com a administração de recursos naturais de forma que o jogador obtivesse “créditos” que poderiam ser utilizados para melhorar suas armaduras ou até mesmo a qualidade dos campos em que os jogos ocorriam.  Este vídeo do youtube mostra como era praticado o jogo pela população Maia:

Embora não conseguimos terminar a implementação do nosso game foi possível desenvolver vários protótipos do mesmo, dentre eles alguns relacionados com a mecânica da bola (tanto em cenário 2D como em 3D), colisão entre jogadores e bola, desgaste da bola e das armaduras em função do tempo, animação de bola entrando no aro presente nas laterais do campo, dentre outros.

Abaixo disponibilizo alguns vídeos de demonstração de alguns dos protótipos desenvolvidos durante nosso período dentro da pré-incubadora.

Protótipo de mecânica da bola em 2D ( demonstrando também a colisão entre personagens e bola):

Protótipo de animação de bola entrando no aro nas laterais do campo ( cenário 2D):

Síntese de Imagens Digitais

Durante o 1° semestre de 2010 na disciplina de Síntese de Imagens Digitais,criei duas imagens sintetizadas por computador utilizando o software Blender ( https://www.blender.org/ ) para a modelagem dos objetos e  a biblioteca PBRT ( https://www.pbrt.org/ ) para a renderização das imagens.

Abaixo estão as imagens obtidas:

A imagem acima criei tentando reproduzir a imagem de uma taça de cristal em cima de uma mesa. Utilizei a modelagem de uma taça no Blender e depois fiz a renderização com a biblioteca PBRT .

A imagem abaixo foi o resultado do desenvolvimento do projeto da disciplina, tentei representar um inseto sobre uma folhagem:

Abaixo estão as imagens que criei dando printscreen sobre as telas do Blender e exibidas pela biblioteca PBRT durante o desenvolvimento do projeto:

Projetos Programação de Jogos

Durante o 2° semestre de 2009 eu e amigos desenvolvemos dois jogos na disciplina de Programação de Jogos, um deles foi desenvolvido na game engine “Game maker” e o outro na game engine “FPS Creator”.

O primeiro deles trata-se de um jogo de aventura em 2D, onde o jogador deveria controlar um gato e ir passando de níveis derrotando oponentes e chefes de fase.  O jogo contém 5 fases repletas de itens, inimigos e chefes, tento o jogador que usar seu raciocínio lógico e instinto na tentativa de concluir cada uma delas.  O vídeo abaixo demonstra brevemente as cinco fases do jogo:

Para quem gosta de documentação, ai vai o documento de design (documento que explica toda a história do jogo , a história e características de cada personagem individualmente, os objetos do jogo, dentre outros) do jogo “Spark Fragment”:

Documento de Design – Spark Fragment

Aplicação em VRML

Este foi um projeto desenvolvido durante a disciplina de Realidade Virtual. O objetivo era desenvolver, utilizando VRML, um ambiente tridimensional onde fosse possível ter a idéia de imersão. Neste ambiente deveria ser possível que o usuário pudesse, através dos recursos de um visualizador de arquivos .wrl como o Cortona3D ( https://www.cortona3d.com/Products/Cortona-3D-Viewer.aspx ),  “entrar e sair” do mesmo, como se ele estivesse imerso.  Claro que a simulação não é tão satisfatória, uma vez que não é utilizado nenhum tipo de dispositivo a não ser o próprio browser.

Uma demostração pode ser visualizada no vídeo abaixo:

No caso eu criei um ambiente que representava uma sala, onde tinham uma mesa, cadeiras ( objetos totalmente modelados por mim, sem importar nenhum modelo pronto) e também um sofá e um piano (ambos foram importados, porém eu texturizei / alterei as cores dos mesmos. Também pode-se observar outros detalhes, como o copo de água em cima da mesa, o tapete presente na sala e até mesmo a iluminação ambiente, todos também modelados por mim sem nenhum modelo pronto.

Jogo da Velha em Smalltalk

Durante o 5° semestre do curso de Ciência da Computação  houve um projeto em que o objetivo era desenvolver um jogo da velha na linguagem smalltalk utilizando a interface gráfica do ambiente squeak( https://www.squeak.org/ ) chamada Morphic.  Durante o semestre infelizmente não foi possível desenvolver o projeto da forma que eu gostaria, tendo ficado o jogo sem interface gráfica, apenas com a implementação da lógica. Porém, logo após o termino do semestre eu tive tempo para refazer o trabalho. O vídeo abaixo mostra o ambiente com o jogo em funcionamento:

Eu desenvolvi um modo de jogo contra a máquina , um modo Player1 vs Player2, um botão para resetar o game, um botão para resetar o placar e  contadores de pontuação.