Você está na página 1de 130

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL

INSTITUTO DE INFORMTICA
PROGRAMA DE PS-GRADUAO EM COMPUTAO

LEANDRO LESQUEVES COSTALONGA

Polvo Violonista: Sistema Multiagente para Simulao de


Performances em Violo

Dissertao apresentada como requisito


parcial para a obteno do grau de Mestre
em Cincia da Computao

Prof. Dr. Rosa Maria Vicari


Orientadora
Prof. Dr. Daniel Wolff
Co-orientador

Porto Alegre, abril de 2005

CIP CATALOGAO NA PUBLICAO

Costalonga, Leandro Lesqueves


Polvo Violonista: Sistema Multiagente para Simulao de
Performances em Violo / Leandro Lesqueves Costalonga. Porto
Alegre: PPGC da UFRGS, 2005.
87f.:il.
Dissertao (mestrado) Universidade Federal do Rio Grande
do Sul. Programa de Ps-Graduao em Computao, Porto Alegre,
BRRS, 2005. Orientadora: Rosa Maria Vicari, Co-orientador:
Daniel Wolff.
1. Computao Musical. 2. Sistema Multiagentes. 3. I. Vicari,
Rosa Maria. II. Wolff, Daniel. III. Ttulo.

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL


Reitor: Prof. Jos Carlos Ferraz Hennemann
Vice-Reitor: Prof Pedro Cezar Dutra Fonseca
Pr-Reitora de Ps-Graduao: Valquiria Linck Bassani
Diretor do Instituto de Informtica: Prof. Philippe Olivier Alexandre Navaux
Coordenador do PPGC: Prof. Flvio Rech Wagner
Bibliotecria-Chefe do Instituto de Informtica: Beatriz Regina Bastos Haro

AGRADECIMENTOS

Agradeo aos meus orientadores, Rosa Vicari e Daniel Wolff, pela pacincia e
dedicao que tiveram comigo ao longo do mestrado. Ainda, um agradecimento
especial ao Professor Eloi Fritsch que mediou minha vinda a Porto Alegre e com quem
aprendi tudo que sei sobre computao musical. No poderia deixar de lembrar e
agradecer aos meus colegas e companheiros de grupo: Evandro Miletto, Luciano Flores,
Vinicius Nobile e Rafael de Oliveira.
Especial agradecimento aos meus pais e avs que no mediram esforos e dedicao na
minha formao educacional. Ainda, agradeo ao Yuuki, meu grande parceiro canino
das madrugadas de estudo e solido nos frios domingos gachos.

SUMRIO

LISTA DE ABREVIATURAS E SIGLAS ............................................................ 7


LISTA DE FIGURAS.......................................................................................... 8
LISTA DE TABELAS ....................................................................................... 10
RESUMO.......................................................................................................... 11
ABSTRACT...................................................................................................... 12
1

INTRODUO.......................................................................................... 13

1.1

Motivao .......................................................................................................... 14

1.2

Trabalhos Relacionados ................................................................................... 15

1.3

Objetivos............................................................................................................ 20

1.4

Contribuies .................................................................................................... 21

FUNDAMENTAO TERICA................................................................ 23

2.1

Conceituao de Agentes ................................................................................. 23

2.2

Referencial Terico de Msica ........................................................................ 26

2.3

Resumo do Captulo ......................................................................................... 32

CONCEPO DO SISTEMA.................................................................... 34

3.1

Requisitos Identificados ................................................................................... 34

3.2

Abordagem Multiagente .................................................................................. 37

3.3

Esquema de comunicao ................................................................................ 43

3.4

Escolha das tecnologias envolvidas na construo ........................................ 44

3.5

Resumo do Captulo ......................................................................................... 49

4 BIBLIOTECAS PARA PROGRAMAO MUSICAL DESENVOLVIMENTO FOCANDO REUSO..................................................... 50


4.1

Pacote de Formao de Acordes (br.ufrgs.inf.lcm.formacaoAcorde); ........ 50

4.2
Pacote de Gerao das Representaes dos Acordes
(br.ufrgs.inf.lcm.representacaoAcorde) ..................................................................... 58
4.3
5

Resumo do Captulo ......................................................................................... 74


CONSTRUO DO PROTTIPO ............................................................ 75

5.1

Interface Grfica Pacote Webfake............................................................... 75

5.2

Adaptaes do Pacote de Interface ao Prottipo ........................................... 79

5.3

Componente para Desenho do Padro Rtmico............................................. 79

5.4

Criando uma composio................................................................................. 81

5.5

Criando Agente ME e Definindo a Harmonia ............................................... 81

5.6

Criando o Agente MD e os Padres Rtmicos ................................................ 83

5.7

Ouvindo os agentes pela Caixa de Som ...................................................... 87

5.8

Resultados ......................................................................................................... 88

5.9

Resumo do Captulo ......................................................................................... 89

CONCLUSO ........................................................................................... 90

6.1

Contribuies e Resultados Obtidos ............................................................... 90

6.2

Publicaes ........................................................................................................ 91

6.3

Trabalhos Futuros ............................................................................................ 93

REFERNCIAS................................................................................................ 95
ANEXO A ANLISE DE SOFTWARES MUSICAIS FOCADOS EM
VIOLO/GUITARRA........................................................................................ 98
Introduo ..................................................................................................................... 98
Dicionrio de Acordes .................................................................................................. 98
Editores de Tablatura .................................................................................................. 99
Sistemas de Treinamento ........................................................................................... 101
Software para Composio ........................................................................................ 101
ANEXO B TECNOLOGIAS JAVA APLICADAS A COMPUTAO MUSICAL
....................................................................................................................... 103
Introduo ................................................................................................................... 103
Java Sound (JSDK 1.4.2) ........................................................................................... 103

JMSL Java Music Specification Language ........................................................... 107


JMusic.......................................................................................................................... 112
Wire /Wire Provider................................................................................................... 123
JavaMIDI - 2001 ......................................................................................................... 124
NoSuch MIDI .............................................................................................................. 124
MIDI Share ................................................................................................................. 124
MIDI Kit...................................................................................................................... 124
JFugue ......................................................................................................................... 125
Tritonus ....................................................................................................................... 125
JASS (Real-time audio synthesis).............................................................................. 126
Jsyn .............................................................................................................................. 127
JSCORE ...................................................................................................................... 128
Xemo ............................................................................................................................ 128
Concluso .................................................................................................................... 129
ANEXO C DOCUMENTAO DOS PACOTES DE FORMAO E
REPRESENTAO DE ACORDES .............................................................. 130

LISTA DE ABREVIATURAS E SIGLAS

API

Application-Program Interface

BPM

Batidas por Minuto (beats per minute)

CME

Centro de Msica Eletrnica (UFRGS)

CM

Computao Musical

IA

Inteligncia Artificial

IPS

Instrument Performance System

MAS

Multiagent System

GUI

Graphical User Interface

JDK

Java Development Kit

LCM

Laboratrio de Computao Musical (UFRGS)

MIDI

Musical Instrument Digital Interface

OOP

Object oriented programming

PC

Personal Computer

UFRGS

Universidade Federal do Rio Grande do Sul

RMI

Remote Method Invocation

UML

Unified Modeling Language

LISTA DE FIGURAS

Figura 1.1 Tratamento do padro rtmico pelo Power Tab............................................. 17


Figura 1.2: Interface para definio harmnica do plug-in Rythm n Chord ................. 18
Figura 1.3: Representao grfica de um padro rtmico............................................... 19
Figura 2.1: Exemplo de tablatura em notao comum nos EUA. .................................. 26
Figura 2.2: Exemplo de registro musical popular normalmente encontrada no Brasil. . 27
Figura 2.3: Diagramaes de Acordes (desenhos dos acordes)...................................... 28
Figura 2.5: Partitura de bateria ....................................................................................... 30
Figura 2.6: Notao para partituras de bateria................................................................ 31
Figura 3.2: Diagrama de Interao entre os agentes do sistema.................................... 39
Figura 3.3: Dependncias do Agente ME....................................................................... 40
Figura 3.4: Dispositivo para tratar a latncia das mensagens MIDI............................... 44
Figura 4.1 : Classe CifraValida ...................................................................................... 52
Figura 4.2 : Classe CifraValidaMaker............................................................................ 52
Figura 4.3 : Autmato finito inicial. ............................................................................... 54
Figura 4.4: Autmato para tratamento de ttrades (acorde com stima) a partir do
estado S2...................................................................................................... 55
Figura 4.5: Autmato para tratamento de acorde com os intervalos de segunda,
quarta ou sextas. .......................................................................................... 55
Figura 4.6: Autmato para tratamento de ttrades diminutas......................................... 55
Figura 4.7: Autmato para tratar acordes menores. ....................................................... 56
Figura 4.8: Autmato para tratamento de acordes menores com intervalo de stima.... 56
Figura 4.9: Autmato para tratar acordes fora (intervalo dobrado de quinta) .............. 56
Figura 4.10: Autmato que trata alterao no baixo do acorde e inverses................... 56
Figura 4.11: Classes associadas a classe Acorde............................................................ 57
Figura 4.12: Classe Acorde ............................................................................................ 57
Figura 4.13: Classe AcordeMaker. ................................................................................. 58
Figura 4.14: Processo de gerao das representaes bsicas de acordes...................... 59
Figura 4.15: Dicionrio de acordes de representaes bsicas....................................... 59

Figura 4.16: Ligaes da classe Instrumento ................................................................. 60


Figura 4.17: Classe InstrumentoCorda ........................................................................... 61
Figura 4.18 : Criando um violo..................................................................................... 62
Figura 4.19: Particularidades de uma representao de acorde para um instrumento
de corda........................................................................................................ 63
Figura 4.20: Representao do acorde D Maior. .......................................................... 64
Figura 4.21: Algumas possibilidades do acorde Sol Maior no violo............................ 64
Figura 4.22 : Implementao de um gerador de representaes de acordes para
instrumentos de corda. ................................................................................. 66
Figura 4.23: Classe RepresentacaoAcordeInstrumentoCordaMaker.............................. 67
Figura 4.24: Classe ProcessadorRepresentacaoAcordeInstrumentoCorda..................... 69
Figura 4.25: Processamento de dobramentos em reapresentaes bsicas. ................... 71
Figura 4.26: Simulador de teste da escolha das representaes dos acordes. ................ 73
Figura 5.1: Diagrama de classes simplificado ................................................................ 76
Figura 5.2: Aplicao Exemplo ...................................................................................... 78
Figura 5.3: Estrutura de rvore que organiza os agentes do sistema.............................. 79
Figura 5.4: Componente para criao do padro rtmico. .............................................. 80
Figura 5.5: Exemplo de padro rtmico. ......................................................................... 80
Figura 5.6: Tela de criao da composio. ................................................................... 81
Figura 5.7: Informaes de um Gdim............................................................................. 82
Figura 5.8: Tela do Agente ME. ..................................................................................... 82
Figura 5.9: Tela do Agente MD ..................................................................................... 83
Figura 5.10: Tela da aplicao do padro rtmico a harmonia. ...................................... 86
Figura 5.11: Tela de execuo da composio. .............................................................. 86
Figura 5.12: Tela de Log. ............................................................................................... 87
Figura 5.13: Tela do Agente Caixa de Som .................................................................. 88

10

LISTA DE TABELAS

Tabela 3.1: Comparao entre API's que processam udio............................................ 46


Tabela 3.2: Comparao entre API's que sintetizam udio.. .......................................... 46
Tabela 3.3: Comparao entre API's que sequenciam eventos MIDI.. .......................... 46
Tabela 3.4: Comparao entre API's que enviam eventos s MIDI a dispositivos
externos........................................................................................................ 47
Tabela 3.5: Comparao entre API's que geram sons a partir de eventos MIDI........... 48
Tabela 3.6: Comparao entre API's que exibem informaes musicais em interfaces
grficas......................................................................................................... 48
Tabela 3.7: Comparao entre API's que trabalham com formatos de arquivos
musicais. ...................................................................................................... 48
Tabela 3.8: Comparao entre API's criadas para serem usadas na composio
musical......................................................................................................... 49
Tabela 4.1: Smbolos definidos na notao brasileira de cifragem ................................ 53
Tabela 4.2 : Clculo de Similaridade ............................................................................. 72

RESUMO

Este trabalho apresenta um sistema multiagente que permite simular execues musicais
em violo. Em uma execuo musical no violo observam-se elementos distintos que,
trabalhando em conjunto, produzem a sonoridade desejada pelo msico. Ou seja, as
aes tomadas pelo violonista, atravs do sincronismo de suas mos sobre o
instrumento, influenciam diretamente na sonoridade obtida. A idia bsica deste
trabalho desenvolver uma comunidade de agentes que represente as entidades
envolvidas em uma performance musical de violo. Quatro agentes foram identificados
e modelados no contexto desta dissertao. So eles:
Mo Esquerda (ME): Responsvel pela execuo dos acordes, ou seja, deve possuir o
conhecimento de formao de acordes dada a afinao do instrumento bem como a
interpretao das cifras que representam os acordes.
Agente Mo Direita (MD): Responsvel pelo ritmo impresso na msica;
Caixa de Som (CS): Permite que os usurios simplesmente escutem a composio, sem
nenhuma (ou muito pouca) interferncia na composio.
Agente Solista (SL): Projetado somente para ler arquivos MIDI e enviar notas para o
Agente Caixa de Som (CS).
O conhecimento relativo ao reconhecimento das cifras, gerao do acorde e posterior
clculo do desenho do acorde para um instrumento de corda foi encapsulado em duas
bibliotecas que visam auxiliar no desenvolvimento de outros novos projetos que
necessitem de funcionalidades similares. Ainda, so abordadas as questes da
comunicao entre os agentes e componentes grficos utilizados na captura de
informaes rtmicas.
O material musical produzido pelo sistema est contido no CD-ROM em anexo, bem
como a documentao das APIs.

Palavras-chave: computao musical, sistema multiagente, sistemas de performance


musical, padres rtmicos, formao de acordes.

12

A Multiagent System to Simulate Guitar Performances

ABSTRACT

This work presents a multiagent system that allows the simulation of musical guitar
performance. Distinct elements are clearly identified in a guitar performance. These
elements working together produce the desired sound imagined by the musician. In
other words, the actions taken by the synchronized musicians hands directly affect the
sound obtained. The main idea of this work is the development of a community of
agents that represents the entities involved in a guitar performance.
Four agents were identified and modeled in this work context. They are:
Left-Hand Agent (LH): Responsible for the chords execution, this means, it must
have the knowledge of chords composition once the instrument tuning is given, as well
as the textual chords symbol recognition.
Right-Hand Agent (RH): Responsible for the music rhythm.
Speaker Agent (SPK): Allow the user to hear the music, without interfering.
Solo Agent: Designed to read a MIDI file and send the events to the SPK Agent. In the
future, it will represent a human interacting with the system.
The knowledge related to the chords symbol recognition, chords composition and
chord shape calculus were encapsulated in two libraries that aim to assist future works
with similar features. Also, communication issues and graphical components used to
capture rhythm information are presented. The sound material produced as a result of
the system is in the attached CD-ROM, as well as the API documentation.

Keywords: computer music, multiagent system, musical performance system, rhythm


pattern, chords composition.

13

1 INTRODUO

Com a evoluo e popularizao da informtica, ferramentas usadas no processo de


criao sonora migraram para o computador pessoal a um custo aceitvel aos msicos e
entusiastas da msica. Muitos desses usurios no possuem formao musical
acadmica criando uma demanda por software mais simples de serem usados e que no
exigem profundos conhecimentos musicais. Apesar de sua popularidade, o violo no
teve sua interface projetada em muitas dessas ferramentas, sendo preferido os teclados,
seja por uma questo histrica ou pela facilidade na implementao. Assim sendo, os
violonistas (amadores ou profissionais) devem aprender a lidar com os teclados para
fazer uso destas ferramentas.
Em uma execuo musical no violo observam-se elementos distintos que, trabalhando
em conjunto, produzem a sonoridade desejada pelo msico. Ou seja, as aes tomadas
pelo violonista, atravs do sincronismo de suas mos sobre o instrumento, influenciam
diretamente na sonoridade obtida. Cada elemento tem um papel neste cenrio. Muitas
das atividades destes papis, por vezes, possuem uma interdependncia. Este o caso da
mo esquerda e da mo direita do violonista ao tocar um acorde.
Um dos objetivos do sistema proposto realizar a simulao do ritmo nas performances
de violo popular, permitindo inclusive simular a execuo da msica por diversos
violonistas.Tal ferramenta pode ser usada para auxiliar no ensino do instrumento e dos
conceitos rtmicos, na criao da parte do violo em uma composio ou simplesmente
por entretenimento, como no caso de msicos amadores.
O uso de agentes artificiais representando as mos do violonista permite simular
situaes para alm da condio natural do instrumentista, como por exemplo, a
sobreposio de diversos ritmos em uma mesma seqncia harmnica, bem como a
incluso de melodias, criando-se um efeito similar ao de um violonista com diversas
mos direitas tocando paralelamente. Para efeito de conveno, adotou-se como padro
o instrumentista destro, aquele que digita os acordes com a mo esquerda e percute as
cordas com a mo direita.
Popularmente, os padres rtmicos no violo so conhecidos como batidas e
dedilhados. Estes padres rtmicos associados com os acordes compem a linha
harmnica de uma msica acompanhada por violo. Os acordes j so suficientemente

14

bem representados pelas cifras ou at mesmo por grficos indicando o posicionamento


dos dedos no instrumento, entretanto os padres rtmicos no possuem uma
representao clara e universalmente aceita em notaes musicais1 alternativas a
clssica.
O foco do trabalho est no ritmo e sua representao (notao) para msicos (ou
aprendizes) sem uma formao acadmica. O objetivo conseguir representar
computacionalmente padres rtmicos para violo e trabalh-los de forma a obter novas
sonoridades.
A idia bsica deste trabalho desenvolver uma comunidade de agentes que represente
as entidades envolvidas numa performance de violo, baseando-se na hiptese de que
diversos problemas musicais podem ser resolvidos por meio de comunidades de agentes
(WESSEL, 2002; MIRANDA, 2002; WULFHORST, 2001).

1.1 Motivao
Vrios so os fatores que motivam a realizao desse trabalho. Considerando-se as
pesquisas que tm sido desenvolvidas no Laboratrio de Computao Musical, do
Instituto de Informtica e do Centro de Msica Eletrnica, do Instituto de Artes da
UFRGS, relacionados rea de tecnologia aplicada a msica, a presente pesquisa
representa uma continuidade dessas atividades ampliando o seu alcance e sua
divulgao.
Quando se fala em notao alternativa a notao musical clssica importante salientar
que as mesmas devem registrar, ao menos, as principais informaes da msica para
que ela possa ser reproduzida tal qual foi composta (harmonia, melodia e ritmo).
Visando um pblico crescente que demanda simplicidade, comum haver uma
separao dos diversos elementos musicais (WEST et al. 1991) e normalmente, as
informaes registradas sofrem simplificaes e adequaes ao instrumento que ser
usado na execuo. Notaes alternativas que utilizam acordes cifrados, como tablatura
2
, so talvez as mais usadas para registrar musicas populares que sero tocadas no
violo, apesar de serem normalmente extremamente limitadas no aspecto rtmico.
Apesar de existirem algumas diferenas em funo da cultura local do msico e do
estilo musical, as cifras so largamente utilizadas nas notaes musicais mais simples e
populares (SHER, 1991) e se concentram no componente harmnico da msica,
supondo o conhecimento da melodia e do ritmo por parte do msico, ou seja, no caso do

Mtodo de representao grfica dos sons de uma obra musical, de seu valor, durao etc. de modo que
ela possa ser lida para execuo.

Forma de notao em que a nota a ser tocada (ou o acorde) indicada pela posio dos dedos do
executante no brao do instrumento. Estenderemos o conceito de tablatura para qualquer notao, voltada
a instrumentos trasteados, que se utilize acordes cifrados e sua diagramao.

15

violo, as informaes das cifras so praticamente destinadas mo esquerda do


msico.
As informaes sobre o momento e a maneira em que cada uma das notas de um acorde
vai soar esto ligadas ao ritmo e ao andamento da msica. Estas informaes,
relacionadas mo direita do violonista, geralmente no so tratadas nas tablaturas, o
que pode se transformar em um problema na performance musical. Os diversos tipos de
notao grfica para a msica contempornea retornam ao carter indeterminado das
notaes mais antigas, dando ao intrprete participao na prpria feitura da obra
(ZAHAR, 1982).
Uma notao proporcional, capaz de registrar valores de tempo, comeou a ser utilizada
no sculo X, usando notas de diferentes formatos, embora as linhas de compasso
somente fossem introduzidas no sc. XV. A atual notao em pentagrama desenvolveuse gradualmente no decorrer desse perodo, e tem estado continuamente em uso h mais
de 400 anos (ZAHAR, 1982). Notaes registradas em papel, uma mdia analgica e
esttica, e que conseguem trabalhar com ritmo, como a partitura3, exigem um
treinamento prvio do leitor junto a um tutor, justo o que notaes simplificadas tentam
evitar. Sendo o computador um excelente medidor de tempo, essas notaes musicais
simplificadas ganham fora em uma verso computacional.

1.2 Trabalhos Relacionados


Apesar do seu potencial para software de acompanhamento automtico, a gerao de
ritmo no violo no tem sido discutida na literatura da computao musical (DAHIA,
2003). Recentemente comearam aparecer pesquisas no Brasil que trabalham com
ritmos de violo em sistemas computacionais, onde a UFPE tem merecido destaque com
o sistema de acompanhamento musical denominado Cyber-Joo.
No Cyber-Joo, 211 fragmentos musicais de tamanho fixos foram indexados e
classificados. Estes fragmentos foram extrados de gravaes originais de Joo Gilberto
atravs da ferramenta VexPat (SANTANA, 2003). A escolha da Bossa Nova como
ritmo deu-se em virtude da boa documentao e a escolha do uso de fragmentos
musicais ao invs de gerar notas em tempo real foi justificada pelo pouco esforo de
processamento. fato, entretanto, que o grupo de pesquisa j havia obtido bons
resultados com o sistema ImPact (RAMALHO, 1997) que utiliza a mesma tcnica de
fragmentos musicais, porm com outro instrumento (baixo) e ritmo (jazz).
A recuperao dos fragmentos que so usados no acompanhamento feito usando
regras de produo e raciocnio baseado em casos (Case-Based Reasoning) e tem como
entrada a linha harmnica e meldica (inteno musical). Ao que consta, este trabalho

A msica combinada para todas as partes em uma composio vocal ou instrumental.

16

continua em andamento, entretanto bons resultados j foram obtidos e avaliados por


especialistas.
Um outro trabalho que adota fragmentos musicais classificados por estilos musicais a
ferramenta comercial Band-in-a-box (BAND-IN-A-BOX, 1998). Diversos instrumentos
podem ser usados no acompanhamento e solos automticos e cada estilo musical possui
mais de 600 fragmentos de tamanhos variados e indexados por um peso definido pelo
usurio. Neste sistema, novos padres rtmicos tambm podem ser criados. A escolha
do fragmento randmica.
Na dissertao de mestrado intitulada Uma Abordagem Multiagentes para
Sistemas Musicais Interativos (WULFHORST, 2002), o autor afirma que dentre as
pesquisas que procuram abordar aspectos da Percepo Musical, a maior parte do
esforo tem se concentrado principalmente em aspectos relacionados classificao
harmnica. Muitos musiclogos, no entanto, consideram o ritmo como sendo o
componente mais fundamental da msica, presente desde os primrdios em todas as
culturas (GABRIELSON, 1986).
Como estudo de caso de sua dissertao, um sistema de acompanhamento musical foi
implementado usando o modelo denominado MMAS (Musical Multiagent System).
Implementamos agentes inteligentes capazes de acompanhar ritmicamente uma
execuo musical qualquer. Cada agente responsvel pela execuo de seu
instrumento. Seu papel principal manter-se em sincronia com os outros agentes,
ouvindo e seguindo o andamento dos agentes de maior prioridade (WULFHORST,
2002).
A tcnica utilizada para obter o sincronismo rtmico entre os vrios agentes musicais
baseou-se na percepo rtmica, descrito por Dannenberg e considerado pelo mesmo
uma tarefa surpreendentemente difcil (DANNENBERG, 1997). Seu programa usa uma
janela de tolerncia esttica, onde cada nota que tocada neste intervalo considerada
como sendo uma nota tocada no tempo forte. As outras notas, consideradas como
subdivises do tempo, so ignoradas. Quando a nota tempo forte soa antes do
momento previsto, automaticamente o programa passa a diminuir proporcionalmente o
perodo do pulso.
Utilizando uma arquitetura "blackboard", que centraliza as mensagens trocadas, o
sistema permite que cada um dos agentes se auto-ajuste a partir dos eventos musicais
lidos, dependendo de suas prioridades (que podem ser definidas pelo usurio). Nesta
implementao pode-se definir um padro rtmico para cada agente. O objetivo de cada
agente tocar seu instrumento em sincronia com os demais. Utilizando-se da tcnica de
percepo rtmica descrita anteriormente, o agente verifica se naquele momento deve
tocar ou no o seu instrumento, de acordo com a definio de seu padro rtmico.
O sistema proposto deve utilizar uma tcnica hbrida para sugerir o padro rtmico ao
usurio. A inteno da msica extrada da sria harmnica e meldica e a extrao dos
padres rtmicos de composies devem ser similares s relatados no Cyber-Joo, bem
como a percepo rtmica usada no MMAS deve ser utilizada em conjunto uma linha
guia (voz ou outro violo). O principal diferencial das duas propostas o fato do usurio
poder definir seu padro rtmico atravs de uma interface grfica ou tocada em
instrumento MIDI, assim como o uso de tcnicas de I.A pra recuperar e aplicar os
padres rtmicos.

17

1.2.1 Software Comerciais


Foram analisados 26 software, cujo foco o violo, distribudos em 4 categorias interrelacionadas proposta deste trabalho: dicionrio de acordes, editores de tablatura,
sistema de treinamento e software para composio. Devido ao grande nmero de
software musicais existentes enfocando o violo, foram escolhidos software cuja data de
distribuio de suas ltimas verses fossem superiores ao ano de 2002 e que possussem
uma verso gratuita para avaliao. A lista completa dos software analisados encontrase no Anexo A.
Dentre os software analisados, os mais relevantes para este trabalho e seus respectivos
pontos fortes so:
DAccord Guitar Chord Dictionary 2.0: Personalizao do modo de visualizao do
acorde no brao do instrumento, permitindo que canhotos (cordas invertidas) no
precisem se adaptar a visualizao de acordes executados por destros;
FretboardDots 2.2: No utiliza cifras para identificar o acorde, com isso consegue
contornar o problema da falta de padronizao dos smbolos. Os acordes so
identificados pelos intervalos que o compe.
WinChord 4.2: Permite alterar os parmetros do algoritmo de clculo do acordes como,
por exemplo, a afinao do instrumento, quantidade de dedos, e abertura dos dedos,
possibilitando um melhor ajuste as necessidades e restries do usurio
TablEdit 2.62: Permite a incluso de smbolos na tablatura referente a mo direita do
violonista.
Power Tab 1.7: Trabalha com padres rtmicos para violo e guitarra, fazendo uma
juno de figuras rtmicas (Rhythm Slashes) da notao clssica com a tablatura, como
mostra a Figura 1.

Figura 1.1 Tratamento do padro rtmico pelo Power Tab

WebLyrics 1.0.3.1: Possui um interessante mecanismo para arpejar os acordes,


associando os dedos do violinista as teclas do teclado numrico do computador.
Guitar Trainer 2.4: Associa a posio dos dedos no brao do instrumento nota na
partitura.
Voicings 4.06: Permite trabalhar separadamente as vozes dos acordes e sequenciandoas. como se estivssemos trabalhando o modo de arpejar, ou seja, informaes de mo
direita.
Rhythm n Chords Lite 2.04: Objetiva criar a parte de guitarra da composio atravs
da criao de uma progresso de acordes associados a padres rtmicos armazenados em
bibliotecas de ritmos. Este software se baseia nos mesmos princpios que norteiam a
proposta deste trabalho e ser descrito detalhadamente para que se possa traar as
principais diferenas entre as duas propostas.

18

1.2.2 Rhythm n Chords Lite


Software desenvolvido pela MusicLab em um projeto de cooperao entre EUA e
Rssia. Na verdade, um plug-in4 para os produtos da Cakewalk e sua idia principal
a separao da definio dos acordes da criao das estruturas rtmicas que toca.
A harmonia (os acordes) definida atravs de uma interface (Chord Chart View) que
imita a forma tradicional com que os guitarristas esto acostumados a trabalhar
(pentagrama com as divises dos compassos). Esta interface pode ser vista na Figura
1.2;

Figura 1.2: Interface para definio harmnica do plug-in Rythm n Chord

Os acordes podem ser inseridos usando smbolos padres da notao americana


organizados em um menu hierrquico ou escolhendo as notas em um teclado de piano
virtual. Devido integrao com o Cakewalk, ainda possvel importar uma trilha
MIDI com os acorde previamente definidos. Em teste com o software na verso Lite
2.04, a nica forma possvel foi atravs do menu de smbolos na notao americana
sendo as outras formas descritas na documentao do fabricante.
O ritmo definido atravs da associao de padres rtmicos (pr-gravados) trilha
onde esto inseridos os acordes. Os padres rtmicos podem ser selecionados de
bibliotecas de ritmo, que acompanham o plug-in. So criados em frases rtmicas de 1, 2,
4 e 8 tempos e contem vrias tcnicas de guitarra como strumming, muting, picking,
plucking, bass and strum, slow strum, muted strum, glissando, slide, etc

Plug-in: Pedao de software que estende a funcionalidade de um software previamente desenvolvido.

19

A representao visual do padro rtmico feita atravs de uma interface similar a


Piano-roll 5(ROADS, 1996), e pode ser vista na vista na Figura 1.3. Cada uma das
barras horizontais no interior da caixa representa um ataque (stroke) no violo e eles
podem ser de vrios tipos, identificados por sua colorao. Ataques normais so verdes,
muted so vermelhos, ataques lentos so azuis, tops so verdes claros e os marres so
de cordas tocadas individualmente. A durao da nota produzida representada pela
extenso do trao. Para cada tipo de ataque existe uma configurao da velocidade do
arpejo, da quantidade de vozes e do equilbrio do volume sonoro entre as vozes (voice
balance). O equilbrio do volume das vozes, em especial, um recurso que procura
fidelizar o som gerado atravs do controle de amplitude de cada voz do acorde, ou seja,
toma como referencia a terceira corda da guitarra e proporcionalmente a distancia do
referencial (3 corda) decrescido o volume.
O sistema faz a alternncia automtica entre os arpejos ascendentes e descendentes.

Figura 1.3: Representao grfica de um padro rtmico.

A parte resultante da juno do ritmo com a harmonia pode ser controlada por
parmetros de velocity (dinmica e equilbrio entre as vozes do acorde), arpeggiation
(tempo entre a primeira e ltima nota do acorde) e polifonia (numero de vozes do
acorde).
Um recurso interessante deste software o tratamento que ele permite fazer para que a
mudana de um acorde para o outro seja suave e sem sobressaltos. Isso feito
trabalhando as inverses dos acordes e assim, escolhendo a nota meldica do acorde
(segundo documentao do fabricante). Tambm possvel modificar o baixo do
acorde, o que o fabricante no considera uma inverso.
A idia da separao da parte harmnica da rtmica a mesma que norteia o
desenvolvimento da proposta deste trabalho, onde a harmonia considerada uma
simples progresso de acordes e o ritmo uma seqncia de ataques sem notas definidas.
Esta viso diferente da notao musical tradicional onde as notas e as informaes
rtmicas esto combinadas.
O trabalho proposto difere da ferramenta apresentada nos seguintes pontos:

Representao que deriva da poca dos tocadores de piano onde as notas eram codificadas como cartes
perfurados em rolo de papel. Tons individuais so assinalados verticalmente enquanto que o incio do
tempo e a durao dos eventos so codificados como pontos ou linhas horizontais, conforme a durao da
nota.

20

Definio harmnica com smbolos da notao brasileira de cifragem,


permitindo configurao da mesma;

Configurao do instrumento e do perfil do usurio;

Possibilidade da construo de padres rtmicos atravs de interface de clara


compreenso para violonistas;

Plataforma propcia para adio de inteligncia artificial para sugesto de


padres rtmicos e computao afetiva.

Uso independente de software de terceiros;

Transio entre os acordes por similaridade dos desenhos.

1.2.3 Tecnologias Atuais Disponveis aos Violonistas


Os aspectos rtmicos ligados ao violo possuem caractersticas prprias e que no so
modeladas no principal protocolo de comunicao entre instrumentos digitais (MIDI).
Arpejadores e seqenciadores so equipamentos (ou programas) facilmente encontrados
e manipulados por msicos, principalmente os que se dedicam criao de msica
eletrnica, entretanto existem algumas desvantagens na utilizao destes equipamentos
por violonistas:
A interface de utilizao dos equipamentos bem diferente da que os violonistas esto
acostumados, pois estes equipamentos geralmente esto em teclados workstations ou em
equipamentos especiais de interface pouco intuitivas.
Nos arpejadores mais simples, os programas de arpejo so estticos, no permitindo a
alterao, e mesmo que permitissem, seria de uma forma complexa demais para quem
est acostumado a dedilhar as cordas para obter efeito similar.
Tcnicas de mo de direita usadas por violonistas para conseguirem alterao na
sonoridade e expressividade no so disponibilizadas por esses equipamentos.

1.3 Objetivos
O objetivo principal deste trabalho a concepo e o desenvolvimento de um software
que permita aos msicos (em especial violonistas) a criao de composies definindo
separadamente os elementos musicais de uma execuo em violo, ou seja, melodia,
harmonia e ritmo.
Com esta viso, objetiva-se possibilitar a experimentao sonora de novos padres
rtmicos, fornecendo fragmentos musicais para composies e base tecnolgica para
sistemas de acompanhamento em tempo real.
1.3.1 Objetivos Especficos

Reconhecer cifras na notao brasileira (ou personalizada) e conseqente


formao dos acordes;

Calcular os desenhos de acorde baseados em instrumentos virtuais


(configurveis) e caractersticas dos usurios;

Calcular a similaridade entre desenhos de acordes visando a escolha mais


adequada na transio entre dois desenhos;

21

Desenhar uma interface grfica para captura de padres rtmicos, voltada a


violonistas;

Definir um protocolo de comunicao entre agentes musicais baseado no MIDI;

Desenvolver pacotes de software voltados programao musical em Java;

1.4 Contribuies
1.4.1 Cincia da Computao
Em 1876 Alexandre Graham Bell marcou a unio da tecnologia com o som atravs da
inveno do telefone, mas foi com a inveno do gramofone que as possibilidades de
armazenamento e alterao do som se estabeleceram.
J no meio musical foi Thaddeus Cahil que, por volta de 1906, mostrou o primeiro
instrumento musical que produzia som por meios eltricos. Pouco menos de uma dcada
depois (1915), Lee De Forest inventou o que seria a base para gerao de sons
eletrnicos, o oscilador.
H menos de meio sculo(1957), o primeiro programa de computador para msica foi
criado no laboratrios da Bell (Nova Jersey), por Max Mathews. O sucesso do Music I
deu origem a uma srie de programas musicais do mesmo criador. Em 1976, com a
difuso dos microcomputadores e a utilizao de linguagens de programao de alto
nvel, a computao musical se estabeleceu como uma promissora linha de pesquisa.
A computao musical uma rea multidisciplinar onde conhecimentos de diversas
reas so aplicados na msica. A Inteligncia Artificial tem tido um papel crucial na
histria da computao musical desde seu comeo nas dcadas de 50, sendo os maiores
esforos direcionados aos sistemas de composio e improvisao, marginalizando
sistemas para performance que usam tcnicas de I.A. para capturar, no somente
aspectos tcnicos, mas tambm aspectos afetivos implcitos na msica. Em uma
performance no violo, a expressividade est diretamente relacionada com a mo direita
do violonista agindo sobre aspectos rtmicos e de dinmica. O software desenvolvido no
contexto deste trabalho por si s j poderia ser considerado uma contribuio tanto para
a computao como para a msica, pois valida as teorias formalizadas nessa proposta
atravs do uso de I.A em sua concepo.
Muitas linguagens vem sendo usadas na programao de aplicaes musicais, entretanto
nota-se um crescimento do Java entre as principais linguagens para este fim.
Comparando Java com linguagens especialmente desenvolvidas de programao
musical como MAX/MSP, SuperCollider e Nyquist e KeyKit, pode-se afirmar que, por
ser uma linguagem aberta, Java pode combinar msica com outras funcionalidades da
linguagem, como rede, grficos, banco de dados.O fato de Java estar sendo amplamente
utilizada na programao de aplicaes musicais no significa que a nica ou a melhor
linguagem para este tipo de programao. Entretanto, os programadores parecem ter
maior facilidade em expressar-se atravs do Java seja qual for o domnio de
conhecimento, inclusive a msica. Os fatores de sucesso do Java como linguagem de
programao para software musicais so os mesmos que fizeram de Java uma
linguagem bem sucedida em reas mais tradicionais, dentre os quais cita-se a robustez,
portabilidade, facilidade de aprendizado, bom suporte pela indstria, fcil depurao,
bem projetada etc. H, contudo, algumas caractersticas que fazem de Java uma das
linguagens mais usadas para desenvolvimento de software musicais como, por exemplo,

22

o fato de trazer contigo uma biblioteca para tratamento de som e mensagens MIDI (Java
Sound).
As restries do Java Sound (biblioteca nativa para manipulao de som que acompanha
o Java) no desestimularam os programadores de aplicaes musicais que, ponderando
as vantagens da linguagem, comearam a desenvolver novas bibliotecas mais eficientes
e completas. Essas bibliotecas sero discutidas em maior detalhe no Captulo 4
destinado a implementao do prottipo, entretanto adianta-se que nenhuma das
bibliotecas brasileira ou foca no reconhecimento de cifras e gerao de acordes para
instrumentos virtuais, um dos objetivos deste trabalho e outra contribuio para a
computao.

1.4.2 Na msica
A msica vem se mostrando um campo muito promissor para auxiliar na descobertas de
tcnicas computacionais devido as suas caractersticas temporais e outros problemas
provenientes de execues musicais. Mas a utilizao das solues encontradas para os
problemas musicais em outras reas no a nica justificativa para a pesquisa da
computao musical.
H muitos sculos a msica usada no entretenimento, mas somente aps sua unio
com a tecnologia que sua difuso foi consideravelmente aumentada. Essa unio
praticamente irreversvel, visto a praticidade e qualidade que a tecnologia oferece aos
profissionais da msica, desde a concepo at a distribuio da mesma. A facilidade
propiciada pela tecnologia democratiza a produo musical.
A maior contribuio para a msica, deste trabalho, a prpria ferramenta, que pode
auxiliar no ensino do uso do instrumento e aspectos rtmicos, bem como permitir que
msicos que no toquem violo gravem uma parte de violo, em sua composio. A
experimentao sonora atravs da ferramenta, pode tambm contribuir para que novas
sonoridades ou estilos musicais sejam criados.

23

2 FUNDAMENTAO TERICA

Considerando-se a multidisciplinaridade desta pesquisa, faz-se necessrio uma breve


explicao dos conceitos computacionais e musicais envolvidos em seu contexto.
Entretanto os temas abordados j esto bem fundamentados na comunidade cientifica,
logo, este texto tem apenas a finalidade de contextualizar o leitor.

2.1 Conceituao de Agentes


A abordagem de agentes tem sido usada para tratar problemas no convencionais onde
elementos aparentemente distintos trabalhando em conjunto produzem um resultado
complexo demais para poder ser programado facilmente de forma centralizada. Estes
sistemas normalmente possuem caractersticas ditas inteligentes visto a
imprevisibilidade de suas aes, uma vez que cada elemento possui seu papel individual
e a habilidade de interao comum a todos estes elementos (agentes).
Um agente uma entidade real ou virtual, capaz de agir em um ambiente, de se
comunicar com outros agentes, que movida por um conjunto de inclinaes (sejam
objetivos individuais a atingir ou uma funo de satisfao a otimizar); que possui
recursos prprios; dispe (eventualmente) de uma representao parcial deste ambiente;
que possui competncia e oferece servios; que pode eventualmente se reproduzir e cujo
comportamento tende a atingir seus objetivos utilizando as competncias e os recursos
que dispe e levando em conta os resultados de suas funes de percepo e
comunicao, bem como suas representaes internas (REZENDE, 2003)(FERBE,
1991).
A definio acima muito abrangente e genrica, tanto quanto sugeriu Russell e Norvig
ao apresentar o conceito de agente como um paradigma integrador das tcnicas de I.A
(RUSSELL;NORVIG, 1995). Eles definem de maneira muito mais sucinta um agente
como tudo o que pode ser considerado capaz de perceber seu ambiente atravs de
sensores e de agir atravs de atuadores, podendo estes serem agentes humanos,
robticos e de software. Esta a viso adotada no contexto desse trabalho.
Uma caracterstica comum a esses sistemas a utilizao de uma metfora de
inteligncia baseada no comportamento humano: como ele pensa, raciocina, toma
decises, planeja, percebe, se comunica e aprende.
2.1.1

Propriedades dos Agentes

Segundo Hunhs e Singh, alguns conceitos que caracterizam os agentes(HUHNS, 1998),


so:
Autonomia de deciso: Capacidade de analisar uma situao, gerar alternativas de
atuao e escolher a situao que melhor atende seus objetivos. Quando um agente se

24

baseia no conhecimento anterior de seu projetista e no em suas prprias percepes,


dizemos que o agente no tem autonomia (RUSSELL, 2004).
Existem vrios modelos de deciso que conferem ao agente a caracterstica de
autonomia. O mais conhecido baseado na teoria da racionalidade limitada de agentes
(SIMON, 1987), segundo o qual um agente sabe identificar as alternativas de soluo,
avali-las e orden-las de acordo com um conjunto de critrios e, por fim, escolher a
melhor (REZENDE, 2003). Esse comportamento observado no Agente Mo Esquerda
no ato da escolha do desenho do acorde, como ser visto no Captulo 3.
Autonomia de Execuo: Capacidade de operar no ambiente sem interveno de outro
agente (geralmente humano). Esta capacidade est planejada para o Agente Solo e,
principalmente, no Agente Mo Direita.
Competncia para decidir: Capacidade de configurar sua atuao sem interveno
externa; Prevista para os Agentes Mo-Esquerda e Mo-Direita.
Existncia de agenda prpria: Lista de objetivos que concretizam suas metas. A
agenda de objetivos, assim como as restries, preferncias e modo de atuao (averso
ou no ao risco) de um agente podem ser configurveis. Prevista para o Agente MoEsquerda no ato do clculo do desenho do acorde.
Reatividade: Capacidade de reagir s mudanas do ambiente a partir do
reconhecimento de um contexto conhecido; Todos os agentes do sistema so reativos.
Adaptabilidade: Capacidade do agente de adaptar seu processo de deciso frente a
situaes desconhecidas; Os agentes do sistema no possuem essa caracterstica.
Mobilidade: Capacidade do agente de mover-se e ser executados em outras
plataformas; Possvel devido s opes tcnicas tomadas, porm no necessrio
devido aos requisitos do sistema, logo os agentes do sistema no possuem essa
caracterstica.
Personalidade: Capacidade do agente de personificar-se, utilizando recursos que
lembrem caractersticas humanas como a emoo ou o mau humor. Quantidade de
dedos nas mos, abertura mxima dos dedos e at quantidade de mos so
caractersticas humanas que podem ser configuradas no sistema. A incluso da noo de
emoo no Agente Mo-Direita a meta final deste trabalho, previsto para trabalhos
futuros.
Interatividade com o usurio: Capacidade de interagir com usurios e, considerando
os possveis mal-entendidos, reagir s falhas de comunicao de maneira aceitvel.
Presente nos Agentes Mo-esquerda, Mo-direta e Caixa de Som.
Ambiente de atuao: Caracteriza o local onde o agente vai atuar, isto , em ambientes
fechados (desktop) ou abertos (internet). Os agentes do sistema tm capacidade de atuar
nos dois ambientes, porm os testes se detiveram no ambiente Desktop.
Comunicabilidade: Capacidade de interagir com outros agentes computacionais para a
obteno de suas metas. Os agentes do sistema se comunicam entre eles usando
protocolo proprietrio baseado no protocolo MIDI.
Alm dessas caractersticas, os agentes podem ser classificados por sua cognio, pelo
seu foco (similaridades fsicas ou comportamentais com humanos) e por sua atuao
(isolada ou social). (REZENDE, 2003).

25

2.1.2 Sistemas Multiagentes


Os sistemas multiagentes focam na resoluo de um problema atravs de uma
comunidade de agentes cooperando ou competindo (por vezes, os dois casos),
entretanto, o que diferencia esta proposta de uma Resoluo Distribuda de Problemas
RDP, o fato do problema no ser conhecido previamente(REZENDE, 2003). Esses
sistemas surgiram quando a metfora da inteligncia passa a ser o comportamento
social, onde um conjunto de entidades inteligentes executa aes de modo coordenado
no seio de uma sociedade objetivando um comportamento global coerente.
Existem questes sutis a serem observadas no ambiente de tarefas antes de se
determinar se as tarefas devem ser feitas por um nico agente ou por uma comunidade
(RUSSELL, 2004). Muitas vezes, herdamos do mundo real a viso de uma nica
entidade realizando uma determinada tarefa e tomamos isto como a nica forma de
realizar esta atividade, como no exemplo deste trabalho, o violonista. Russel questiona e
explica: Um agente A tem de tratar um objeto B como um agente ou ele pode ser
tratado apenas como um objeto que tem um comportamento estocstico? A distino
fundamental saber se o comportamento de B ou no mais bem descrito como a
maximizao de uma medida de desempenho cujo valor depende do comportamento do
agente A.
Mas por que distribuir a inteligncia ou criar uma inteligncia coletiva? Ferber sugere
vrias respostas com um ponto em comum: lidar com a crescente complexidade dos
sistemas computacionais (FERBER, 1999)
Um agente que atua isoladamente em um ambiente tem, em princpio, um controle total
sobre os resultados de suas aes. Caso o agente, por outro lado, esteja imerso num
ambiente onde co-existam outros agentes, certamente ir ocorrer uma interferncia
social entre estes agentes, onde processos de coordenao e negociao podem ser
usados. (REZENDE, 2003).
Um grupo de agentes pode adotar ou ser submetido a diferentes formas de organizao.
Trs nveis de organizao foram descritas por Ferber (FERBER, 1999):
Nvel micro-social: Interesse nas interaes entre agentes e nas vrias formas de
conexes existentes entre um pequeno nmero de agentes. Este o nvel que concentra
grande parte dos estudos da IA e tambm esse trabalho.
Nvel dos grupos: interesse nas estruturas intermedirias usadas na composio de
organizaes mais complexas.
Nvel das populaes ou sociedades globais: Interesse na dinmica de um grande
nmero de agentes, estrutura geral do sistema e sua evoluo. Pesquisa relacionada
vida artificial.
Essas organizaes podem ser estticas ou dinmicas, se observadas atravs da
ocorrncia das interaes sociais. Em alguns casos, padres de interao que se repetem
muitas vezes so capturadas em estruturas pr-estabelecidas, ou seja, estticas.
Seguindo este raciocnio, duas classes de modelos para as interaes sociais so
apresentadas (CONTE; CASTELFRANCHI, 1992):
Modelos estticos: Os agentes tm um problema prvio a resolver. As interaes
sociais so limitadas por uma organizao pr-existente, que guia os agentes para atingir
o objetivo para qual o sistema foi concebido;

26

Modelos dinmicos: Interaes sociais e organizaes so estabelecidas de forma que


os agentes consigam atingir seus prprios objetivos. Este modelo pode ainda ser
classificado como baseado na utilidade (o mundo social um domnio da inferncia dos
agentes) e baseado na complementaridade (capacidade complementares entre os
agentes).
Ainda sobre a organizao dos agentes, Fox, Barbuceanu, Gruninger e Lin (FOX et al.
1998) afirmam que uma organizao consiste de vrias divises e subdivises, um
conjunto de agentes alocados nestas divises, um conjunto de papeis que os agentes
assumem e um conjunto de metas. Os papis so prottipos de funes a serem
desempenhadas pelos agentes na organizao.
O sistema multiagentes proposto atualmente no est distribudo em vrias mquinas
por uma questo relativa a facilidade no uso do mesmo por msicos, entretanto o
problema resolvido de forma distribuda entre os agentes e, se for desejvel no futuro,
podem ser fisicamente distribudos.

2.2 Referencial Terico de Msica


As sees subseqentes introduzem conceitos musicais diretamente relacionados a este
trabalho, ou seja, uma breve descrio de notaes musicais populares, cifragem de
acordes e uma explicao sobre ritmo.
2.2.1 Notao Musical Popular
comum encontrar nos principais meios de comunicao (web, revistas, tv) mtodos
que prometem ensinar violo em algumas poucas lies Sem entrar no mrito da
eficcia destes mtodos, fato que so consumidos e que eles popularizam conceitos
bsicos da execuo musical no violo. A notao musical adotada em muitos desses
mtodos a tablatura.
A tablatura uma forma de notao em que a nota a ser tocada (ou o acorde) indicada
pela posio dos dedos do executante no brao do instrumento. Originalmente era usada
para alades, mas ainda est em uso para violo e outros instrumentos trasteados. A
Figura 2.1 mostra um exemplo de tablatura escrita para um instrumento trasteado com
provavelmente com quatro cordas (quantidade de linhas horizontais) onde somente as
notas referentes as cordas soltas (representada pelo nmero 0) e a terceira casa (nmero
3) so tocadas. Este tipo de tablatura mais comumente encontrado fora do Brasil, em
especial nos Estados Unidos.

Figura 2.1: Exemplo de tablatura em notao comum nos EUA.

Ainda na msica popular, usada a notao harmnica simples, na qual a seqncia


harmnica assinalada pelas abreviaturas dos nomes dos acordes (cifras).

27

Os diversos tipos de notao grfica para a msica contempornea retornam ao carter


indeterminado das notaes mais antigas, dando ao intrprete participao na prpria
elaborao da obra. Caminho inverso pode ser feito se o interprete insere anotaes no
registro da obra, evoluindo a notao e adaptando-a a sua prpria cultura. Este fato
explica a aceitvel divergncia entre notaes (e seus smbolos).

Figura 2.2: Exemplo de registro musical popular normalmente encontrada no Brasil.

No Brasil, comum se referir a letras de msicas cifradas como tablaturas, mesmo que
erradamente. Nestes documentos aparecem por vezes as diagramaes dos acordes. Um
exemplo visto na Figura 2.
2.2.2 Cifragem de Acordes
Cifras nada mais so que smbolos usados para representar acordes. Esses smbolos no
so mundialmente padronizados, mas isto no chega a ser um grande problema para
msicos mais experientes, o que no verdade para novatos ou autodidatas.
Basicamente os smbolos em uma cifra identificam a nota fundamental, os intervalos
que devem ser adicionados ou evitados, alteraes e inverses. No captulo 4, destinado
a implementao do sistema, descreve-se o funcionamento de um reconhecedor de
cifras e conseqente gerao do acorde em dois pacotes de software destinados a
programao musical, frutos desta pesquisa.
Ao utilizar notaes baseadas na simples definio da seqncia harmnica, ou seja,
aquelas que usam cifras para representar os acordes, uma ferramenta pode ser
necessria, principalmente entre iniciantes: o dicionrio de acordes. O dicionrio de
acordes mostra como um determinado acorde pode ser executado no violo (ou outro
instrumento), ou seja, mostra o(s) desenho(s) do acorde, tal qual representado na Figura
2.3. comum encontrarmos estes desenhos em notaes populares que no somente
registram as notas, mas tambm no mtodo de produzi-las (ZAHAR, 1982).

28

Figura 2.3: Diagramaes de Acordes (desenhos dos acordes)

O desenho do acorde indica os trastes e as cordas que devem ser ponteadas pelo
violonista, mas no a ordem em que as notas devem ser tocadas e nem o intervalo de
tempo entre elas. Essas informaes dependem do padro rtmico (batida)
adotado.Verifica-se ento a primeira interdependncia entre desenhos de acorde e
padres rtmicos, ou seja, mo esquerda e mo direita.
Apesar de possveis diferenas na simbologia usada na cifragem, a diagramao dos
acordes uma informao relativamente esttica, ou seja, possvel dizer que a cifra
C representa um d maior e executado de uma determinada maneira no violo
(desenho do acorde) dada sua afinao. Logo, toda vez que a cifra C aparecer, o
aprendiz ir executar no violo a digitao referente ao acorde de D Maior que, muitas
vezes, ele memoriza e utiliza em vrias outras msicas.
2.2.3 Aspectos do Ritmo no Violo
Da mesma forma que o aprendiz repete o desenho do acorde aprendido em uma msica
em qualquer outra, ele repete a padro rtmico em msicas que julgue ser similares.
Entretanto, sem o acompanhamento de um tutor, difcil o aluno ter a certeza de que o
ritmo que ele est tentando executar est correto, pois a noo de tempo necessria no
ritmo, muitas vezes, no est bem fundamentada no aprendiz, fazendo com que o ritmo
soe mecanizado ou mesmo inapropriado. Esses blocos rtmicos que se repetem so
popularmente conhecidos como batidas e sub-classificados em dedilhados6 e
rasgueados7.Assumir que o ritmo est simplesmente relacionado com a mo direita do
violonista uma viso limitada da realidade, mas satisfatria em um primeiro momento.

Dedilhado: Tcnica de mo direita que usa as pontas dos dedos para tocar nas cordas em seqncia. Este
tipo de tcnica torna a sonoridade da msica mais suave, pois os sons produzidos so percebidos
individualmente e em seqncia.

Rasgueado: Tcnica de origem espanhola que e usa os dedos, no lado da unha, para bater nas cordas em
um movimento rpido de abertura de mo (comeando pelo dedo mnimo e finalizado com o dedo

29

Um aspecto constantemente desconsiderado por software e mtodos de ensino de


violo: a ligao existente entre a digitao do acorde e o ritmo (batida) empregada.
Ensinando o padro rtmico e a digitao dos acordes de maneiras independentes, podese levar o aprendiz a cometer erros em uma execuo musical como, por exemplo, tocar
a nota de uma corda que ficou solta e no pertencente ao acorde. Isto ocorre
principalmente porque o ser humano aprende tentando adaptar os esquemas mentais j
existentes em uma situao similar, ou seja, se em uma determinada msica ele aprende
uma digitao de G7 ento, ele tende a repeti-la em outra msica que tem outro
padro ritmo e pode no ser a digitao mais apropriada.
Conseguir representar o ritmo de uma forma amigvel e de fcil compreenso ao
usurio o primeiro passo para permitir que o mesmo crie e experimente novos ritmos.
Espera-se com o uso do computador nesta representao rtmica facilitar o
entendimento e simulao sonora do ritmo.
No contexto deste trabalho, um padro ritmo deve possuir as seguintes propriedades:
Quantidade de notas desejadas na digitao dos acordes (polifonia): J na escolha
dos acordes possvel visualizar a quantidade de notas simultneas que devem ser
executadas. Duplicaes, dobramentos, supresses, triplicao etc. so artifcios
utilizados para adequar um acorde s restries de um determinado instrumento e de uso
muito comum no caso do violo. Portanto, necessrio indicar com quantas notas
simultneas seu padro rtmico vai trabalhar. No caso do violo de seis cordas, estes
valores vo de um (melodia monofnica) at seis (total de cordas);
Durao do padro rtmico: Dada pela quantidade de tempos e figura de tempo;
Notas do acorde: Notas classificadas pela altura considerando oitavas (mais grave para
mais aguda): Como a linha harmnica independente do padro rtmico, no possvel
saber as notas no momento da definio do padro, logo, as alturas das notas indicam as
cordas que devero ser tocadas.
Durao das notas: Linhas horizontais de tempo (total dos compassos) so definidas
para cada nota. No momento que o usurio julgar que a nota deva ser tocada, uma marca
feita na linha do tempo, sendo que o comprimento da marca indica durao da nota.
Propriedades da execuo da nota: Em cada nota, determina-se as propriedades de
execuo da mesma, tais como: intensidade, balano, direo do arpejo e outros efeitos;

indicador) usando um dedo por vez para tocar todas as cordas seqencialmente. Neste tipo de tcnica, as
unhas do violonista servem para garantir um ataque preciso.

30

2.2.4 Definindo Ritmo


Ritmo a forma pela qual as diferentes duraes dos sons e pausas (mais breves ou
mais longas) se distribuem no tempo. Podemos criar combinaes rtmicas variadas,
simples ou de extrema complexidade (TOM DA MATA, 2005).
As duraes das notas e das pausas so representadas pelos valores rtmicos ou figuras:
da semibreve (de maior durao) semifusa (menor durao).
A Figura 2.5 mostra as figuras de tempo e seu valor comparativo, por exemplo, uma
semnima vale metade de uma mnima (TOM DA MATA, 2005).

Figura 2.4: Figuras de tempo usada pela notao musical tradcional.

O estudo do ritmo feito por todos os tipos de msicos, porm neste grupo destacam-se
os percursionistas e bateristas devido s caractersticas de seus instrumentos. A figura 8
mostra um exemplo de partitura escrita para esses msicos onde somente informaes
rtmicas so relevantes (BATERA, 2005).

Figura 2.5: Partitura de bateria

31

No existe uma notao clssica separada para bateristas, entretanto criou-se uma
notao baseada na notao clssica. A Figura 2.6 mostra o que significam os smbolos
usados na partitura (Figura 8).

Figura 2.6: Notao para partituras de bateria

A seguir sero apresentados alguns termos e explicaes relacionadas ao conceito de


ritmo (TOM DA MATA, 2005):
Pulso
As combinaes rtmicas (clulas rtmicas) de uma msica tm sempre como referncia,
explcita ou implcita, uma pulsao rtmica constante e regular. Esta sucesso de
pulsaes regulares so os tempos.
Compasso mtrica
Esta srie de pulsaes, isto , de tempos de mesma durao, podem ser agrupados dois
a dois, trs a trs, quatro a quatro. Estes so os agrupamentos mais comuns na msica
ocidental seja popular, folclrica, ou na chamada msica clssica. Entretanto, em outras
culturas, como nas msicas tradicionais do Oriente e da frica, so comuns outros
agrupamentos. Estes agrupamentos de tempos so o que chamamos de compassos. O
primeiro tempo sempre um pouco mais forte ou mais acentuado.
Quando os compassos so agrupados de dois em dois tempos, dizemos que a msica
est no compasso binrio. De trs em trs, ternrio. De quatro em quatro,
quaternrio.Por exemplo: marcha, baio, tango e samba so binrios. A maior parte das
cantigas de roda tambm. J o compasso da valsa ternrio.
Representao dos Compassos
Logo no incio da msica, na primeira pauta, encontramos dois nmeros sobrepostos. O
numerador indica quantos tempos teremos em cada compasso. O denominador indica
qual a figura, o valor rtmico adotado que vale um tempo, isto , qual dos valores
(apresentados na Figura 4) equivaler a um tempo naquela msica. A isto chamamos
unidade de tempo. Tendo a unidade de tempo, podemos deduzir a unidade de compasso,
isto , qual a figura que, sozinha, demorar (soar) durante todos os tempos do
compasso.
Diviso dos Compassos e Subdiviso dos Tempos
Numa msica cada pulsao, ou tempo, tem exatamente a mesma durao. Se num
tempo temos mais de uma nota, a durao deste tempo ter que ser subdividida entre

32

estas notas. Tambm podemos ter notas que duram mais de um tempo ou mesmo que
duram uma quantidade de tempos que supera a quantidade de tempos do compasso. Para
aumentar o valor de uma nota usamos:
Ponto de Aumento
Um ponto colocado direita da nota e que equivale metade do valor da nota.
Ligadura
Uma linha curva que liga duas notas seguidas na mesma altura, ou seja, duas notas que
tm o mesmo som e, portanto, ficam no mesmo lugar na pauta. Neste caso, somente a
primeira emitida respeitando-se o seu valor rtmico e prolongando-se o seu som
durante o tempo do valor rtmico seguinte. Desta forma, a nota deve soar pela durao
dos valores somados.
Deslocando as acentuaes naturais
Muitas vezes nas msicas temos um efeito de deslocamento da acentuao natural, ou
seja, o tempo forte, primeiro tempo, preenchido por pausa (silncio) ou ento temos
um prolongamento do som anterior. Convm lembrar que todo tempo tem uma parte
forte e outra fraca. A parte forte de um tempo exatamente o momento em que a
marcao do tempo feita. O resto da durao do tempo constitui a parte fraca.
Portanto, este deslocamento pode ser feito em qualquer um dos tempos do compasso.
Sncope
Quando uma nota executada em tempo fraco ou parte fraca de tempo e se prolonga ao
tempo forte ou parte forte do tempo seguinte. A sncope regular quando as notas que a
formam tm a mesma durao. chamada de irregular quando suas notas tm duraes
diferentes.
Contratempo
Quando a nota soa em tempo fraco, ou parte fraca de tempo, sendo antecedida, isto ,
tendo no tempo forte ou na parte forte do tempo, uma pausa.
Tanto a sncope quanto o contratempo produzem um efeito de deslocamento das
acentuaes naturais. So muito utilizadas na nossa msica, como no samba e bossa
nova.
Andamento
Andamento o que vai determinar a velocidade do pulso, dos tempos. Algumas vezes,
dois intrpretes gravam a mesma msica e um canta um pouco mais lento e o outro, um
pouco mais rpido. Assim, o ritmo e o andamento so os componentes bsicos da
marcao.
O metrnomo, aparelho inventado por Louli em 1710, regula a quantidade de pulsos
por minuto (bpm) ajudando a precisar a durao exata dos tempos.No decorrer de uma
msica o andamento pode ser alterado em algum trecho para dar mais expresso.

2.3 Resumo do Captulo


Este Captulo procurou introduzir conceitos que sero necessrios para a compreenso
do trabalho proposto. Referente a computao foram apresentados conceitos vinculados
a resoluo de problemas por uma comunidade de agentes e suas propriedades. J no

33

campo musical, foram apresentadas de forma sucinta algumas notaes musicais


alternativas, cifragem de acordes e conceitos de ritmo..

34

3 CONCEPO DO SISTEMA

Neste captulo trataremos do processo de desenvolvimento da aplicao e as idias que


nortearam seu desenvolvimento, dando foco para nos requisitos, anlise preliminar e
algumas decises de projeto. Muito dos requisitos identificados so passveis de
reutilizao, portanto optou-se por criar bibliotecas que pudessem ser utilizadas
separadamente deste sistema. Ainda, teremos no Captulo 4 apresentaremos o prottipo
e seus resultados.O paradigma adotado foi o orientado a objetos com modelo de ciclo de
vida em espiral.
Para a concepo idealizao e desenvolvimento do software objeto deste trabalho,
foram seguidas as seguintes etapas:
Identificao dos requisitos desejveis: Identificao das funcionalidades desejveis
do software. bom salientar que nem todos os requisitos foram necessariamente
construdos em funo de decises de projeto e/ou restries tcnicas;
Anlise do sistema: Construo de modelos que visam o esclarecimento e completo
entendimento do domnio do problema em estudo.
Projeto: Adaptao dos modelos da anlise sob a tica da tecnologia selecionada para a
implementao do prottipo, ajustando as necessidades levantadas a questes tcnicas.
Implementao/Codificao: Traduo dos modelos de projeto para a linguagem de
programao definida tambm em projeto. Testes individuais tambm so previstos
nesta fase.
Testes e avaliaes: Testes de integrao e avaliao do prottipo.
Neste Captulo daremos foco para nos requisitos, anlise preliminar e algumas decises
de projeto. Muito dos requisitos identificados so passveis de reutilizao, portanto
optou-se por criar bibliotecas que pudessem ser utilizadas separadamente deste sistema.
Ainda, teremos no Captulo 4 apresentaremos o prottipo e seus resultados.O paradigma
adotado foi o orientado a objetos com modelo de ciclo de vida em espiral.

3.1 Requisitos Identificados


O requisito bsico que norteia o desenvolvimento desta aplicao a separao dos
elementos musicais (harmonia, melodia e ritmo) em uma execuo no violo. comum
haver uma separao destes elementos musicais buscando a simplicidade do
entendimento da msica e dos software musicais. (WEST et. al. 1991)

35

3.1.1 Definio da harmonia


Cabe ao usurio definir a seqncia dos acordes que compe a linha harmnica de sua
msica. Ainda possvel que vrias harmonias sobreponham-se na mesma composio.
A definio da seqncia harmnica feita atravs das cifras, onde o usurio entra,
seqencialmente, a cifra referente ao acorde. Blocos com uma seqncia de acordes
denominados Partes podem ser criados possibilitando ao usurio a incluso da mesma
seqncia harmnica em vrios locais da composio. Exemplo: supondo as partes A e
B, a composio poderia ser A + B + A ou A + A + B;
No existe nenhuma referencia ao tempo na definio da harmonia, somente uma
seqncia simples de acordes.
3.1.2 Personalizao dos Smbolos da Cifragem
Como no esto mundialmente padronizados, certos smbolos usados na cifragem
podem divergir em funo da origem da msica. Logo, deve ser possvel adaptar os
smbolos a cultura do usurio.
3.1.3 Reconhecimento das Cifras e Clculo do Acorde
Uma vez definida a notao de cifragem, o sistema deve ser capaz de reconhecer as
cifras e gerar um acorde resultante, caso a cifra seja vlida. Caso existam problemas
com a cifra, o sistema deve explicar a causa do erro e sugerir correes (no
implementado nessa verso).
O acorde calculado deve possuir a descrio do papel (intervalo) de cada nota que
compe o mesmo.
3.1.4 Clculo do Desenho do Acorde para Instrumentos Virtuais Configurveis
O desenho do acorde uma representao de como executado o acorde em um
determinado instrumento, portanto para que o desenho do acorde possa ser calculado o
instrumento e afinao do mesmo devem ser definidos.
E desejvel a visualizao do desenho do acorde em uma interface grfica similar ao
instrumento real.
O sistema em questo tem como instrumento base o violo de seis cordas com a
afinao padro (Mi(6)- L R Sol Si Mi(1)), mas tanto o instrumento quanto
sua afinao podem ser modificados.
3.1.5 Definio da Melodia
Da mesma forma que na linha harmnica, o usurio pode determinar a linha meldica
de toda a msica ou simplesmente um solo. Ele pode fazer isto importando um arquivo
musical (MIDI) ou escrevendo as notas diretamente na partitura (no implementado
nessa verso).
3.1.6 Definio do ritmo
Como j mencionado anteriormente, o ritmo deve ser definido independente da
harmonia. Talvez isso no seja um pensamento natural para msicos que esto
acostumados a faz-lo de forma unificada. De qualquer forma, o ritmo o principal
dado a ser tratado pelo sistema e portando mecanismos de captura destes dados devem

36

ser oferecidos ao usurio. Dois dispositivos foram pensados: interface de comunicao


com instrumentos MIDI (no implementado nessa verso) e uma interface grfica para
usurios sem o instrumento.
Blocos com informaes rtmicas denominados padres rtmicos devem ser vinculados
informao harmnica para que a msica possa soar. Cada estilo de msica tem um
ou mais padres, e estes, organizados em bibliotecas de ritmo, podem ser usados para
compor um padro rtmico mais complexo (no implementado nessa verso).
Arquivos MIDI podem ser usados como fonte para extrao de padres rtmicos.
3.1.7 Controle da execuo da msica;
Controlar o andamento permitir ao usurio iniciar, parar, paralisar, avanar e
retroceder na msica (implementado parcialmente nessa verso).
3.1.8 Controlar volume da msica (mixado);
A msica que ouvida pelo usurio uma mistura de vrios padres rtmicos utilizando
como base a(s) linha(s) harmnica(s) e a(s) linha(s) meldica(s).
Este requisito permite amplificar ou atenuar gradualmente o volume de todos estes
canais em conjunto.
3.1.9 Possibilitar escolha do sintetizador usado para gerao das notas;
A qualidade do som gerada pelo sistema est vinculada a alguns componentes de
hardware e software, como por exemplo, a placa de som, o sintetizador, a prpria
arquitetura do computador(Mac/PC) e seu Sistema Operacional (Win/Linux/MacOS).
Dentre estes, destaca-se o sintetizador.
O sintetizador um equipamento que permite gerar ou modificar caractersticas de um
som com o intuito de criar novas sonoridades ou at mesmo, atravs de determinadas
tcnicas, recriar um som acstico. J existem sintetizadores virtuais, ou seja, software
que simulam o hardware.
Este requisito permite que o usurio escolha qual sintetizador quer usar para gerar os
sons.
3.1.10 Ajuste individual dos controles de determinado instrumento;
Cada padro rtmico, bem como a linha meldica, pode ser representado por um
instrumento ou um tipo de violo que proporciona ao ouvinte uma sonoridade mais
prxima da realidade.
Cada instrumento usado nesta composio deve estar em um canal independente, ou
seja, devemos ser capazes de controlar individualmente cada uma dos seguintes
atributos:

Instrumento: Deve ser possvel alterar o instrumento que gera uma determinada
sonoridade (timbre) de um padro rtmico ou linha meldica;

Efeitos: Controle no volume, stereo (pan), eco (delay), reverberao (reverb) e


outros relativos a cada sintetizador proporcionam a possibilidade de aprimorar a
sonoridade ao ponto exato (ou prximo) que o compositor definiu (no
implementado nessa verso).

37

Controle de solo, mudo (mute) e desligamento de um canal;

3.1.11 Persistir dados para futuro uso (inclusive MIDI);


Visando a continuao da composio previamente iniciada sem a perda do que j foi
feito, deve-se disponibilizar ao usurio a opo de salvar: os padres rtmicos, a
seqncia harmnica e meldica, a msica em formato MIDI e todos os itens juntos em
um nico projeto.

3.2 Abordagem Multiagente


O desenvolvimento de sistemas interativos musicais acompanhou a evoluo das
tcnicas de Inteligncia Artificial e Engenharia de Software. Nas dcadas de 60 e 70 os
sistemas eram freqentemente implementados atravs de algoritmos iterativos
(CONGER, 1988). Recentemente, a comunidade comeou a usar em aplicaes
musicais tcnicas como: sistemas multiagente, vida artificial e algoritmos genticos
(BILOTTA et al. 2000).
A idia bsica deste trabalho desenvolver uma comunidade de agentes que represente
as entidades envolvidas em uma performance musical de violo. A organizao do
sistema baseia-se em um modelo dinmico, ou seja, apesar de ter um problema prvio a
ser resolvido, a decises dos agentes s podem ser tomadas imediatamente antes da
execuo baseada em uma srie de parmetros.
Quatro agentes foram identificados e modeladas no contexto desse trabalho. So agentes
reativos, com autonomia de deciso (uma vez os dados iniciais fornecidos), com agenda
prpria que pode ser configurada, comunicativos, imveis, interativos e que atuam tanto
em ambientes fechados como abertos. So eles:
Mo Esquerda (ME): Responsvel pela execuo dos acordes, ou seja, deve possuir o
conhecimento de formao de acordes dada a afinao do instrumento bem como a
interpretao das cifras que representam os acordes. Ainda, responsabilidade desta
entidade escolher qual o melhor desenho de acorde baseado na habilidade e restries
do usurio.
Agente Mo Direita (MD): Responsvel pelo ritmo impresso na msica e muito da
expressividade do msico, por isso comum omitir informaes rtmicas nas notaes
musicais populares; Isto, ao mesmo tempo em que flexibiliza a execuo, confunde os
iniciantes. As informaes de um padro rtmico basicamente consistem em dizer quais
cordas que sero tocadas em um determinado momento. Esta informao em conjunto
com as notas definidas na linha harmnica do Agente de Mo Esquerda, indica as
mensagens MIDI que iro propiciar a gerao do som pelas Caixas de Som.
Agente Caixa de Som (CS): Permite que os usurios simplesmente escutem a
composio, sem nenhuma (ou muito pouca) interferncia na composio.
Configuraes de sntese, controle de andamento, volume, transposio de tom e outros
parmetros relativos execuo e sonoridade da msica podem ser configurados.
Existe ainda um quarto agente que pode aparecer nesta interao, o Solista. Este
responsvel por reproduzir uma melodia, em qualquer que seja o instrumento. No nosso
escopo de trabalho um agente que no influi diretamente nos resultado e, portanto, no
ser descrito em detalhes.

38

A seguir descreveremos com maiores detalhes a arquitetura do sistema, os agentes, seus


papis, responsabilidades e interaes.
3.2.1 Arquitetura
Na arquitetura proposta, os agentes se situam no contexto de uma composio, ou seja,
para cada nova composio um novo grupo de agentes instanciado. Para se obter um
resultado sonoro, necessrio ao menos um Agente ME, um MD. Opcionalmente um
CS se for desejado trabalhar os parmetros da execuo.
A distribuio dos agentes pode se dar em diferentes mquinas. Entretanto, neste tipo de
ferramenta, onde a msica objetiva gerar material musical rapidamente e da forma mais
prtica possvel, optou-se por deix-los rodando em uma nica mquina ainda que o
protocolo de comunicao e aspectos tcnicos possibilitem uma separao em um
estgio futuro.
A comunicao entre os Agentes ME e MD bidirecional e pode ser mltipla, ou seja,
um agente ME pode conversar com diversos agentes MD, bem como um agente MD
pode conversar com diversos agentes ME. No foram modeladas interaes entre
agentes do mesmo tipo. Os Agentes CS interagem como todos os outros tipos de
agentes da mesma composio. A Figura 10 mostra um exemplo de interao entre os
diversos tipos de agentes no contexto de uma composio. Neste exemplo, a harmonia
estabelecida no Agente ME executada por dois ritmos sobrepostos, cada um
representado por um Agente MD. A caixa de som (CS) reproduz a sonoridade obtida
desta interao.

Composio X
MD
ME

CS
MD

Figura 3.1: Arquitetura de uma composio.

O fluxo das mensagens inicia no agente ME quando ele carrega as informaes


harmnicas e tenta reconhecer os smbolos dos acordes. O processo de escolha do
melhor desenho de acorde baseado na facilidade de execuo, similaridade com o
acorde anterior, caractersticas do instrumento (afinao), caractersticas do
instrumentista e tambm informaes rtmicas.
Para que uma harmonia fique completa e apta a execuo necessrio que seja
associada a ela um ou mais padro(oes) rtmico(s). Esse processo feito pelo no Agente
MD. Feito isso, possvel solicitar a execuo da msica, como mostra a Figura 3.2.

39

: Usurio
: Agente ME
* entrar cifra
At que
harmonia
esteja
completa

: Agente MD

: Agente CS

Analisar Cifra e gerar acorde

definir padro ritmico

associar padro ritmico a harmonia

ouvir composio

* gerar notas no tempo


* gerar desenho do acorde(padrao ritmico)

Para cada
acorde de
cada agente
MD.

Figura 3.2: Diagrama de Interao entre os agentes do sistema.

A diagrama de interaes representado na Figura 3.2, baseado na UML, mostra o


usurio e os Agentes como atores capazes de prestar servios mediante as requisies
(flechas indicando a troca de mensagens). Esta figura representa somente o fluxo
normal do caso de uso tocar composio.
3.2.2 Agente Mo Esquerda (ME)
Apesar do foco do trabalho proposta estar no aspecto rtmico (Agente MD), o Agente
ME agrega algumas das tarefas mais trabalhosas e cognitivas em suas
responsabilidades. Para ajudar a programao destas tarefas, optou-se por criar pacotes
de software que pudessem ser utilizados tanto pelo agente ME, como tambm por outros
trabalhos futuros do grupo. Estes pacotes sero visto no Captulo 4.
As principais tarefas do Agente ME so:

Reconhecimento e validao das cifras do acorde baseado em uma notao que


possa ser personalizada;

Clculo do acorde informando ao usurio as notas e intervalos que compem


aquele acorde;

Clculo do desenho (ou representao) do acorde levando-se em conta


propriedades do instrumento virtual utilizado e caractersticas do instrumentista;

40

o Propriedades dos instrumentos virtuais: Quantidade de cordas, afinao,


quantidade de trastes;
o Propriedades do instrumentista: Quantidade de dedos da mo esquerda,
quantidade de dedos da mo direita, abertura mxima de dedos (medida
em trastes).

Escolha do melhor desenho de acorde considerando-se: facilidade na transio


do desenho de acorde anterior, facilidade na execuo do desenho de acorde
(quantidade de dedos, proximidade da cabea do violo, abertura de dedos, uso
de pestana), e o padro rtmico. O primeiro desenho de acorde escolhido
somente pela proximidade em relao cabea do violo, garantindo que soe em
uma regio mais agradvel.

A escolha do melhor desenho do acorde ser detalhado na descrio do pacote


de Formao de Acordes, no prximo Captulo. Ressalta-se, entretanto, que o
algoritmo padro no considera o padro rtmico como uma varivel e precisou
ser estendido para tal. Fundamentalmente dois aspectos do padro rtmico so
considerados:

Polifonia: Quantidade de notas polifnicas do padro rtmico (definio


obrigatria em dedilhados);

Inexistncia de cordas soltas em arpejos: Quanto o nmero de notas simultneas


(incio no mesmo tempo) supera o nmero de dedos da mo direita, conclui-se
que as cordas no podero ser pinsadas, logo um arpejo rpido (s vezes com
palheta) necessrio. Nestes casos as cordas do desenho do acorde precisam ser
contguas, pois no daria tempo de pular alguma corda. Ainda, a polifonia
opcional nestas situaes.

O diagrama da Figura 3.3 mostra como o Agente ME obtm as informaes necessrias


para efetuar o processamento das funcionalidades acima citadas.

IntrumentoCorda
qtCordas
afinacao
qtTrastes

PerfilUsuario

<<Actor>>

Agente ME
1

(from Use Case View)

aberturaDedo
qtDedoME
qtDedoMD

NotacaoCifragem
* simbolos Cifragem

Figura 3.3: Dependncias do Agente ME.

Somente informaes harmnicas so tratadas por pelo Agente ME. A harmonia


definida no deve ter nenhuma informao de tempo, pois se considera esta propriedade
referente ao ritmo, portanto, tratado no agente MD. Logo, formula de compasso, figura
de tempo, e o prprio compasso so informaes desprezadas por este agente.
Alm dos acordes, o usurio pode querer registrar algumas tcnicas e efeitos prprios da
mo esquerda. Ainda que no implementado no prottipo, so elas:

41

Bend: Alterao proposital na afinao, obtida ao se puxar corda de um violo para


cima. Apesar de ser mais comum na melodia (Agentes Solistas) tambm pode ser usado
na harmonia.
Vibrato: Consiste em movimentos rpidos dos dedos da mo esquerda sobre a corda
criando uma variao da altura da nota. A intensidade e velocidade podem ser
controladas.
Hammer-Ons: Ligado ascendente; tcnica do violo e da guitarra que consiste em tocar
uma nota de maneira convencional e a nota mais aguda seguinte apenas com a mo
esquerda, 'martelando' a corda contra a escala.
Pull-Offs: Ligado descendente; tcnica do violo e da guitarra que consiste em tocar
uma nota de maneira convencional e a nota mais grave seguinte apenas com a mo
esquerda.
Trill: Rpida alternncia entre duas notas usando sucessivos hammer-ons e pull-offs.
Harmnicos: Som gerado pela oscilao de corpo vibrante em freqncias mltiplas
(x2, x3, x4, etc) da freqncia fundamental. No violo os harmnicos podem ser
gerados de vrias maneiras, a mais comum com toque suave com o dedo da mo
esquerda na corda em uma posio equivalente a uma diviso inteira da corda (1/2,
1/4/1/8 etc). Existem vrio tipos: natural, artificial, tapped, pitch etc.
Slide: o deslizar o(s) dedo(s) da mo esquerda sobre os trastes da guitarra/violo
enquanto a corda est vibrando. Possui alguns tipos:
Legato Slide Toque a primeira nota e deslize para a segunda que no tocada.
Shift Slide - Toque a primeira nota e deslize para a segunda que tocada.
Slide Into - Legato slide de uma nota comeando de um ponto pr-determinado e
parando na nota indicada.
Slide Out Of - Legato slide de uma nota terminando em um ponto pr-determinado.
3.2.3 Agente Mo Direita (MD)
Permite a definio de um padro rtmico para violo atravs de uma interface
especialmente desenvolvida para isso.Aps obter notas com o agente ME, as envia para
o agente CS com as informaes de tempo pertinentes. Alm da interface, foi modelada
a captura dos padres rtmicos atravs da extrao dos mesmos de arquivos MIDI ou
diretamente de um instrumento MIDI.
Teoricamente, um agente MD pode estar vinculado a diversos ME. Restringimos no
prottipo que um Agente MD deve estar vinculado a somente um agente ME. O agente
MD est ligado diretamente ao agente CS em uma cardinalidade de N para N.
responsabilidade do Agente MD:

Permitir a definio de padres rtmicos para violo, considerando:


o Polifonia do padro: Quantidade de cordas necessrias para executar o
padro, conseqentemente, quantidade de vozes do acorde.
o Quantidade de tempos: Quantidade de tempos de todo o padro.
o Figura de Tempo: Durao de cada um dos tempos do padro.

42

Associao do padro rtmico harmonia do agente ME ao qual est vinculado.

Identificar notas com ataque junto para propiciar tratamento diferenciado, como
a velocidade de arpejo, por exemplo.

Permitir audio da composio com o ritmo definido;

Abaixo cita-se caractersticas, tcnicas e efeitos que podem ser descritos como
responsabilidade da mo direita. Somente os 4 primeiros foram implementados nesta
verso do prottipo.
Direo do Arpejo: Ascendente ou descente. Indica se as cordas comearo a ser
excitadas de baixo pra cima (arpejo descendente) ou de cima pra baixa (ascendente).
Delay do Arpejo: Tempo total dado em funo do somatrio do tempo entre cada nota
do acorde em arpejo. Quanto maior, mais lento o arpejo.
Swing (balano): Variao pra mais ou menos de at 50% do valor da figura de tempo
em relao ao ataque na nota. O objetivo tornar o padro mais humano e menos
mecnico.
Dinmica: Determina a amplitude da nota. til para determinar a acentuao do
compasso ou o tempo forte.
Palm Mute: Abafa o som da nota com um leve tocar nas cordas, prximo a ponte do
violo, com a palma da mo direita (destros). Essa ao corta o som das cordas que
esto vibrando criando um efeito percusivo.
Pickstrokes: Toca a nota da direo indicada, ou seja, de cima para baixo ou de baixo
para cima; Sem muito efeito sonoro, mas pode ser til para fins didticos.
Tap (tapping): Batidas nos trastes do instrumento com os dedos da mo direita,
geralmente o indicador ou o mdio.
Tremolo Picking: Consiste em tocar a mesma nota vrias vezes e muito rpido, soando
com se tivesse tocando uma nica vez (corte na amplitude).
Staccato: Indica uma nota de durao muito curta, no relacionada a figura de ritmo da
partitura.
Optou-se por no utilizar a noo de compasso visando uma simplicidade para usurios
iniciantes ou leigos de teoria musical, portanto o padro rtmico se repete para cada
acorde da harmonia, podendo ser criados tantos padres quanto necessrio.
O Agente MD atualmente reativo. Sua proposta, entretanto, projeta no futuro a
capacidade de dot-lo com inteligncia para que o mesmo sugira padres rtmicos
baseados no estilo musical e at mesmas caractersticas emocionais. Estas idias so
detalhadas nos trabalhos futuros.
3.2.4 Agente Solista (SL)
Este agente no estabelece comunicao com os agentes Mo-Esquerda (ME) e MoDireita (MD). Foi projetado somente para ler arquivos MIDI e enviar notas para o
Agente Caixa de Som (CS). O arquivo MIDI deve conter somente informaes
meldicas e no necessariamente soaro com timbre de guitarra. Na verdade, no passa
de um tocador MIDI que envia as mensagens musicais para o Agente Caixa de Som.

43

No futuro, este agente ir representar o agente humano interagindo com o sistema


atravs de um instrumento MIDI, por isso a importncia de defini-lo neste momento.
Ainda, possvel que a melodia influa na deciso dos desenhos de acorde, buscando
inverses em que a nota fundamental esteja presente na melodia.
3.2.5 Agente Caixa de Som
Sintetiza e mixa as notas geradas pelos agentes ME, MD e SL. usado quando se deseja
ouvir a msica fazendo pequenas alteraes nos agentes, tais como volume, timbre,
mudo, solo. Na caixa de som, todos os agentes vo tocar juntos e em sincronia.
o nico agente que possui uma interface grfica e roda sobre o computador cliente.
Todos os outros agentes so configurados atravs de sua interface e podem rodar em
outras mquinas.
So tarefas do Agente CS:

Servir de interface para configurao dos outros agentes e criao da


composio;

Controlar a execuo da msica;

Mostrar a composio em uma notao grfica;

Exportar a composio para arquivo MIDI;

Permitir o controle dos parmetros de execuo de cada agente da composio;

Pode-se ter diversos agentes CS na composio e com isso experimentar diversas


configuraes dos parmetros de execuo.

3.3 Esquema de comunicao


Usando uma rede TCP/IP como meio de propagao, os agentes recebem mensagens
que informam alm do remetente e o destinatrio, o evento MIDI a ser executado no
tempo indicado.
A deciso de se criar um protocolo proprietrio de comunicao advm da necessidade
de velocidade na comunicao prevendo futuro uso em tempo real da aplicao, como
um sistema de performance. Aproveitando o protocolo padro de comunicao entre
instrumentos digitais MIDI, criou-se uma camada superior que encapsula a mensagem
MIDI.
Formato das mensagens: (<Agente Remetente>, <Agente Destinatrio>, <Mensagem
MIDI>, <Tempo de Execuo>, <Identificador Seqencial>).
Exemplo de mensagem MIDI: ShortMessage(Note On/Canal, Nota, Velocidade).
O tempo de execuo determina quando a mensagem vai ser enviada ao dispositivo
MIDI. contado em milissegundos a partir da mensagem anterior, ou seja, o intervalo
entre a mensagem anterior e a atual. A primeira mensagem tem o tempo de execuo
igual a zero, pois enviada assim que o usurio solicita a execuo da msica.

44

O problema de latncia tratado adicionando-se um buffer de mensagens cujo tamanho


varia em funo da velocidade mdia da transmisso, como pode ser visto na Figura 13.
Sorted Buffer
0

20 ms

50 ms

30 ms

MIDI Device
Real-time
Timer

.
.
.
n

Figura 3.4: Dispositivo para tratar a latncia das mensagens MIDI

O timer retira a mensagem da fila (identificador seqencial) e programa a si mesmo para


faz-lo novamente no tempo especificado da prxima mensagem.
Veremos no Captulo destinado a implementao que por questes tcnicas e
funcionais, no foi necessria implementao do sistema descentralizado, logo o
tratador de latncia, apesar de implementado, no est sendo utilizado. Tal fato tambm
influenciou na escolha do mtodo de troca de mensagens entre os agentes, sendo
escolhido Sockets sobre TCP/IP.

3.4 Escolha das tecnologias envolvidas na construo


3.4.1 Linguagem de Programao
Por que Java bom para msica? Esta pergunta foi feita aos pesquisadores e
programadores que atuam na rea da Computao Musical atravs de listas freqentadas
por pessoas de vrias partes do mundo. Ficou evidente nas respostas um entusiasmo,
talvez um pouco exagerado, dos apaixonados por Java como uma linguagem de
programao genrica, mas poucos souberam responder o que efetivamente qualificava
Java como uma linguagem propcia ao desenvolvimento de aplicaes musicais.
Florian Bomers, engenheiro de software da Sun Microsystems e um dos responsveis
pelo desenvolvimento do Java Sound, explica que dois pontos de vista devem ser
analisados nesta pergunta: Java como linguagem e Java como plataforma. Como
linguagem, Bomers diferencia o Java das outras linguagens pelo fato dela trazer consigo
o Java Sound, uma biblioteca padro e extensvel que garante o funcionamento da
aplicao em qualquer plataforma Java, evitando que o programador tenha que tomar a
difcil deciso de escolher uma outra biblioteca de manipulao sonora de baixo nvel,
como acontece em outras linguagens genricas.
Apesar da Java Sound atender boa parte das aplicaes musicais, o prprio Bormers
reconhece suas restries, sugerindo que a pergunta seja: Por que Java no boa para
msica?. Ele mesmo responde:Java no pior que outras linguagens, exceto por
especificidades como acesso direto ao processadore continua, No preciso ser
melhor em processamento de som para ser uma plataforma melhor para a msica.
Enaltecendo assim, as qualidades do Java como: independncia de plataforma,
modernidade, bibliotecas extensas e rpida execuo (quando cdigo dinamicamente
otimizado e compilado). Reconhece ainda que Java possui uma latncia alta se
comparada com linguagens especficas para manipulao de som e seu uso deve ser

45

pensado em funo das necessidades da aplicao, onde portabilidade deve pesar mais
que desempenho.
Phil Burk, proprietrio da Softsynth e um dos pesquisadores mais atuantes da
Computao Musical, exalta como uma das mais importantes caractersticas do Java a
possibilidade de desenvolver uma aplicao musical dinmica em forma de Applet e
distribu-la facilmente.Ressalta ainda a possibilidade de combinar msica com rede,
grficos e outras funcionalidades nativas do Java por ser uma linguagem aberta.
O fato de Java estar sendo amplamente utilizada na programao de aplicaes musicais
no significa que a nica ou a melhor linguagem para este tipo de programao.
Entretanto, os programadores parecem ter maior facilidade em expressar-se atravs do
Java seja qual for o domnio de conhecimento, inclusive a msica.
As restries do Java Sound (biblioteca nativa para manipulao de som/MIDI que
acompanha o Java) no desestimularam os programadores de aplicaes musicais, pelo
contrrio, eles parecem ter ponderado as vantagens da linguagem e, em um esforo
conjunto, comearam a desenvolver novas bibliotecas mais eficientes e completas. Esta
postura vez crescer o nmero de API disponveis e, conseqentemente, a dificuldade na
escolha.
3.4.2 Bibliotecas Musicais para Java
Foram analisadas 14 pacotes que agregam ao Java a capacidade de trabalhar com udio
e dados musicais. So elas: Java Sound (JAVASOUND, 2004), JMSL (JMSL, 2003),
jMusic (SORENSEN, 2003), Wire /Wire Provider (GERRIT, 2003), JavaMIDI
(MARSANYI, 2003), NoSuch MIDI (NOSUCH MIDI, 2003), MIDI Share (MIDI
SHARE, 2003), MIDI Kit (MCNABB, 2003), jFugue (JFUGUE, 2003), Tritonus
(TRITONUS, 2003), Jsyn (JSYNTHLIB, 2003), jScore (JSCORE, 2003), Jass (DOEL,
2005) e Xemo (PROJECT XEMO, 2003).
Procurou-se ordenar a apresentao das APIs por sua relevncia, funcionalidade e data
de criao. Todas as informaes que constam na anlise foram retiradas da
documentao fornecida pelo fabricante, o que nem sempre foi suficiente. Experimentos
tambm foram realizados a fim de testar os cdigos que constam nos exemplos; Cada
API teve, ao menos, sua funo descrita. Entretanto, para as APIs que se julgou de
maior relevncia, complexidade e completude, foi detalhado o principio de
funcionamento e as classes mais importantes. Este estudo pode ser visto no Anexo B.
Chegou-se a concluso que as melhores API s para trabalho com som (de maneira
geral) so o JSyn, jMusic e Java Sound. Para trabalhar com MIDI, as melhores APIs
so jMusic, JMSL e Java Sound. O destaque desta anlise foi o jMusic que se mostrou
completa, estvel e de fcil uso em todas as categorias e acabou sendo escolhida para
ajudar na implementao do trabalho proposto.
A seguir apresentado um quadro comparativo entre as APIs analisadas dentro das
classificaes sugeridas.
3.4.3 Processamento de udio
Esta categoria caracteriza-se pela capacidade das APIs em processarem dados de udio,
de forma genrica. As funcionalidades desejveis podem ser vistas na Tabela 3.1.

46

Tabela 3.1: Comparao entre API's que processam udio.

Java
Soun
d

jMusi MIDI
c
Kit

JSy
n

Titonu
s

Converso e suporte a diferentes formatos X


de udio;

Manipulao de samples (amostrar);

Manipulao e/ou processamento de dados X


de udio;

Critrio\API
Gravao e reproduo de udio;

3.4.4 Sntese de udio


Esta categoria caracteriza-se pela capacidade das APIs em gera/modifica sons baseado
em algoritmos de sntese, de forma genrica. Os funcionalidades desejveis podem ser
vistas na Tabela 3.2.
Tabela 3.2: Comparao entre API's que sintetizam udio..

JSy Jas
n
s

Critrio\API

Gerao de udio a partir da conexo de unidades geradoras X


(osciladores, envelopes, amplificadores etc.)

Gerao de udio modificando parmetros fsicos das ondas


sonoras;

Uso de instrumentos virtuais com parmetros de udio pr- X


estabelecidos e devidamente encapsulados;

JMus
ic

Suporte a diversos tipos de sntese, como wavetable, aditiva, X


subtrativa, FM etc.

Vale lembrar que o Jsyn integra o pacote do JMSL.


3.4.5 Sequenciamento MIDI
Esta categoria caracteriza-se pela capacidade das APIs em escalonar eventos MIDI no
tempo. As funcionalidades desejveis podem ser vistas na Tabela 3.3.
Tabela 3.3: Comparao entre API's que sequenciam eventos MIDI..

Critrio\API

Java JMus
sound ic

JMS
L

MIDI Trito
Share nus

47

Possuir seqenciador virtual;

X
X

Possuir
mecanismo
que
permita
programar / escalonar eventos MIDI para
serem
executadas
em
determinado
momento de tempo;
Possuir mecanismo de sincronizao;

Leitura de gravao de arquivos MIDI;

Controles da execuo da msica X


(andamento, posicionamento no tempo,
dinmica)

Controle dos canais (dinmica, mute, solo, X


timbre)

3.4.6 Comunicao MIDI com dispositivos externos


Muitas Apis para comunicao com dispositivos externos forma criadas devido as
restries do Java Sound em faze-lo. Atualmente este problema j foi parcialmente
resolvido, mas a APIs continuam sendo usadas.
Esta categoria caracteriza-se pela capacidade das APIs em enviar eventos MIDI a
dispositivos externos. As funcionalidades desejveis podem ser vistas na Tabela 3.4.
Tabela 3.4: Comparao entre API's que enviam eventos s MIDI a dispositivos externos.

Critrio\API

Java
MID
I

Capacidade
mensagens
dispositivos
externo;

para
trocar X
MIDI
com
de
hardware

MID
I
Shar
e

No
Such

Wire

Wire jMus
Prov. .

MID
I
Kit.

Portabilidade (pelo menos dois X


S.Os)
Suporte para Applets

X
X

Comunicao via rede


Necessidade do Java Sound
* O Midi Share tambm est includo no pacote do JMSL;

48

3.4.7 Sntese MIDI


A diferena da sntese MIDI em relao a sntese de udio, na classificao adotada por
este trabalho, est na entrada do processo. Enquanto a sntese MIDI consistem em
basicamente gerar os sons considerando somente os dados MIDI, a sntese de udio
permite tambm o uso de udio como entrada, modificando-os se desejado.
Esta categoria caracteriza-se pela capacidade das APIs em gerar sons a partir de
eventos MIDI. As funcionalidades desejveis podem ser vistas na Tabela 3.5.
Tabela 3.5: Comparao entre API's que geram sons a partir de eventos MIDI.

Critrio\API
Possuir sintetizador virtual;

Java
JMusi
Sound c

Tritonu
s

Possibilitar redirecionamento de mensagens MIDI


para sintetizadores em hardware;
Uso de soundbanks ou banco de timbres;

Controle dos parmetros de snteses via API


(qualidade de udio);
Persistncia dos dados em MIDI e/ou udio

X
X

3.4.8 Componentes Musicais Grficos


Esta categoria caracteriza-se pela capacidade das APIs em exibir informaes musicais,
em diversas notaes, atravs das interfaces grficas. As funcionalidades desejveis
podem ser vistas na Tabela 3.6.
Tabela 3.6: Comparao entre API's que exibem informaes musicais em interfaces grficas.

Critrio\API
Exibio de dedos MIDI em notao musical clssica

JScore

Xemo

JMusic

X
X

Exibio de dados MIDI em notao musical


alternativa
Funcionalidades de execuo musical integradas

3.4.9 Representao Musical


Esta categoria caracteriza-se pela capacidade das APIs em trabalhar com outros
formatos de arquivos usados para armazenar informaes musicais. As funcionalidades
desejveis podem ser vistas na Tabela 3.7.
Tabela 3.7: Comparao entre API's que trabalham com formatos de arquivos musicais.

49

JFugu
e

Critrio\API

Xem
o

Permite codificao de dados musicais em formatos ortodoxos, X


diferentes do convencional MIDI

MusicXML

3.4.10 Programao Musical (composio)


Uma API musical pode ser usada em software destinados para diversos fins, entretanto
possuem maior vocao para alguma atividade musical. Esta categoria composta pela
APIs criadas para trabalhar com composio musical. As funcionalidades desejveis
podem ser vistas na Tabela 3.8.
Tabela 3.8: Comparao entre API's criadas para serem usadas na composio musical.

Critrio\API
Criao/edio grfica de elementos musicais;

jMusic

JMSL

X*

Jsyn

elementos X

Performances interativas;

Gravao do material gerado;

Suporte a MIDI

Sntese em tempo real;

Criao/edio
musicais;

por

cdigo

de

*MusicShape Editor

3.5 Resumo do Captulo


Visto os requisitos do sistema e, principalmente, visando a incluso de futura de
mecanismos capazes de tomar decises ditas inteligentes, optou-se por uma arquitetura
multiagentes para conceber o ambiente, no qual quatro agentes foram definidos: Agente
Mo Esquerda (harmonia), Agente Mo Direta (ritmo e controles de expressividade),
Agente Solista (melodia) e Agente Caixa de Som (controle de execuo).
Para a construo do prottipo, foi escolhida a linguagem de programao Java e as
APIs de programao musical jMusic e Java Sound. Para a comunicao entre os
agentes optou-se pelo RMI, porm as mensagens so formatadas de acorde com um
protocolo de comunicao proprietrio que encasula mensagens MIDI. Ainda, decidiuse construir duas bibliotecas para programao musical em Java que ser
disponibilizada para a comunidade e so descritas no prximo Captulo.

50

4 BIBLIOTECAS PARA PROGRAMAO MUSICAL DESENVOLVIMENTO FOCANDO REUSO

Como visto no Captulo 3, existem vrias APIs em Java disponveis para programao
musical, entretanto nenhuma delas oferece suporte ao reconhecimento de cifras
usualmente encontrados no Brasil, formao de acordes e gerao de
desenhos/representaes desses acordes em instrumentos musicais configurveis.
Essas caractersticas podem ser desejveis em outros sistemas musicais, inclusive nos
futuros sistemas do grupo, logo se optou por criar APIs para que o trabalho produzido
possa ser reutilizado por toda a comunidade desenvolvedora de software musicais. Esta
iniciativa vem contribuir para o desenvolvimento da rea no Brasil.
O desenvolvimento de pacotes de software focados para reuso no igual ao
desenvolvimento de aplicaes computacionais. Cuidados extras nos modelos,
documentao e na escalabilidade devem ser tomados. Pacotes tambm podem ser
vistos como uma forma de organizao das classes do sistema e, neste sentido, alguns
outros pacotes foram criados, porm estes no foram projetados para serem distribudos
e no sero citados ou descritos nesta seo.
No contexto musical, dois pacotes foram criados: br.inf.ufrgs.lcm.formacaoAcorde e
br.inf.ufrgs.lcm.representacaoAcorde. Os nomes dos pacotes foram criados baseados na
conveno sugerida pela Sun. Abaixo descreve-se os pacotes e como as principais
funcionalidades foram implementadas. No Anexo C, distribudo em CD-Rom devido
seu volume, est a documentao das APIs.

4.1 Pacote
de
Formao
(br.ufrgs.inf.lcm.formacaoAcorde);

de

Acordes

A principal funcionalidade deste pacote a converso da cifra em um acorde, com suas


notas e intervalos.
Acorde uma combinao de sons simultneos ou sucessivos quando arpejados; Cifras
so smbolos criados para representar acordes, sendo compostas de letras, nmeros e
sinais. Acordes possuem trs (trades) ou quatro (ttrades) sons simultneos, j os que
possuem cinco ou mais sons so ttrades com notas acrescentadas (CHEDIAK, 1984).
Os smbolos que representam os acordes variam de cultura para cultura e esto
intimamente relacionados com o estilo musical, sendo o idioma um dos fatores
envolvidos nesta questo, no havendo ainda um padro estabelecido, o que pode
dificultar a leitura da msica.
A falta de padro no chega a ser um grande problema para msicos mais experientes e,
talvez por isso, constantemente desconsiderada nos software de performance musicais

51

(IPS) atuais. Este problema atinge os msicos iniciantes que, em busca de msicas que
os agradem, acabam por deparar-se com cifras desconhecidas.
importante lembrar que as cifras definem simplesmente as notas que sero tocadas,
ficando a cargo do executor a escolha do momento em que cada nota ser tocada
(ritmo).
Diferentes cifras podem representar o mesmo acorde. Por exemplo, o acorde d maior
com stima maior (C7M) tem a mesma formao do acorde "mi menor com baixo em
d (Em/C) e sua cifra C7M pode ser escrita como Cmaj7, dependendo da notao
utilizada, neste caso a americana.
Alguns smbolos e regras da cifragem so contraditrios, o que dificulta uma
formalizao computacional. Acompanhe o exemplo: o acorde C5 formado por
simplesmente duas notas: D (I) e Sol (V). A cifragem no tem o papel de indicar
duplicaes, triplicaes, supresses e outros artifcios utilizados devido restrio do
instrumento. Entretanto por vezes se faz, como no caso do chamado acorde fora C5,
onde o Sol (V) deve ser duplicado ou dobrado, sendo assim, o acorde formado pelas
notas; D, Sol e novamente Sol. Esta regra no vlida para intervalos de stima por
exemplo, onde o intervalo inserido sem que nenhum outro seja retirado.
As principais classes deste pacote so descritas a seguir:
4.1.1 CifraValida
Representa a cifra j validada segundo a notao vigente e pronta para se transformar
em um acorde (classe Acorde). Um objeto da classe CifraValida armazena , entre outras
coisas, a nota fundamental e os intervalos descritos na cifra. Com estas informaes
possvel calcular o acorde.
A opo de se definir um objeto intermedirio entre o texto da cifra e o acorde (objeto
da classe Acorde) deu-se devido necessidade de rastreamento do processamento da
cifra, isto , desejvel que o usurio saiba porque sua cifra no est correta e qual seria
o correto. Este conhecimento no do acorde, que tem suas prprias regras de criao.
Apesar de possvel, no recomendado que os programadores instanciem objetos da
classe CifraValida diretamente, ou seja, a forma recomendada para se obter este objetos
atravs da classe CifraValidaMaker.

52

CifraValida
descricaoCifra : Logical View::java: :lang::String
int ervalos : Logical V iew:: java:: util::ArrayList
cifra : Logical V iew::java:: lang::St ring
CifraV alida()
CifraV alida(fundamental : SimboloNota)
CifraV alida(fundamental : SimboloNota, baixo : SimboloNot a)
getIntervalos() : Intervalo[]
getIntervalo(index : int) : Intervalo
getTamIntervalos() : int
getNot aFundamental() : SimboloNota
getCifra() : Logical View::java::lang::String
getNot aBaixo() : SimboloNota
adicionarIntervalo(pos : int, intervalo : SimboloInt ervalo) : void
removerIntervalo(intervalo : SimboloInt ervalo) : void
ordenaVetorInt ervalo() : void
containsIntervalo(intervaloCifraV alida : Intervalo) : boolean

Figura 4.1 : Classe CifraValida

A Figura 4.1 mostra uma simplificao da classe CifraValida. Para lista completa dos
mtodos e sua descrio detalhada consulte a especificao da API no Anexo C.
4.1.2 CifraValidaMaker
Gera objetos da classe CifraValida baseada em uma entrada textual da cifra e a notao
de cifragem vigente (classe NotacaoCifra). a principal classe deste pacote, onde foram
implementados os autmatos que reconhecem uma palavra como cifra.
O sufixo Maker indica que esta classe funciona como uma fabrica (Factory Design
Pattern) de objetos da classe CifraValida e somente um mtodo pblico foi
implementado, como mostra a Figura 4.2.

CifraValidaMaker
getCifraValida(cifra : String) : CifraValida

Figura 4.2 : Classe CifraValidaMaker

Para a construo desta classe foi necessrio primeiramente formalizar a linguagem com
os smbolos mais usados na cifragem brasileira. Isto no quer dizer que o sistema s
funcionar com esta notao, mas que esta notao ser a padro para o sistema,
podendo ser modificada ou mesmo substituda por outra a critrio do usurio. Isto
garante que as cifras exibidas nas tablaturas sejam familiares ao usurio, facilitando a
leitura da msica.
Os smbolos utilizados e suas funes podem ser observados na Tabela 9.

53

Tabela 4.1: Smbolos definidos na notao brasileira de cifragem

Smbolo Descrio

Smbolo Descrio

Nota L

Diminuto

Nota Si

Segunda Maior

Nota D

b2

Segunda Menor

Nota R

Quarta Justa

Nota Mi

#4

Quarta Aumentada

Nota F

Quinta Justa

Nota Sol

#5

Quinta Aumentada

Alterao Sustenido

b5

Quinta Diminuta

Alterao Bemol

Sexta Maior

add

Adio de Intervalo

Stima Menor

Incio de Alterao de 7M
Nota

Stima Maior

Fim de Alterao de Nota 9

Nona Maior

Inverso no Acorde

b9

Nona Menor

Juno de intervalos

11

Dcima Primeira Justa

Intervalo maior

#11

Dcima Primeira Aumentada

Intervalo menor

13

Dcima Terceira Maior

sus

Suspenso

Na linguagem indicada na Tabela 4.1, os parnteses so usados quando existe uma nota
alterada (# | b) ou quando houver intervalos que no compem a estrutura bsica da
ttrade (9, 11, 13). Definiu-se ainda que os acordes diminutos so somente as ttrades,
ou seja, o acorde C formado pelos intervalos 1+b3+b5+b7. Se quisermos apenas a
trade 1+b3+b5, ento a cifra seria Cm(b5).
O smbolo add indica a adio de um intervalo que no o intervalo seguinte em
relao ao ltimo intervalo do acorde. Ex: C = 1+3+5; C(add 9) = 1+3+5+9.
O smbolo ^ significando a juno de intervalos no um smbolo musical conhecido.
Na verdade este smbolo foi criado por restries tcnicas do autmato, visto que o
mesmo usa o espao em branco como sinal de trmino de uma cifra, ou seja, se
desejarmos validar o acorde C7M(9 11) teramos problemas com o espao entre os
intervalos de nona(9) e dcima primeira(11). Para isto optou-se pelo uso do caractere
^, ficando o acorde com a seguinte aparncia C7M(9^11) . Para contornar esta
restrio, pode-se criar uma interface grfica para a entrada das cifras que sobreponha
os intervalos 9 e 11, simulando uma frao, como ocorre nas tablaturas. O resultado
seria:

54

.
As regras de formao dos acordes em conjunto com a linguagem definida tornam
possvel a construo de um autmato finito para validao de cifras, representado pela
5-upla D1 = (, Q, , q0, F) onde:
a) o alfabeto de smbolos de entrada, = nota alt sus var
nota = {A, B, C, D, E, F, G}
alt = {#, b}
var = {, m, 5}
susN = {sus2, sus4, sus9, sus11}
num = {2, 4, 6, 5, 7, 9, 11, 13}
numA = {2,4,6}
numB={9, 11, 13}
numC = {2, 4, 9, 11}
numD = {2, 4, 5, 6}
b)

Q conjunto de estados possveis, Q = {S0.. S69}

c)

a funo parcial de transio :Q x Q

d)

q0 o estado inicial, q0 = S0

e)
F o conjunto de estados finais, F = {S2, S3, S4, S5, S6, S7, S9, S16, S18, S19,
S20, S21, S22, S31, S32, S33, S39, S40, S48, S65, S68, S69}
Graficamente, D1 est representado parcialmente pela Figura 4.3.

Figura 4.3 : Autmato finito inicial.

Na Figura 4.3, observa-se o autmato inicial capaz de validar acordes maiores, menores,
diminutos, fora (duplicao da quinta justa) e suspensos. Os estados finais S2, S3, S4 e
S5 levam a sub-autmatos que tratam e validam qualquer cifra. Como por exemplo, o
autmato representado na Figura 4.4, que faz o tratamento das ttrades (acordes com o
intervalo de stima) j validados pelo autmato inicial (estado final S3).

55

Figura 4.4: Autmato para tratamento de ttrades (acorde com stima) a partir do estado S2

Ainda partindo do estado S2, o autmato da Figura 4.5 se encarrega de validar as cifras
dos acordes com intervalos de adicionados de 2, 4, 5,6 e 7. Os outros intervalos devem
estar entre parnteses.

Figura 4.5: Autmato para tratamento de acorde com os intervalos de segunda, quarta ou sextas.

A seguir, os autmatos que validam os acordes diminutos, menores, fora e suspensos,


respectivamente (ver Figura 19).

Figura 4.6: Autmato para tratamento de ttrades diminutas.

O sub-autmato representado na Figura 4.6 valida acordes com incluses e intervalos e


suspenses dos acorde diminutos, ou seja, a partir do estado S3. Exemplo:
G#dim(add11).

56

Os autmatos da Figura 4.7 e Figura 4.8 tratam os acordes menores, sendo o segundo
para ttrades menores.

Figura 4.7: Autmato para tratar acordes menores.

Figura 4.8: Autmato para tratamento de acordes menores com intervalo de stima.

O autmato da Figura 4.9 trata alterao da quinta dobrada em acordes fora, por
exemplo A5(b5).

Figura 4.9: Autmato para tratar acordes fora (intervalo dobrado de quinta)

O autmato da Figura 4.10 inicia a partir de todos os outros estados finais, exceto S5,
S65, S68 e S69.

Figura 4.10: Autmato que trata alterao no baixo do acorde e inverses.

57

4.1.3 Acorde
Um objeto da classe acorde um conjunto de notas que compem o acorde. Essas notas,
juntamente com os intervalos que as representam, so encapsuladas na classe
NotaAcorde. Logo, um acorde um conjunto de objetos da classe NotaAcorde, como
mostra a Figura 4.11.
Acorde

CifraValida

(from formacaoAcorde)
notas : Logical View::java::util::ArrayList
posBaixo : int = - 1
posFundamental : int = - 1

+cifraValida

(from formacaoAc orde)


descricaoCifra : Logical View::java::lang::String
intervalos : Logical View::java::util::ArrayList
cifra : Logical View::java::lang::String

Intervalo

(from formacaoAcorde)
Intervalo()
getSimboloIdentificador()
getIntervaloNumerico()
getNomeIntervalo()
getDistanciaFundamental()

NotaAcorde
(from formacaoAcorde)
descricao : Logical View::java::lang::String

Nota
(from formacaoAcorde)
simboloIdentificador : Logical View::java::lang::String
nomeNota : Logical View::java::lang::String
oitavaAcimaFundamental : int
indice : int
valorMIDI : int = - 1

Figura 4.11: Classes associadas a classe Acorde

Na Figura 4.12 possvel observar detalhes da classe acorde, como por exemplo o
atributo posBaixo que usado quando o acorde possui uma inverso.

Acorde
notas : Logical View::java::util::ArrayList
posBaixo : int = - 1
posFundamental : int = - 1
adicionarNota(nota : NotaAcorde) : void
getFundamental() : NotaAcorde
getNotas() : NotaAcorde[]
getNotaAcorde(nota : Nota) : NotaAcorde
getNotaAcorde(intervalo : Intervalo) : NotaAcorde
getNotaAcorde(intervaloNumerico : int) : NotaAcorde
setBaixo(posNotaBaixo : int) : void
getNotaBaixo() : NotaAcorde

Figura 4.12: Classe Acorde

4.1.4 AcordeMaker
Gera um objeto da classe Acorde tendo como entrada um objeto da classe CifraValida.
Se identificada e validada a cifra que representa o acorde, ento conhecido: a nota
fundamental, intervalos e possvel inverso do acorde. Com base nestas informaes o
acorde montando (suas notas so definidas) considerando as regras de formao de

58

acordes, que so muito mais formais e esto padronizadas. Exemplo: Uma trade menor
sempre composta dos intervalos 1 + b3 + 5;
Na Figura 4.13 possvel observar a simplicidade da classe AcordeMaker que tambm
uma fbrica de objetos, tal qual CifraValidaMaker, porm estes do tipo Acorde.

AcordeMaker
AcordeMaker()
getAcorde(cifraValida : CifraValida) : Acorde

Figura 4.13: Classe AcordeMaker.

Um tratamento diferenciado foi dado aos acordes que possuem o baixo em outra nota
que no seja a Fundamental. Exemplo: C/G. Este acorde possui uma inverso, isto a
nota Sol (G) representada no baixo j compe a estrutura bsica do acorde, logo,
simplesmente defini-se que o Sol ser a nota mais grave. Isto diferente de um Am/F#,
pois o F# no est entre as notas do Am, ou seja, precisa ser adicionado, mesmo que no
esteja representado o intervalo de sexta maior (F#) na cifra.

4.2 Pacote de Gerao das Representaes


(br.ufrgs.inf.lcm.representacaoAcorde)

dos

Acordes

Este pacote abrange todo processamento relativo s representaes ou desenhos dos


acordes, envolvendo classes de instrumentos, manipulao e gerao destas
representaes. Esta ltima pode ser considerada a principal funcionalidade do pacote.
Quando se fala em sistemas que trabalham com representaes de acordes, a abordagem
mais comum a indexao da imagem do acorde no instrumento tendo como ndice as
cifras musicais. Apesar de ter uma rpida recuperao da informao e relativa
simplicidade na implementao, este tipo de abordagem inflexvel, ficando restrita s
cifras e ao instrumento para o qual foi projetada. Outra forma possvel o clculo da
representao, como ser visto neste pacote.
A gerao da representao que ser executada no instrumento se dar em duas fases.
Na primeira, a representao preenchida com as posies das notas no violo (corda e
traste) e um conjunto de representaes bsicas retornada. Definiu-se como
representao bsica aquela que no possua notas dobradas, duplicadas ou suprimidas
em funo das restries do instrumento. Esta diviso em fases foi uma deciso de
projeto que ponderou o tempo de processamento necessrio para se obter a melhor
representao completa (onde h dobramentos), visto que para se chegar a melhor
representao, todas as representaes teriam que ser integralmente calculadas.
Trabalhando por fases, conseguimos resultados aceitveis usando como base de
comparao as representaes bsicas obtidas na primeira fase e processando
(calculando dobramentos) somente da representao escolhida.
A Figura 4.14 mostra os componentes e suas funes no processo de gerao das
representaes bsicas de um acorde, relativo a fase 1 do processo global acima
mencionado. O incio do processo ocorre com a entrada do texto que representa uma
cifra. Um Autmato Finito (classe formacaoAcorde.CifraValidaMaker) com as regras

59

de formao de acorde busca os smbolos que deve reconhecer na Notao Proposta


(classe NotacaoCifra). Aps a validao do texto como uma cifra, gera-se um objeto
com os intervalos e notas extrados da cifra (classe CifraValida). Este objeto ser ento
processado (classe AcordeMaker) e os intervalos daro lugar as notas(NotaAcorde) em
um novo objeto representando o acorde (Acorde). Para se obter as representaes
bsicas (RepresentacaoAcordeMaker) de um acorde necessrio conhecer o
instrumento (InstrumentoCorda / ViolaoPlugin) e as preferncias do msico
(RepresentacaoAcordeProperties).

Figura 4.14: Processo de gerao das representaes bsicas de acordes.

Como exemplo deste processo foi implementado um dicionrio de acordes de


representaes bsicas que pode ver visto na Figura 4.15. Neste exemplo o texto
G#m7(b5) foi passado como uma cifra, validado e convertido em uma cifra vlida. A
cifra vlida foi ento processada e gerou-se o acorde, que teve suas representaes
bsicas calculadas.

Figura 4.15: Dicionrio de acordes de representaes bsicas.

60

Um acorde no possui mais notas do que a capacidade polifnica do instrumento, no


caso do violo, 6 notas simultneas (assumindo o violo padro de seis cordas). Isto
quer dizer que as representaes bsicas podem ter espao sobrando para repetio de
certas notas adaptando-a as necessidades, gostos e habilidade do msico, caractersticas
do estilo musical e padro rtmico.
Omisses, duplicaes, dobramentos, triplicaes e inverses das notas dos acordes, so
ps-tratamentos feitos em cima de um conjunto de representaes bsicas, considerando
as restries fsicas do instrumento e configuraes do usurio. Por exemplo, o usurio
pode definir que, a nota que representa o intervalo de tera, jamais deve ser dobrada em
suas representaes. Estes processamentos so relativos a segunda fase do processo de
gerao de representaes, bem como o clculo da sugesto dos dedos de cada posio
da representao, e so descritos na classe ProcessadorRepresentacaoInstrumentoCorda,
As principais classes do pacote sero descritas seguir. Para um maior detalhamento das
classes, seus mtodos e atributos, consultem a especificao da APIs no Anexo C.
4.2.1 Instrumento
A classe abstrata Instrumento define o que um instrumento musical precisa ter para ser
incorporado ao sistema. Este hierarquia foi definida visando a expanso do sistema por
novos instrumentos que possam vir a ser criados no futuro. A Figura 4.16 mostra as
associaes da classe Instrumento.

Instrumento

Instrum entoLayout

(from representacaoAcorde)

(from representacaoAcorde)

InstrumentoCorda
Instrument
oPlugin

(from representacaoAcorde)

violao

(from repr...)

ViolaoPlugin

ViolaoLayout

(from representacaoAcorde)

(from representacaoAcorde)

Figura 4.16: Ligaes da classe Instrumento

Analisando a Figura 29 podemos verificar que existe uma ligao entre a classe
Instrumento e InstrumentoLayout. A classe InstrumentoLayout tem o propsito
representar graficamente o instrumento em questo, permitindo, por exemplo, uma
visualizao do desenho do acorde no prprio instrumento. Nesta primeira verso, esta
funcionalidade no foi implementada.

61

4.2.2 InstrumentoCorda
O principal instrumento em estudo neste trabalho o violo, entretanto notou-se que os
algoritmos criados so genricos para qualquer instrumento trasteado de corda. Baseado
nisto, optou-se por generalizar as caractersticas dos instrumentos de corda na
superclasse InstrumentoCorda.
Nesta classe encontram-se alguns atributos que influenciam diretamente no
processamento e gerao das representaes dos acordes. Note que estas representaes
so especficas para a instancia do instrumento de corda criado. Na Figura 4.17
possvel observar os detalhes do comportamento e estado da classe InstrumentoCorda.

InstrumentoCorda
qtCasa : int
qtDedo : int
aberturaDedo : int
InstrumentoCorda()
InstrumentoCorda()
getCordas()
setCordas()
getCorda()
setQuantidadeCasa()
getQuantidadeCasa()
setAberturaDedo()
getAberturaDedo()
setQuatidadeDedos()
getQuatidadeDedos()
getPosicaoNotaInstrumentoCorda()
getPosicaoNotaInstrumentoCorda()
getPosicaoNotaInstrumentoCorda()
getNota()

Figura 4.17: Classe InstrumentoCorda

4.2.3 InstrumentoPlugin
Interface que permite a incluso de um novo instrumento no sistema durante sua
execuo. Para que um instrumento possa ser incorporado ao sistema necessrio que a
nova classe criada, alm de ser filha da superclasse Instrumento, implemente a interface
InstrumentoPlugin. Note que no h a necessidade de se implementar este interface se o
instrumento vier junto com o pacote, ou seja, este recurso se aplica somente em casos
onde o usurio deseja obter (ou programar) um instrumento que no compe o pacote

62

original ou que seja adicionado ao sistema em tempo de execuo. A carga do plugin


feita no sistema atravs da interface InstrumentoManager.
Para demonstrar a utilizao da interface, o pacote traz a classe ViolaoPlugin, que
retorna um objeto do tipo InstrumentoCorda com as caractersticas de um violo de 6
cordas. So elas: 12 trastes8, 4 dedos para execuo de acordes, abertura mxima de 4
casas e afinao tradicional (Mi, L, R, Sol, Si, Mi). As configuraes podem ser
alteradas em tempo de execuo. A Figura 4.18 representa no diagrama o que foi dito.
<<Interface>>

InstrumentoPlugin
getInst rument o() : Inst rument o

ViolaoPlugin
ViolaoPlugin()
configuraNotas() : void
configuraCordas() : void
configuraInstrumento() : void
getInstrumento() : Instrumento
getRepresentacaoAcordeMaker() : RepresentacaoAcordeInstrumentoCordaMaker

Figura 4.18 : Criando um violo.

4.2.4 RepresentacaoAcorde (RepresentacaoAcordeInstrumentoCorda)


Representa a forma com que um acorde deve ser executado em um determinado
instrumento.
A forma mais conhecida entre os msicos de se representar um acorde,
independentemente do instrumento, a notao clssica onde as notas e os intervalos
so descritos em um pentagrama. Sem os devidos conhecimentos tericos musicais a
compreenso da notao clssica no trivial, pois esta, apesar de ser eficaz, no
intuitiva (amigvel).
A representao dos acordes sobre a imagem do instrumento permitiu aos aprendizes
uma viso mais intuitiva de como os acordes devem ser executados, entretanto, no se

Normalmente, o violo possui 19 trastes, entretanto o software esta se limitando a 12 trastes por ser
esta a regio do instrumento mais utilizada para execuo de acompanhamentos com acordes.

63

pode esquecer que acordes so genricos a todos os instrumentos harmnicos. Recursos


multimdia podem ser usados para se obter uma notao mais rica (ROADS, 1996).
Um acorde pode ser executado de diferentes formas no mesmo instrumento. Isto ocorre
porque a maior parte dos instrumentos possui um registro superior a uma oitava,
fazendo com que as notas se repitam. As cifras no determinam qual a altura das notas
que compem os acordes, ficando isto a cargo das restries do instrumento e opes do
instrumentista.
A representao do acorde leva em considerao, para seu clculo, as particularidades
de cada instrumento musical. No caso do violo, os principais parmetros do algoritmo
que gera as representaes so a quantidade de trastes e cordas, a afinao das cordas, a
abertura mxima dos dedos do violonista, o uso de pestana e quantidade dos dedos
disponveis para execuo. Como visto anteriormente, estes parmetros esto definidos
na classe InstrumentoCorda e, considerando que a representao do acorde especfica
para cada tipo de instrumento, necessrio que haja uma classe que expresse as
particularidades de uma representao para um instrumento de corda. Esta classe a
RepresentacaoAcordeInstrumentoCorda.
A Figura 4.19 mostra as particularidades de uma representao de acorde para um
instrumento de corda. Chama-se a ateno para a multiplicidade do relacionamento
entre as classes RepresentacaoAcordeInstrumentoCorda e Pestana. Note que mais de
uma pestana foi autorizada em uma mesma representao e esta situao, apesar de
possvel, torna a representao muito difcil de executada. Mediante este fato, no foi
implementada nesta verso esta possibilidade.

Pestana
InstrumentoCorda

0.. *

qtCasa : int
qtDedo : int
aberturaDedo : int

cordaInicial : int
cordaFinal : int
casa : int
dedoUtilizado : int

#instrumento

RepresentacaoAcordeInstrumentoCorda
pestanas : Logical View::java::util::Vector = new Vector ()
aberturaDedosRequisitada : int
trasteInicial : int
trasteFinal : int
cordaCorrente : int = - 1
qtDedosUsados : int = 0

posicoesNotaPestana[]
PosicaoNotaInstrumentoCorda
*

casa : int
corda : int
dedo : int

Figura 4.19: Particularidades de uma representao de acorde para um instrumento de corda.

Talvez o termo mais conhecido na msica para o que foi definido como representao
de acorde seja desenho do acorde (shape). Entretanto, optou-se por manter o nome
representao de acorde considerando que este nome seria mais genrico e faria
meno a forma com que o acorde seria mostrado no instrumento, ou seja, sua
representao (possivelmente grfica) em um determinado instrumento.
Dois conceitos sero importantes quando falarmos na escolha da prxima representao
de um acorde: similaridade dos desenhos dos acordes e a facilidade de execuo destes

64

desenhos. Como exemplo, suponha uma msica com a progresso harmnica de C - G


(D e Sol maior). O primeiro passo saber como se executa o D Maior no violo e
so vrias as possibilidades. A Figura 4.20 mostra uma das formas mais comuns
tambm lida como 53-42-30-21-10 9.

Figura 4.20: Representao do acorde D Maior.

O prximo acorde que devemos saber como executar o Sol Maior (G) e, novamente,
temos diversos desenhos do sol no violo como mostra a Figura 4.21. Qual deles
devemos escolher?

Figura 4.21: Algumas possibilidades do acorde Sol Maior no violo.

Uma das respostas : escolhe-se a representao que exige menos esforo do


instrumentista na passagem de um acode para o outro, ou seja, a digitao mais prxima
da digitao anterior. Nova pergunta: Como se calcula a similaridade entre as
representaes?
O algoritmo usado para calcular a similaridade das representaes ser explicado no
detalhamento da classe ProcessadorRepresentacaoAcordeInstrumentoCordaMaker,
entretanto adianta-se que as variveis envolvidas so: quantidade de notas simultneas,
quantidade de notas iguais e distancia entre as posies das notas. Submetido a este
exemplo o sistema escolheu a seguinte representao para o acorde Sol: 63 52 40
23 13.
Uma outra varivel envolvida na escolha da prxima representao a facilidade de
execuo do desenho e isto calculado com base na abertura de dedos necessria para

L-se: quinta corda-terceira casa, quarta corda-segunda casa, terceira corda solta, segunda corda
primeira casa e primeira corda solta.

65

execuo, quantidade de cordas soltas e proximidade da cabea do violo. Os detalhes


sero
mostrados
na
descrio
da
classe
ProcessadorRepresentacaoAcordeInstrumentoCordaMaker.
4.2.5 RepresentacaoAcordeInstrumentoCordaMaker
Gera os objetos da classe RepresentacaoAcordeInstrumentoCorda relativos a um
determinado InstrumentoCorda. A classe RepresentacaoAcordeInstrumentoCordaMaker
implementa a interface RepresentacaoAcordeMaker, que define as caractersticas e
comportamento bsico de um gerador de representaes de acorde.
Como dito anteriormente, para cada tipo de instrumento passvel de executar acordes
(instrumentos harmnicos) necessrio ter uma implementao da interface
RepresentacaoAcordeMaker, isto porque existem peculiaridades e especificidades na
execuo de cada instrumento. Por exemplo, o uso de pestanas no se justifica em um
teclado musical.
A Figura 4.22 mostra algumas das especificidades de um gerador de representaes para
instrumentos de cordas trasteados10.

10

Trastes: Srie de filetes de metal, madeira ou tripa atravessados no brao de certos instrumentos de
corda para tornar mais fcil o ponteio das cordas. Exemplo de instrumentos trasteados so o violo,
guitarra, cavaquinho, banjo etc.

66

<<Int erface>>

RepresentacaoAcordeMaker
getRepresentacoesAcorde(acorde : Acorde) : RepresentacaoAcorde[]

RepresentacaoAcordeInstrumentoCordaMaker
qtPestanas : int
trasteInicial : int
trasteFinal : int
cordaIncial : int
cordaFinal : int
representacoes : ArrayList
posTemp : ArrayList

controladorTraste
ControladorAberturaDedo
posicoes : ArrayList
casaInicial : int
casaFinal : int
limiteEsquerda : int
limiteDireita : int

InstrumentoCorda
qtCasa : int
qtDedo : int
abert uraDedo : int

Figura 4.22 : Implementao de um gerador de representaes de acordes para instrumentos de


corda.

Observe que o RepresentacaoAcordeInstrumentoCordaMaker possui uma dependncia


do ControladorAberturaDedo. Esta classe um mecanismo criado para impedir que
representaes de acordes calculadas extrapolem a capacidade de execuo do msico
em relao quantidade de dedos usados e a abertura mxima dos dedos. Alm disso,
esta classe restringe o espao da busca da nota em uma corda, otimizando o algoritmo
que monta a representao.
A Figura 4.23 mostra a classe RepresentacaoAcordeInstrumentoCordaMaker, onde 3
mtodos merecem destaque:
GetRepresentacoesAcorde(Acorde):
Mtodo
definido
na
interface
RepresentacaoAcordeMaker que retorna um vetor de objetos RepresentacaoAcorde das
representaes bsicas relativas ao acorde passado.
GetRepresentacaoAcordeInstrumentoCordaFacil(Acorde, qtNotasSimultaneas):
Retorna a representao mais fcil de executada com um nmero de notas simultneas e
acorde passados como paramentos.
GetRepresentacaoAcordeInstrumentoCordaSimilar(RepresentacaoAcordeIsntrumentoC
orda, Acorde, qtNotasSimultaneas): Retorna a RepresentacaoAcordeIsntrumentoCorda
do acorde passado mais similar a representao anterior.

67

RepresentacaoAcordeInstrumentoCordaMaker
(from representacaoAcorde)
trasteInicial : int
trasteFinal : int
cordaIncial : int
cordaFinal : int
representacoes : ArrayList
posTemp : ArrayList
RepresentacaoAcordeInstrumentoCordaMaker()
getRepresentacaoAcordeInstrumentoCordaFacil()
getRepresentacaoInstrumentoCordaSimilar()
getRepresentacoesAcorde()
montaRepresentacao()
setLogOn()
setLogOn()
getLog()

Figura 4.23: Classe RepresentacaoAcordeInstrumentoCordaMaker.

O Algoritmo 1 mostra a lgica superficial do clculo das representaes bsicas relativo


ao mtodo getRepresentacoesAcorde.
Contador Cordas = Quantidade de cordas do Instrumento;
Quantidade Notas = Quantidade de notas do Acorde;
Enquanto Contador Cordas >= Quantidade Notas faa
Busca a nota do baixo na corda (Contador Cordas) do instrumento;
Se existir a nota ento
Adicionar a posio da nota em uma nova representao;
Remover a nota achada da lista de notas do acorde;
Procurar as notas restantes nas cordas inferiores a corda do baixo;
Fim se
Contador Cordas 1;
Fim Enquanto
Algoritmo 1: Clculo das representaes bsicas

As representaes processadas so ordenadas pela abertura dos dedos (decrescente) e


pela quantidade de dedos necessria para execuo do acorde (crescente) e pela
proximidade da cabea do violo (crescente). Desta forma, a primeira posio da lista
ser a representao mais fcil de ser executada. Este princpio usado nos mtodos
getRepresentacaoAcordeInstrumentoCordaFacil
e
getRepresentacaoAcordeInstrumentoCordaSimilar e sero descritos a seguir.
O Algoritmo 2 mostra como feita a escolha da representao mais fcil do acorde
implementado no mtodo getRepresentacaoAcordeInstrumentoCordaFacil.
Quant. Notas simultneas = nmero de notas simultneas definidas pelo usurio

68

Cont. Posio = 0;
Calcular representaes bsicas do acorde;
Enquanto no achar uma representao completa com(Quant. Notas simultneas) E
(Cont Posio < quantidade elementos da lista) Faa
Processar a entrada(Cont. Posio ) das representaes bsicas (ordenadas por
facilidade);
Se existe alguma representao na lista com (Quant. Notas simultneas)
Retorna a representao;
Seno
Cont. Posio + 1;
Fim Se
Fim enquanto
Algoritmo 2: Algoritmo para achar a representao de acorde mais fcil de ser executado.

O Algoritmo 3 mostra como feita a escolha da representao mais similar a


representao do acorde anterior da msica. Este algoritmo foi implementado no
mtodo getRepresentacaoAcordeInstrumentoCordaSimilar.
Calcular representaes bsicas do Acorde
posEscolhida = Solicitar ao Processador que identifique a representao bsica mais
similar a representao do acorde prvio e armazenar o ndice em posEscolhida;
Enquanto (posEscolhida < numero de representaes)
Processar a representao(posEscolhida );
Se o processamento retornou alguma representao com mesmo nmero de notas
simultneas ento
Retornar representao
Seno
posEscolhida +1;
Fim se
Fim Enquanto
Algoritmo 3: Calculo da representao de acorde similar.

4.2.6 ProcessadorRepresentacaoAcordeInstrumentoCorda
Esta classe tem o objetivo de executar operaes/processamentos sobre objetos do tipo
RepresentacaoAcordeInstrumentoCorda.
Na Figura 4.24 possvel ver os processamentos implementados at o momento, dentre
os quais 3 so destacados:
processarRepresentacaoAcorde(): Retorna uma lista de todas as representaes
completas possveis, com os dobramentos configurados pelo usurio, a partir de uma
representao bsica.
getRepresentacaoAcordeSimilar(): Escolhe dentre um conjunto de representaes
bsicas, qual a mais similar a representao do acorde anterior da msica.
indicarDedos(): calcula quais dedos devem ser usados na execuo do acorde.

69

ProcessadorRepresentacaoAcordeInstrumentoCorda
(from representacaoAcorde)
representacoesGeral : Logical View::java::util::Hashtable
logTurnedOn : boolean = false
contProcessamentos : int = 0
formulaContProcessamentos : Logical View::java::lang::String = ""
ProcessadorRepresentacaoAcordeInstrumentoCorda()
ProcessadorRepresentacaoAcordeInstrumentoCorda()
processarRepresentacaoAcorde()
processarRepresentacaoAcorde()
getRepresentacaoAcordeSimilar()
getGrauSimilaridade()
processar()
adicionaRepresentacao()
getIdentacao()
processar()
processar()
indicarDedos()
setLogOn()
setLogOn()
getLog()

Figura 4.24: Classe ProcessadorRepresentacaoAcordeInstrumentoCorda.

Processando as representaes em fases chega-se a um resultado mais rpido, porm o


processo fica mais difcil de ser compreendido. Recapitulando: Uma cifra representa um
acorde (um acorde pode ter mais de uma cifra) e este acorde possui diversas maneiras
de ser executado no sistema. Dividimos estas maneiras de executar o acorde
(representao do acorde) em duas categorias: representaes bsicas (somente com
uma instncia de cada nota do acorde) e representaes completas ou processadas, onde
podem existir dobramentos, duplicaes e outros processamentos pr-configurados pelo
usurio. A supresso feita quando no possvel calcular nenhuma representao
bsica, portando na Fase 1.
As representaes bsicas, apesar de serem apropriadas para execuo, talvez no sejam
as mais adequadas para isto em virtude de caractersticas do estilo musical, opes do
msico e as possibilidades que o instrumento oferece. Estas so processadas na primeira
fase e nos d uma boa idia de qual representao escolher, antes dos processamentos
mais demorados. Uma representao bsica gera vrias representaes completas.

70

Os
processamentos
que
podem
ser
efetuados
pelo
mtodo
processarAcordeInstrumentoCorda()
esto
expressos
na
classe
RepresentacaoAcodeProperties e so passveis configurao pelo usurio. So eles:
O dobramento da nota fundamental: Repete a nota fundamental;
A duplicao da nota fundamental: Repete a nota fundamental em unssono11;
A triplicao da nota fundamental: Permite repetir a nota fundamental at 3 vezes;
O dobramento da tera: Repete a nota representada pelo intervalo de tera (maior ou
menor);
O dobramento da quinta justa: Repete a nota representada pelo intervalo de quinta
justa;
A duplicao da quinta justa: Repete a nota representada pelo intervalo de quinta
justa em unssono;
A supresso da quinta justa: Omite o intervalo de quinta em funo de um outro
intervalo de maior prioridade; Esta opo s considerada quando no possvel
formar o desenho do acorde com todos os intervalos descritos na cifra, ento a quinta
omitida para dar lugar a um intervalo mais importante.
A considerao das oitavas das notas (escala diatnica): Diferencia intervalos, por
exemplo, de nova e segunda. Apesar de serem a mesma nota, teoricamente esto em
oitavas separadas. Isto constantemente desconsiderado no violo.
Indicar o dedo que deve tocar cada nota: Permite que o sistema sugira quais dedos
usar na execuo do acorde.
Indicar possvel pestana: Autoriza o sistema a calcular representaes com pestanas.
Calcular as inverses: Permite ao sistema calcular inverses do acorde mesmo que esta
no esteja expressa na cifra.
No contexto deste trabalho, a duplicao de notas a repetio da mesma nota (mesma
oitava), e o dobramento a mesma nota, porm podendo ser em oitavas diferentes. Logo,
considera-se a duplicao um caso do dobramento.
O processamento de uma representao completa, apesar de trabalhar com um nmero
finito de possibilidades, demorada se comparada com o clculo da representao
bsica. A Figura 4.25 mostra como feito o processamento dos dobramentos nas
representaes bsicas. No exemplo, 3 processamentos esto configurados para serem
executados e so representados por p1, p2 e p3. Note que a representao bsica original
R deve ser testada nos 3 processamentos e seus produtos testados pelos
processamentos restantes.

11

Mesma nota, na mesma oitva.

71

Cada vez que um processamento conseguir gerar uma nova representao, esta deve ser
adicionada, entretanto representaes iguais devem ser descartadas e isso sobrecarrega o
sistema.
Os processamentos so verificados em cima das cordas disponveis da representao, e
a ordem relevante. Neste sentido, a opo de permitir o clculo da inverso
considerada para definir se a busca comea a partir da nota baixo ou da corda mais
grave do instrumento. Alm desta verificao, necessrio verificar se o msico ter
dedos suficientes para execuo, se h necessidade do uso e se possvel a pestana.
Ainda, deve-se verificar se sero sugeridos os dedos que devem ser usados.

p1

p1

p1

p2

p2

p3

p3

p2
p3

R
R

p1
p2

1
*p

2
*p

R * p3

p1

p1

p2

p2

*p
3

p3

p3

R * p2

p3

R * p2

...

R
*
p3
R

...

Figura 4.25: Processamento de dobramentos em reapresentaes bsicas.

Devido ao tempo de processamento necessrio para se calcular todas as representaes


completas possveis de um acorde, foi definida o mtodo de clculo da representao
por fases. A quantidade de operaes necessrias para se processar as representaes
bsicas dada pela Equao 1, onde n a quantidade de processamentos a serem feitos.
F(n) = n * f(n-1) +1
Equao 1

O Grfico 1 mostra a quantidade de operaes necessrias, conseqentemente o tempo


de processamento, para se calcular as representaes bsicas em funo dos
processamentos agendados. S para ilustrar, em uma mquina Atlhon XP 1.8 e 256 Mb
ram, foi preciso 16 ms para se calcular as 13 representaes bsicas de um D Maior e
outros 62 ms para se processar uma das representaes bsicas (a mais fcil de ser
executada pelo instrumentista). Esta representao bsica processada gerou 5
representaes completas. Se fossemos processar todas as representaes de D Maior

72

para escolhermos a mais fcil, demoraramos 263 ms, ou seja, 3 vezes mais. O acorde
escolhido para este exemplo foi aleatrio e pode existir uma variao entre acordes
diferentes com mais ou menos representaes bsicas.

Operaes computacionais
em funo dos
processamentos agendados

Processamento de Dobramentos
2500
2000
1500
1000
500
0
1

Quantidade de processamentos

Grfico 1: Grfico dos Processamento dos Dobramentos

Como j foi visto, uma das formas de escolha da representao por similaridade. A
classe
RepresentacaoAcordeInstrumentoCordaMaker,
atravs
do
mtodo
getRepresentacaoAcordeInstrumentoCordaSimilar,
usa
a
classe
ProcessadorAcordeInstrumentoCorda para calcular a similaridade entre as
representaes. O objetivo final escolher dentre um conjunto de representaes
bsicas aquela que mais se assemelha a uma representao completa e ento processla.
O fator de similaridade varia de 0 a 1, onde 1 um desenho de acorde inteiramente igual
a sua referencia. Acompanhe o exemplo: Dado um Am com o desenho 50-42-32-21-10
como acorde inicial e um G como o acorde seguinte na seqncia harmnica, o
algoritmo ir primeiramente calcular as representaes bsicas do G. So elas: 63- 4020; 63- 40- 34; 63- 52- 40; 510- 49- 110; 63- 34- 23; 63- 52- 23; 45- 37- 17; 45- 3423; 63- 55- 34; 510- 37- 17; 510- 49- 37; 30- 23- 17; 63- 40- 17; 45- 23- 17; 63- 2317; 63- 37- 17; 63- 55- 17;
A seguir, ir calcular o grau de similaridade de cada representao bsica em relao a
representao completa e retornar a mais similar. Neste caso, a escolha foi a
representao bsica 63-40-20 com 52% de similaridade. Este valor o somatrio da
similaridade de cada posio da representao bsica em relao a representao
completa. Para cada posio da representao bsica, a funo de similaridade
calculada para as posies da representao completa que esteja na mesma corda, uma
acima e uma abaixo, observando sempre a abertura mxima de dedos do msico. Os
valores so alocados em uma tabela, como o exemplo visto na Tabela 4.2.
Tabela 4.2 : Clculo de Similaridade

63

50

.31

42

32

21

10

73

40
20

.31

.62

.32
.31

.62

.31

Quando no h interseo na coluna dos maiores valores de cada linha, feita a mdia
direta dos maiores valores de cada linha, neste caso, 0,31 + 0,62 + 62 = 0,52. Entretanto,
h casos em que os maiores valores caem na mesma coluna e, sendo assim, o maior
valor prevalece como regra geral. Uma exceo a essa regra quando o menor valor ,
o nico da linha, logo, deve permanecer.
A funo que calcula a similaridade da posio dada por f(x) e f(y), sendo
respectivamente para o calculo da similaridade entre posies que estejam na mesma
corda e posies que estejam em cordas diferentes (acima ou abaixo). A fatorCasa
uma a diferena entre os trastes das posies quando no existem cordas soltas.
Exemplo: 53 e 47, neste caso, 7 3 = 4 o fatorCasa. Quando h cordas soltas, ento o
fatorCasa dado pela diferena das mdias dos trastes representao, desprezando
cordas soltas, com peso de 0.5. Exemplo: 53-40-32, mdia: (3 + 2)/2 = 2.5 (arredonda
para 2) e 63-52-13, mdia (3 + 2+ 3)/3 = 2.6 (arredonda pra 3). Diferena: 3-2 = 1 * 0.5
= 0.5;
f(x) = 1.0-((1.0/instrumento.getAberturaDedo())*(fatorCasa))
f(y) = 0.5-((0.5/instrumento.getAberturaDedo())*(fatorCasa);
Uma vez achado a representao bsica mais similar, processam-se ento as
duplicaes. Caso no seja possvel um desenho de acorde com a polifonia especificada
pelo usurio, processa-se a prxima representao bsica mais similar.

Figura 4.26: Simulador de teste da escolha das representaes dos acordes.

A Figura 4.26 mostra um simulador construdo para demonstrar o funcionamento da


escolha do desenho do acorde baseado na similaridade entre eles. Observe que o acorde

74

inicial um D Maior (C). Foi escolhida a representao bsica 53;42;30 para ser
processada as duplicaes e, aps processamento, foi definida a representao 53-4230-21-10 como o desenho de acorde inicial. Suponha esta representao como a anterior
em uma seqncia onde o Sol Maior (G) o prximo acorde. O sistema, aps processar
todas a representaes bsicas, escolhe a 63-40-20 como a mais similar e processa-a,
chegando representao 63-40-30-20-13. Repare que ambas as representaes possui a
mesma polifonia, ou seja, 5 notas simultneas.
A escolha por fases agiliza o processo, mas no garante que a representao tocada seja
a mais fcil ou a que melhor soe, logo comum haver divergncia entre os desenhos de
acordes que humanos escolheriam e os sugeridos pelo sistema. Os resultados sero
apresentados no Captulo 6.

4.3 Resumo do Captulo


Os pacotes foram construdos visando o mximo de reuso e, por vezes, optou-se por
solues que extrapolam o contexto desta dissertao. Ainda, houve situaes onde o
contrrio foi percebido, ou seja, generalizamos no pacote algoritmos que precisaram ser
reescritos para o trabalho em questo. Um exemplo disto o algoritmo de clculo da
representao do acorde, que precisou ser estendido para usar o padro rtmico como
varivel.
Os pacotes formacaoAcorde e representacaoAcorde possuem cdigo aberto e esto
disponveis para a comunidade desenvolvedora de software musicas em Java,
Respectivamente, visam auxiliar no reconhecimento de cifras como acorde e no clculo
dos desenhos desses acordes.

75

5 CONSTRUO DO PROTTIPO

Este Captulo visa apresentar a aplicao construda e seus detalhes de implementao.


Como dito anteriormente, foi utilizada a linguagem de programao Java na verso
SDK 1.4.2. Para auxiliar no tratamento de udio e MIDI duas bibliotecas foram
utilizadas, o Java Sound (acompanha o SDK) e o jMusic 1.4.2. Ainda, foram
construdas duas novas APIs como produto desta dissertao que tambm foram
utilizadas
na
programao
musical,
br.ufrgs.in.lcm.formacaoAcorde
e
br.ufrgs.in.lcm.representacaoAcorde (Captulo 4). A comunicao entre os agentes
feita atravs da tecnologia proprietria da Sun, RMI.
Para o desenvolvimento da interface do software, uma biblioteca que auxilia no
desenvolvimento de interfaces grficas foi construda e utilizada. Comearemos a
explicao do prottipo por ela.

5.1 Interface Grfica Pacote Webfake


O desenvolvimento de uma interface grfica em Java, normalmente, mais trabalhoso e
demorado quando comparada a outras linguagens. Este fato deve-se a flexibilidade dos
pacotes grficos Swing e AWT, que se por um lado potencializam a linguagem, por
outro fora o programador a escrever muitas linhas de cdigo para atingir um objetivo
relativamente simples, baixando sua produtividade.
Normalmente, h um conjunto de tarefas comuns no desenvolvimento de interfaces em
Java. Um exemplo destas tarefas a organizao dos painis (JPanel) em modelos para
a construo de interface, ou seja, de que forma esto dispostos os painis e que
componentes grficos os compem. Esse modelo tende a ser padro para todo o sistema.
Exemplo: Podemos assumir que um menu de opes das interfaces Windows est
localizado na parte superior da janela.
A definio de um modelo de interface toma tempo de projeto e desenvolvimento.
Muitas vezes, no h necessidade de especificar este modelo visto que o grupo de
desenvolvimento pode desejar a padronizao de um modelo de interface visando a
identidade visual de seus software. Buscando ganhar tempo de desenvolvimento
destinado a definio do modelo de interface, este pacote, com um modelo genrico de
interface, foi criado para auxiliar no desenvolvimento de interfaces Java.
O pacote implementa funcionalidades nativas, tais como: controle bsico de navegao
(voltar, avanar), controle de navegao dos links, delimitao de contexto
navegacional, personalizao da aparncia de interface, implementao de menus
comandos e barra de status.

76

A principal classe deste pacote um painel de contexto que estendido a cada tela do
sistema. Este painel carrega informaes grficas, navegacionais e formas de tratar os
eventos (comandos). A exibio deste painel se d atravs de uma janela envoltria
(frame externo) que contm uma barra de status e um menu lateral, ambos relativos ao
painel de contexto.
A seguir sero apresentadas as principais classes que compes o pacote e a forma de sua
utilizao.
5.1.1 Conjunto de Classes
Os relacionamentos entre as principais classes do pacote desenvolvido, podem ser
vistos na Figura 5.1. Observa-se que a classe principal deste diagrama o
ContextPanel, estando esse vinculado a Links e Commands que representam,
respectivamente, as telas para qual se pode ir a partir do contexto em questo e as aes
que podem ocorrer.

Commands

Links

ContextPanel

Def aultModelFrame

MultimediaContextPanel

Ext ernalFrame

Figura 5.1: Diagrama de classes simplificado

Todas as telas do sistema devem ser subclasses da classe ContextPanel.


O ContextPanel estende a classe JPanel do pacote Swing, tal qual o DefaultModelFrame
estende a classe Frame, tambm do pacote Swing. A relao entre a ContextPanel e
DefaultModelFrame a mesma existente entre suas superclasses, ou seja, um Frame
exibe o Panel.
A classe abstrata DefaultModelFrame define o modelo bsico de interface, composto de
um painel lateral com links, comandos do contexto e comandos de sistema, uma barra
de status e o painel de contexto. A cada troca de contexto, operaes de vdeo so
processadas a fim de manter a correta exibio da interface. Esse processamento
implementado tambm pela classe DefaultModelFrame.
A subclasse concreta ExternalModelFrame implementa os mtodos definidos por sua
superclasse (DefaultModelFrame) e a navegao entre contexto. O processo de unio de
um ContextPanel e um DefaultModelFrame tambm processamento da
ExternalFrame.
A seguir, as principais classes do pacote so descritas.
DefaultModelFrame: A classe abstrata DefaultModelFrame estende
a classe
swing.JFrame e possui a mesma funo que esta. O ideal que exista somente uma tela

77

principal, pois alm da economia de memria, fica mais fcil gerenciar a interface. O
frame inicialmente dividido em 3 componentes:

Status Bar: Exibe ajuda ou mensagens de pouca relevncia ao usurio;

Painel contedo: Varia de acordo com o contexto e responsvel pelas


informaes exibidas;

Painel Opes: Exibe as opes permitidas ao usurio, podendo ser "Links"ou


"Commands";

ExternalFrame: Classe concreta do DefaultModelFrame, a ExternalFrame alm de


implementar as operaes definidas por sua superclasse, tambm gerencia a navegao
entre os diversos contextos exibindo, ao usurio, o caminho percorrido at chegar ao
local onde ele se encontra no sistema. As operaes de voltar e avanar tambm so
implementadas nesta classe.
OutsideFrame: Esta biblioteca foi projeta para possuir uma nica janela no sistema
onde os contedos vo sendo trocados a medida do necessrio. Aps algumas
aplicaes de testes, foi constatada a necessidade de possuir uma segunda janela
vinculada a principal (estilo janela de dialogo) que pudesse servir de entrada, sada ou
troca de dados com a janela principal. Esses conceitos foram implementados na
OutsideFrame, uma subclasse do DefaultModelFrame e, portanto, to poderosa quanto.
ContextPanel: a parte da ExternalFrame que est em constante mudana em funo
do contexto. No painel de contedo, definem-se os links, comandos ou qualquer
outra funo necessria, no contexto que o painel representa.
O ContextPanel carregado em tempo de execuo e est associado a um dispositivo
que controla sua manuteno ou despejo da memria, o ClassFactory.
ClassFactory: responsvel pela gerencia dos objetos de interface (ExternalFrame e
ContextPanel) instanciados em tempo de execuo, provendo um controle sobre o
desperdcio de memria. Com seus mtodos estticos possvel registrar ou instanciar
objetos grficos sem a preocupao de saber se j existem ou no.
Combiner: A tela que exibida ao usurio. uma combinao de dois objetos:
ExternalFrame e ContextPanel; Para que estes elementos pudessem ser mesclados de
uma forma transparente e eficiente esta classe foi criada neste trabalho; Com seus
mtodos estticos, esta classe cria / modifica a tela que o usurio ver.
Links: So os responsveis pela navegao do usurio no sistema. Com eles possvel
mudar o contexto para um menu ou qualquer outra tela que seja relevante no contexto
em que o usurio se encontra. Alojados no painel de opes da tela principal, devem ser
definidos durante o projeto do software e includos na construo dos painis de
contedos.
Commands: Guardam as aes relativas a cada um dos contextos. Exemplo: Se
necessrio pegar uma informao em uma JTextBox e process-la, esta ao ser
codificada em um Command e atribuda a um contexto.
ObjectPass: Esta classe funciona como um guarda volumes entre contextos que no
podem se enxergar.
MultimidiaContextPanel: Subclasse da ContextPanel que incorpora recursos
multimdia para controle de mdias temporais.

78

5.1.2 Modo de Funcionamento


Ao se optar pela utilizao deste pacote de interface para auxiliar na construo do
sistema necessrio, em tempo de projeto, definir a estrutura de navegao, ou seja,
como os contextos esto interligados e como ser a comunicao entre eles.
A Figura 5.2 mostra uma aplicao composta por trs contextos: Tela1, Tela2, Tela3.
Todos os contextos se inter-relacionam, ou seja, a partir de qualquer um deles possvel
chegar nos outros dois. Estas relaes so indicadas pelos links mostrados no painel
lateral.
No contexto Tela 2 existe ainda um comando auto-explicativo chamado Limpar
Campo.
Tanto os links como os comandos possuem mensagens de ajuda que so exibidas na
barra de status quando o usurio passa o mouse sobre a opo desejada.

Figura 5.2: Aplicao Exemplo

Abaixo dos links, possvel ver os comandos de voltar e avanar. Estes comandos
aparecem medida que o usurio navega no sistema, tal qual um browser faz com as
pginas navegadas na web.
Na parte inferior do painel lateral se v os comandos de sistema Aparncia e Sair do
sistema. Esses comandos ficam ativos independentes do contexto que est sendo
exibido.
No centro, em fundo branco, fica o painel de contedo (instancia do ContextPanel).
Todo painel de contedo tem um ttulo que exibido na barra de ttulo da janela.
Para que essa pequena aplicao de exemplo fosse feita, somente 3 classes precisaram
ser criadas: Tela1, Tela 2 e Tela 3. Todas estendem o ContextPanel, ou seja, so suas
filhas.
Em cada uma dessas classes foram definidos os links e os comandos pertinentes as
funcionalidades dos contextos que representam. Veja o trecho de cdigo abaixo:

79

1. public class Tela1 extends MultimediaContextPanel {


2. JTextField txCampo = new JTextField();
3.
4.
5.
6.

public Tela1() {
super("Tela 1");
configuraTela();
}

7. private void configuraTela(){


8. addLink("Tela2","Vai para Tela2","Tela2");
9. addLink("Tela3","Vai para Tela3","Tela3");
10. addCommand("Limpar Campo", " teste", new java.awt.event.MouseAdapter() {
public void mouseClicked(MouseEvent e) {
11. txCampo.setText("");
12. }
13. });
14. }

Observa-se na linha 1 a extenso da classe MultimdiaContexPanel (subclasse da


ContextPanel). Na linha 4, informamos a classe pai o ttulo deste contexto. As linhas 8 e
9 mostram como definir links atravs no mtodo addLink(nomeLink, ajuda,
nomeClasse). J a linha 10 mostra como adicionar um comando.

5.2 Adaptaes do Pacote de Interface ao Prottipo


Basicamente uma nica classe precisou ser estendida, a PolvoExternalFrame. Esta
classe ganhou uma estrutura de rvore que serve para organizar os agentes como mostra
a Figura 5.3.

Figura 5.3: Estrutura de rvore que organiza os agentes do sistema.

Cada agente do sistema gera sua interface(ContextPanel) e repassa esse objeto ao


Agente CS, que o exibe.
Ainda, foram adicionados comandos permanentes, como os de criao dos agentes ME,
MD e CS. Esses comandos s ficam visveis quando a composio j foi criada.

5.3 Componente para Desenho do Padro Rtmico


No existe um componente grfico no Java para a captura de padres rtmicos. Dessa
forma, baseado no conceito de interface conhecida como Piano-roll(ROADS, 1996), foi
desenvolvido um componente grfico que estende as funcionalidades de um JTable e
sua forma de renderizao. Este componente responsvel no somente pela captura e

80

exibio dos padres rtmicos para violo, mas tambm pela interpretao desses dados
musicais que sero utilizados pelo Agente MD.
A Figura 5.4 mostra o componente sem nenhum padro rtmico definido. As linhas
verticais representam as vozes do acorde, ou seja, neste caso o padro rtmico vai
trabalhar com acordes com uma polifonia de 4 notas, sendo a 4 a mais grave e a 1 a
mais aguda (conforme indicao do rtulo). As colunas representam os tempos e so
usadas para dar idia de durao a um evento musical. Ao lado esquerdo do
componente, uma barra de ferramentas exibe as opes do usurio, so elas: Inserir
(insert) um evento musical, Apagar(delete), Dividir (Split), Mover(Move) e Selecionar.
Os comandos de Zoom no foram implementados nesta verso.

Figura 5.4: Componente para criao do padro rtmico.

A Figura 5.5 mostra um padro rtmico de 6 tempos e polifonia 5. Nele temos 8 eventos
musicais. Na linha de rtulo 5 (primeira de cima pra baixo), est a nota mais grave.
Neste momento o usurio no sabe qual nota essa, at porque quem vai prover esta
informao o Agente ME quando ele calcular o desenho do acorde. No primeiro
tempo da linha 5 se inicia um evento musical que s ir parar de soar no quarto tempo.
Essa sua durao. Mesmo pensamento se repete nos outros eventos musicais. Note,
entretanto, os que eventos da linha 1 (a primeira de baixo pra cima), so dois e no um
s, isso fica claro pela marcao da borda que separa os dois.

Figura 5.5: Exemplo de padro rtmico.

81

5.4 Criando uma composio


No contexto desse trabalho, uma composio o ambiente onde os agentes executam
suas tarefas. Para este prottipo, optou-se por criar composies localmente, ou seja,
todos os agentes rodam na mesma mquina. Essa deciso baseou-se no fato de que nem
sempre uma estrutura de rede est disponvel aos msicos no ato da criao de sua pea
musical ou gerao de material sonoro para a mesma.
A Figura 5.6 mostra a tela de criao da composio que possui somente dois atributos
opcionais: nome e compositor. Aps preencher os campos, clica-se na opo criar
composio no lado direito da tela. Note ainda que na tela da composio existem
contadores para cada tipo de agente que est vinculado a composio. A composio
toda pode ser persistida em arquivo e recuperada para continuao do trabalho.

Figura 5.6: Tela de criao da composio.

5.5 Criando Agente ME e Definindo a Harmonia


Aps a criao da composio, as opes para a criao de agentes ficam disponveis
embaixo da rvore que os mostra. Para criar um Agente ME, basta clicar na opo
Novo ME e dar um nome ao Agente ou aceitar o nome sugerido pelo sistema.Aps
sua criao, ele aparece no primeiro nvel da rvore. Basta clicar nele, para que sua
interface seja exibida conforme mostra a Figura 5.8.
A harmonia definida no Agente ME atravs da criao de partes harmnicas, que por
sua vez, so criadas adicionando cifras s mesmas, deixando um espao entre elas. Ao
salvar a parte, todas suas cifras so analisadas e convertidas em intervalos musicais.
Caso uma cifra no seja reconhecida, o usurio informado do problema. Se o usurio
tiver dvida na escrita do acorde na notao de cifragem vigente ou das notas que
compem o acorde, ele pode solicitar informaes sobre a cifra como mostra a Figura
5.7 para um acorde sol diminuto.

82

Figura 5.7: Informaes de um Gdim

No exemplo da Figura 5.8, somente uma parte foi criada e adicionada composio.
Essa parte intitulada Parte1 pode aparecer repetidamente na composio, sem a
necessidade de se informar novamente as cifras.
O campo BPM indica a velocidade com que ser tocada a previso da parte.
importante ressaltar que este BMP relativo somente a opo Ouvir previso da
Parte, quando os acordes so tocados seqencialmente sem considerar nenhuma
informao rtmica.
No necessrio gravar todas as partes na harmonia, alias, estas somente sero gravadas
quando o boto Inserir parte na posio X for acionado. A posio referida ao lugar
(na ordem) onde ser inserida a parte. Qualquer alterao na parte refletida na
composio da harmonia.

Figura 5.8: Tela do Agente ME.

Os comandos disponveis para o usurio no Agente ME so:


Ouvir previso da parte: Permite ouvir a seqncia harmnica da parte selecionada
com a polifonia mnima em cada acorde, mas sem informaes rtmicas.

83

Ouvir previso da composio: Permite ouvir a seqncia harmnica da composio


com a polifonia mnima em cada acorde, mas sem informaes rtmicas.
Salvar harmonia: Grava em arquivo a harmonia para uso futuro em outra composio;
Abrir Harmonia: Carrega os dados do arquivo relativo a harmonia para o sistema.
O agente ME o responsvel pelo reconhecimento das cifras, clculo do acorde e
clculo do desenho do acorde. A maior parte de como feito isto j foi descrito no
Captulo destinado a explicao dos pacotes de reconhecimentoAcorde e
representacaoAcorde, entretanto existe algumas especificidades em como o Agente ME
faz isso e ser tratada mais adiante neste Captulo.
Pode-se ter quantos agentes ME quanto necessrio em uma composio, sendo que as
harmonias definidas sero tocas de maneira sobreposta. Para se tocar uma harmonia,
deve-se ter vinculado no mnimo um agente MD a um agente ME.

5.6 Criando o Agente MD e os Padres Rtmicos


Um agente MD deve estar vinculado a um Agente ME, logo no basta que se clique em
Novo MD. Antes, deve-se escolher a qual Agente ME o mesmo deve estar vinculado.
Aps a criao possvel visualizar o novo Agente MD abaixo do agente ME, no
segundo nvel da rvore, como mostra a Figura 5.9.

Figura 5.9: Tela do Agente MD

Para que possa visualizar a interface do agente MD, e criar os padres rtmicos,
necessrio clicar sobre o mesmo na rvore. A interface do agente MD est dividia em 3
partes:

84

Criao Padro Rtmico: permite a criao do padro rtmico e a configurao do


mesmo.
Aplicao do Padro Rtmico: Permite vincular os padres criados as partes da
harmonia, obtidas do agente ME.
Log: Mostra os desenhos de acordes escolhidos para cada acorde da harmonia.
5.6.1 Definindo Padres Rtmicos
A Figura 5.9 mostra a tela onde um padro rtmico foi criado. Um agente MD pode criar
vrios padres rtmicos. So propriedades de um padro rtmico:
Nome: Nome com que ser identificado na hora da associao com a harmonia. Apesar
do sistema aceitar nomes iguais, evite.
Polifonia: Nmero de notas simultneas que o desenho de acorde deve ter. Isso reflete
no nmero de linhas do componente grfico de definio do padro rtmico. Ao alterar
esse parmetro o padro rtmico desenhado se apaga. Opcional quando o nmero da
polifonia exceder o nmero de dedos disponveis pra execuo.
Tempos: O padro rtmico se repete para cada acorde. A durao desse padro dada
pelo nmero de tempos multiplicado pelo valor da Figura de Tempo. O nmero de
tempos o mesmo das colunas do componente grfico de definio do padro rtmico.
Ao alterar esse parmetro o padro rtmico desenhado se apaga.
Figura de tempo: Define a durao de cada uma das colunas. O padro uma
semnima que equivale a 1; Quanto mais alto o valor da figura de tempo, mas lenta a
execuo da msica.
Quantidade de dedos: Nmero de dedos da mo direita. Esse atributo auxilia no
processo de deciso da escolha do desenho do acorde, que feito pelo agente ME. A
lgica simples: se a quantidade de ataques simultneos do padro rtmico em um
determinado tempo maior que a quantidade de dedos disponveis para pinar as
cordas, logo, trata-se de um arpejo rpido, ou seja, um nico movimento unidirecional,
provavelmente usando uma palheta. Nestes casos, as cordas do desenho do acorde
precisam ser contguas, ou seja, no pode haver cordas soltas entre duas posies, pois
no seria possvel salt-las rapidamente.
BPM: Usado pra calcular a velocidade quando o usurio solicita a audio da previso
do padro rtmico. Usado somente na previso e no na composio.
As propriedades acima citadas so do padro rtmico como um todo, porm para cada
evento musical deste padro rtmico existem atributos que podem ser trabalhados para
se obter a sonoridade desejada pelo usurio. So eles:
Volume: Volume com que vai soar a nota. Usado para trabalhar a acentuao do padro
rtmico, visto que no h a idia de compasso no prottipo.
Swing: Permite antecipar ou atrasar um evento musical em at 50% do valor da figura
de tempo, com isso conseguimos uma preciso maior no tempo e inserir sincopes para
dar uma sensao mais humana e menos mecnica ao ritmo.
Direo Arpejo: Um arpejo quando dois ou mais eventos musicais comeam no
mesmo tempo. To logo o usurio selecione estes eventos, as opes Direo Arpejo,
Velocidade Arpejo e Ignorar Arpejo aparecem. A direo arpejo indica que as

85

cordas comearo a serem tocadas de cima pra baixo no violo (arpejo ascendente) ou
de baixo pra cima (arpejo descendente).
Delay do Arpejo: Indica o tempo entre cada nota do arpejo. Quanto maior, mas lento
ser o arpejo. Esse valor proporcional a figura de tempo vigente.
Ignorar Arpejo: Quando um arpejo identificado pelo sistema, a propriedade de swing
ignorada em funo do delay do arpejo que calculada automaticamente. Se for
desejo do usurio trabalhar o swing em um arpejo ele deve clicar esta opo.
Tremolo Picking e Palm Mute: Efeitos que sero implementados no futuro.
Para se obter uma idia de como ir soar o padro rtmico, pode-se solicitar a audio da
previso atravs do comando Ouvir previso. Ser executado sobre a afinao bsica
(todas cordas soltas) do instrumento. Ainda so comandos:
Salvar padro rtmico: Permite persistir o padro em arquivo para uso futuro.
Abrir padro rtmico: Carrega dados do arquivo para utilizao na composio.
5.6.2 Associando os Padres Rtmicos Harmonia
A associao do padro rtmico se d em uma tela separada do contexto da criao,
como mostra a Figura 5.10. Nela possvel visualizar os padres rtmicos criados e as
partes harmnicas recuperadas do Agente ME. Cada parte harmnica deve ter somente
um padro rtmico a ela associada. Entretanto, o mesmo padro rtmico pode estar
associado a vrias partes harmnicas. Para se estabelecer uma associao entre o padro
rtmico e a uma parte harmnica, deve-se selecionar o padro rtmico na lista da
esquerda e o(s) padro(es) rtmico(s) da direita (use a tecla CTRL ou Shift para
selecionar mais de um), em seguida clique no boto Gravar.
Quando se faz a associao entre os padres rtmicos e a harmonia, uma cor sorteada
para esta associao e representada na composio. Desta forma possvel visualizar se
todas as partes harmnicas possuem um padro rtmico. O padro rtmico se repete para
cada acorde da parte harmnica.
Depois de definida a associao possvel solicitar a execuo da composio atravs
do comando Tocar. O comando Tocar, dispara o processo de comunicao entre os
agentes ME e MD visando chegar aos desenhos de acorde mais propcios aos padres
rtmicos. Conseguindo pelo menos uma representao de cada acorde no seu padro
rtmico, inicia a execuo. A cada solicitao, todo o processo de escolha refeito.

86

Figura 5.10: Tela da aplicao do padro rtmico a harmonia.

A Figura 5.11 mostra a tela onde feita a execuo e a visualizao das notas, em uma
notao alternativa similar a notao tradicional porm, sem a figuras de tempo, sendo a
durao representada pelo comprimento dos traos. Essa notao proveniente do
pacote jMusic, usado para auxiliar no tratamento de MIDI. Na tela de execuo
possvel: tocar, parar e exportar a msica no formato MIDI.

Figura 5.11: Tela de execuo da composio.

87

5.6.3 Visualizando as decises do sistema


Na tela de Log possvel visualizar quais desenhos de acordes foram escolhidos para
um acorde, em funo das restries do usurio e caractersticas do padro rtmico. Dois
pontos valem ser ressaltados sobre esta deciso.
Escolha por Similaridade: A partir do segundo acorde, o sistema automaticamente
procura por desenhos de acorde que mais se equivalem ao desenho anterior e que
satisfaa aos requisitos do padro rtmico. Neste caso os desenhos possveis so
ordenados pela facilidade de execuo, ou seja, so paramentos respectivamente: menor
abertura de dedos, menor quantidade de dedos, maior nmero de cordas soltas e
proximidade da cabea do violo. No calculada a conduo de vozes (FILHO, 2005).
Escolha do primeiro desenho de acorde: A escolha do primeiro desenho de acorde
pode ditar toda a regio que os acordes que seguem vo tocar (altura), por isso, nem
sempre o desenho de acorde mais fcil o melhor a ser escolhido como primeiro, visto
que o mesmo pode ser em uma regio muito aguda. Portanto, para o primeiro desenho
de acorde foi implementado um algoritmo que escolhe o desenho cuja mdia da soma
dos trastes seja a menor, com isso escolhe-se os desenhos mais prximos da cabea do
violo.
A Figura 5.12 mostra quais os desenhos de acordes foram escolhidos para cada acorde.
Muitas vezes, para o mesmo acorde podem existir dois desenhos diferentes em funo
do acorde que o precede.

Figura 5.12: Tela de Log.

5.7 Ouvindo os agentes pela Caixa de Som


O sistema permite a criao de vrios Agentes ME, cada um com vrios Agentes MD
associados. Para ouvir estes agentes tocando em conjunto necessrio que os eventos

88

sejam mixados pelo Agente CS. A Figura 5.13 mostra a interface simples do Agente CS,
que contm somente uma tabela dos agentes no sistema.

Figura 5.13: Tela do Agente Caixa de Som

Atravs da tabela possvel deixar algum agente mudo, tocando sozinho (solo), alterar
seu volume e principalmente seu timbre (nmero MIDI). Toda alterao feita no agente
ME se propaga para os agentes MD associados a ele. Pode-se ter quanto Agentes CS se
desejar no sistema e com isso testar vrias possibilidades de execuo.
Na parte inferior da interface existem os campos de BPM (velocidade) global da
composio e do dispositivo MIDI que ir sintetizar os eventos MIDI. Estas opes no
esto disponveis nessa verso.
Um nico comando est disponvel: Tocar. essa sua funo!

5.8 Resultados
Podemos dizer que, aps os primeiros testes de utilizao do sistema, o prottipo se
mostrou eficaz e funcional, porm com muitas consideraes.
Por ter sido feito em Java no existem restries quanto a sua portabilidade e uso na
web, entretanto apresentou algumas inconformidades em plataformas diferentes (Mac e
Linux) da plataforma de desenvolvimento (Windows), principalmente no
processamento de vdeo.
Muitas melhorias esto previstas e so relatadas nos trabalhos futuros, destacam-se:

Mecanismo para melhor controle do tempo;

89

Visualizao grfica das representaes rtmicas;

A escolha dos acordes considera simplesmente a facilidade na transio entre os


desenhos e no a conduo de vozes, algo desejvel para as prximas verses.
Questes de usabilidade de interface no foram consideradas nesta verso do prottipo,
visto que no era o foco do trabalho.
Algumas amostras foram geradas por colaboradores do Centro de Msica Eletrnica e
violonistas e os arquivos esto no CD em anexo.

5.9 Resumo do Captulo


Este Captulo teve o objetivo de explicar o funcionamento e detalhes de implementao
do prottipo.
O objetivo do prottipo foi validar a idia de uma comunidade de agentes musicais
interagindo e tomando decises visando a execuo de uma composio no violo. Este
objetivo foi atingido apesar do prottipo precisar visivelmente de melhorias para se
tornar um produto estvel. Atualmente, o sistema possui em torno de 117 classes se
somado todos os pacotes. Este elevado nmero de classes pode trazer dificuldade no
gerenciamento e conseqentes problemas, que sero identificados resolvidos
futuramente
O prottipo j est sendo usado para gerao de material sonoro visando composies
por compositores do Centro de Msica Eletrnica- CME. Tambm possvel us-lo
com fins didticos no ensino do violo e conceitos rtmicos.

90

6 CONCLUSO

Foi apresentado neste trabalho um sistema multiagente capaz de simular performances


musicais no violo considerando aspectos humanos, porm no se restringindo a eles.
Foram descritas as etapas de desenvolvimento desde a idealizao do sistema at sua
implementao. Os resultados sero vistos ainda neste Captulo.
Uma importante parte na construo do sistema foi a criao das bibliotecas para
reconhecimento das cifras, clculo do acorde e conseqente clculo do desenho do
acorde. A abordagem multiagente foi especialmente til no clculo do desenho do
acorde.
Quatro agentes foram modelados, entretanto somente trs foram efetivamente
implementados: Agentes Mo-Esquerda, Mo-Direita e Caixa-de-Som. O destaque nas
interaes fica entre os agentes ME e MD que, devido a interdependncia nas suas
atividades, precisam trabalhar juntos para que o desenho do acorde satisfaa as
necessidades de ambos.
As contribuies, resultados obtidos, limitaes e trabalhos futuros so descritos a
seguir.

6.1 Contribuies e Resultados Obtidos


O sistema pode contribuir na execuo das seguintes atividades:
Criao da parte de violo em uma composio por compositores que no tocam o
instrumento.

Execuo de uma msica com alto grau de dificuldade.

Auxlio na educao musical, principalmente de conceitos rtmicos e de


formao de acordes;.

Experimentos musicais diversos, principalmente trabalhando a polirritmia,


caractersticas do instrumento e extrapolao das limitaes de execuo
humanas.

Sugesto dos desenhos de acordes e suas transies, dada uma harmonia e o


padro rtmico. Uma espcie de dicionrio de acordes dinmico.

O sistema vem sendo testado e avaliado por alunos do curso de msica da UFRGS e
entusiastas da msica em geral. A maior parte dos avaliadores conhece e toca violo
com diferentes graus de habilidade, porm todos tm um bom conhecimento de
informtica. Os resultados so expressos em forma de material musical e pode ser
ouvido no CD em anexo.

91

Algumas limitaes relatadas sobre o sistema foram sendo implementadas nas novas
verses, e portanto no sero mencionas. Somente as limitaes mais conceituais so
citadas e suas solues esto previstas nos trabalhos futuros. So elas:

Possibilidade de escolher o desenho do acorde em certas partes da composio;

Visualizao dos desenhos de acorde sobre a imagem do instrumento;

Externalizao das partes configurveis do sistema para que o usurio possa


faz-lo a qualquer momento;

Captura do padro rtmico por instrumentos MIDI;

Melhoria do mecanismo de associao dos padres rtmicos harmonia;

Criao de bibliotecas de padres rtmicos.

Quando os elementos musicais so tratados separadamente, torna-se difcil o


posicionamento do tempo, pois ele est presente tanto no ritmo (tamanho do padro
rtmico e figura de tempo) como na harmonia (repetio do acorde na seqncia). Isso
dificulta a execuo de uma msica conhecida pelo sistema, tal qual um intrprete, pois
exige do usurio a capacidade de trabalhar a criao das partes harmnicas e rtmicas
em locais diferentes. Portanto, o sistema no uma boa ferramenta para este fim.
Buscando solucionar o problema, planeja-se adotar um mecanismo de sincronizao
entre os agentes que considere uma linha de tempo pr-definida pelo usurio.
O sistema no pode garantir que o desenho de acorde escolhido o melhor para uma
determinada situao, mas simplesmente que ele adequado. Para isso, o sistema no
poderia usar o processamento em fases, descrito no Captulo 4. Nem sempre o desenho
do acorde escolhido traz um bom resultado sonoro, talvez por no ter sido considerada
a conduo de vozes (FILHO, 2005). Nota-se tambm uma certa tendncia do sistema a
levar a msica para regies mais agudas do violo, devido aos pesos definidos no
algoritmo que calcula a similaridade entre os desenhos de acorde. Solues para
contornar esse problema ainda esto em estudo.
No aspecto rtmico a interface grfica implementada mostra-se eficiente para capturar
arpejos simples (dedilhados), entretanto pode ser muito trabalhoso definir certos
padres rtmicos com figuras de tempo muito pequenas e muitos tempos (batidas).
Podemos dizer que so necessrios, ainda, experimentos para determinar todas as
potencialidades e restries do sistema, entretanto pode-se afirmar que o sistema atinge
seu propsito inicial.

6.2 Publicaes
Nesta seo so apresentadas todas as publicaes do autor durante o curso de mestrado.
Observa-se que algumas no possuem uma relao direta como o foco deste trabalho,
entretanto todas as publicaes esto inseridas nos contextos abrangidos pelas
pesquisas, ou seja, as reas da Computao Musicais, IA e Informtica na Educao.

92

6.2.1 Mini-Curso
MILETTO, Evandro, Manara, COSTALONGA, Leandro Lesqueves, FLORES, Luciano
Vargas, FRITSCH, Eloi Fernando; PIMENTA, Marcelo Soares, VICARI, Rosa Maria;
Introduo a Computao Musical. In IV Congresso Brasileiro de Cincia da
Computao. UNIVALI, Itaja-SC, 2004.
6.2.2 Trabalhos completos em anais de eventos
NAKAYAMA, Lauro; VICARI, Rosa Maria; WULFHORST, Rodolfo;
COSTALONGA, Leandro Lesqueves; MILETTO, Evandro Manara. The Musical
Interactions Within Community Agents. In: 5TH WORKSHOP ON AGENTBASED SIMULATON, 2004, Lisboa. Proceedings 5th. Workshop on Agent-Based
Simulation. Erlangen: SCS Publishing House, 2004. p. 189-194.
COSTALONGA, L. L. ; VICARI, Rosa Maria . Multiagent System for Guitar
Rhythm Simulation. In: International Conference on Computing, Communications and
Control Technologies, 2004, Austin - Texas - EUA. Orlando: IIIS, 2004. v. 1. p. 6-11.
MILETTO, Evandro Manara; FRITSCH, Eloi Fernando; FLORES, Luciano Vargas;
LOPES, Natlia; COSTALONGA, Leandro Lesqueves; PIMENTA, Marcelo S. Rumo
ao Portal da Msica Computacional e Eletronica. In: V FRUM DO CENTRO DE
LINGUAGEM MUSICAL, 2002, So Paulo. V Frum do Centro de Linguagem
Musical. So Paulo: ECA-USP, 2002. v. 1, p. 104-107.
6.2.3 Resumos simples em anais de eventos
FRITSCH, Eloi Fernando; MILETTO, Evandro Manara; COSTALONGA, Leandro
Lesqueves; Uma Proposta de Mtodo para o Ensino de Tcnicas de Composio de
Msica Eletrnica por Computador; In Anais do Simpsio Brasileiro de Informtica
na Educao Simpsio Brasileiro de Informtica na Educao, Manaus. 2004.
COSTALONGA, Leandro Lesqueves; NOBILE, Vinicius., MILETTO, Evandro
Manara; VICARI, Rosa Maria Simulao Rtmica de Violo Baseada em Perfil do
Usurio. In Anais do Ambientes de Aprendizagem Baseados em Agentes. Simpsio
Brasileiro de Informtica na Educao, Manaus. 2004
MILETTO, Evandro Manara; PIMENTA, Marcelo Soares; COSTALONGA, Leandro
Lesqueves.: Using the Web-Based Environment for Cooperative Music Prototyping
CODES in Learning Situations. In: 7TH INTERNATIONAL CONFERENCE ON
INTELLIGENT TUTORING SYSTEMS, 2004, Macei. Proceedings of the
International Conference on Intelligent Tutoring Systems. Springer-Verlag, 2004. p.
835-837.
COSTALONGA, Leandro Lesqueves; MILETTO, Evandro Manara; VICARI, Rosa
Maria. Clculo de Acordes com Cifras Personalizveis. In: IX SIMPSIO
BRASILEIRO EM COMPUTAO MUSICAL (IX SBCM), 1993, Campinas. Anais
do XXIII Congresso da Sociedade Brasileira de Computao. 2003.
COSTALONGA, Leandro Lesqueves; MILETTO, Evandro Manara; FLORES, Luciano
Vargas; ALVARES, Luis Otvio C. Um Sistema Multiagente para Simulao de
Performance Rtmica no Violo. In: IX SIMPSIO BRASILEIRO DE

93

COMPUTAO MUSICAL (IX SBCM), 1993, Campinas. Anais do XXIII Congresso


da Sociedade Brasileira de Computao. 2003.
GRANDI, Roges ; COSTALONGA, L. L. ; MENEZES, Paulo et al. Utilizao do
Ambiente Astrha para Implementar um Dicionrio de Acordes Baseado em Autmatos
Finitos. In: SBCM, 2003, Campinas. Anais do XXIII Congresso da Sociedade Brasileira
de
Computao,
2003.
6.2.4 Artigos em revistas e peridicos
MILETTO, Evandro Manara; COSTALONGA, Leandro Lesqueves; FLORES, Luciano
Vargas; FRITSCH, Eloi Fernando; PIMENTA, Marcelo Soares; VICARI, Rosa Maria.
Educao Musical Auxiliada por Computador: Algumas Consideraes e
Experincias. RENOTE - Revista Novas Tecnologias na Educao, Porto Alegre, RS,
v. 2, 08 mar. 2004.
6.2.5 Artigos submetidos e aguardando resposta
COSTALONGA, L.; VICARI, R. A Library for Recognize and calculate chords for
cords instruments. ICMC 2005;
COSTALONGA, L., VICARI, R. A Guitar Player Mutiagent System; PROMAS
Workshop de Programao de Sistemas Multiagentes do AAMAS 2005.
COSTALONGA, L.; GOMES, E.; MILETTO, E.; VICARI, R. Agent-Based Guitar
Performance Simulation. AAAI 2005

6.3

Trabalhos Futuros

Alm de solucionar os problemas j relatados, o sistema tem como principal meta o


aumento da cognio dos agentes, em especial do agente MD.
O trabalho pode ter continuidade no sentido de permitir que os agentes consigam no
somente executar uma pea musical no violo, mas tambm que consigam demonstrar
expressividade ao fazer. Para isso, pretende-se dotar o a Agente MD com a noo de
emoo;
Pesquisas na rea de neurocincia demonstraram que as emoes reforam e agilizam o
mecanismo de tomada de deciso quando a situao demanda aes urgentes. Em
situaes onde h bastante tempo para decidir, geralmente, as decises so baseadas em
processos racionais envolvendo raciocnio e deduo(VENTURA et al. 1999). Segundo
Damsio, quanto maior a urgncia e seriedade da situao menos racional e mais
emocional sero nossas decises. Este o jeito dos humanos lidarem com a
complexidade(DAMSIO, 1994). A msica uma atividade dependente do tempo, logo
susceptvel as aes emocionais.
Emoes podem ser analisadas sobre dois diferentes pontos de vista: o externo,
comportamental, onde a comunicao entre os indivduos considerada para ajudar nas
atitudes baseadas na emoo, e a interna, funcional, na qual os mecanismos da emoo
so cruciais no entendimento do processo de tomada de deciso(VENTURA et. al.
1999). O entendimento das emoes difcil porque elas no so derivadas de
pensamento verbal, logo, difceis de descrever. Felizmente, humanos no se comunicam

94

somente de forma oral ou escrita, eles podem se comunicar no verbalmente usando


gestos ou expresses faciais, por exemplo(KAISER, 1994).
Como uma forma de arte, a msica distinta pela presena de muitas relaes que
podem ser tratadas matematicamente, incluindo ritmo e harmonia. Existem tambm
vrios elementos no matemticos tais como tenso, expectativa e
emoo(DANNENBERG, 1993).Uma das principais caractersticas que difere os
humanos de outros animais o fato de que somos intrinsecamente musicais. Msica
geralmente associada com a expresso das emoes, entretanto o intelecto desempenha
importante papel nas atividades musicais(MIRANDA, 1999). A msica tambm pode
ser vista como uma forma de comunicao e em todas estas vises mencionadas pode
servir como uma ponte mediadora na captura e expresso da emoo pelo
computador(NEMIROVSKY et al. 1999).
A emoo algo com que os msicos esto acostumados a lidar e isto fica claro nos
conceitos harmnicos de consonncia e dissonncia que nos remetem a sensaes
agradveis ou irritantes, respectivamente(ROEDERER, 2002). Desta forma, conclui-se
que: se for possvel extrair de uma msica a emoo empregada pelo compositor
tambm pode ser possvel, conhecendo certas regras de composio, gerar uma msica
ou acompanhamento baseado em uma emoo. Esse caminho evolutivo deste trabalho.

95

REFERNCIAS

BATERA. Disponvel em: <http://www.batera.com.br/>. Acesso em: mar. 2005.


BILOTTA, E.; PANTANO, P.; TALARICO, V. Synthetic Harmonies: An Approach to
Musical Semiosis by Means of Cellular Automata. In: INTERNATIONAL
CONFERENCE ON ARTIFICIAL LIFE, 7., 2000, Portland. Artificial Life VII:
proceedings. Cambridge: MIT Press, 2000.
CHEDIAK, A. Dicionrio de Acordes. So Paulo: Irmos Vitale Ed., 1984.
CONGER, J. C Programming for MIDI. Redwood City, California, USA: M&T
Publishing, 1988.
CONTE, R.; CASTELFRANCHI, C. Minds is not Enough: Precognitive Based of
Social Interaction, In: SYMPOSIUM ON SIMULATING SOCIETIES, 1992.
Proceedings[S.l.: s.n],1992. p. 93-110.
DAHIA, M. et al. Generating Rhythmic Accompaniment for Guitar: the Cyber-Joo
Case Study. In: BRAZILIAN SYMPOSIUM ON COMPUTER MUSIC, SBCM, 9.,
2003. Proceedings[S.l.: s.n], 2003.
DAMSIO, A. R. Descartes' Error, Emotion, Reason, and the Human Brain. New
York, NY: Goset/Putman ,1994 .
DANNENBERG R. Music Representation Issues, Techniques, and Systems. Computer
Music Journal, Cambridge, v. 17, n.3, p. 20-30, 1993.
DANNENBERG, R. B.; THOM B.; WATSON D. A Machine Learning Approach to
Musical Style Recognition. In: INTERNATIONAL COMPUTER MUSIC
CONFERENCE, 1997. Proceedings[S.l.: s.n], 1997. p. 344-347.
DICIONRIO de Msica. Rio de Janeiro: Zahar Ed., 1982.
DOEL, K. Real-time audio synthesis using
<http://www.cs.ubc.ca/spider/kvdoel/jass/>
Acesso

JASS
em:

Disponvel em:
mar.
2005.

FERBER, J. Multi-Agent Systems : An Introduction to Distributed Artificial


Intelligence. Harlow: Addison-Wesley, 1999.
FILHO,
M.
Contraponto
a
duas
vozes.
Disponvel
em:
<http://www.guitarx.com.br/index.asp?url=library_html/destaque/1%C2%AAsema
na_nov/mauricio_contraponto.htm>. Acesso em: mar. 2005.
FOX M, et al. An Organizational Ontology for Enterprise Modeling. Simulation
Organizations Computational Models of Institutions and Groups. In: PRIETULA, M.;
CARLEY K.; GRASSER, L. (Ed.). Simulating Organizations: Computational models
of institutions and groups. Cambridge: AAAI Press/ MIT Press, 1998. p. 131-152.
GABRIELSON, A. Rhythm in Music. In: EVANS, J. R; CLYNESm M. (Ed.). Rhythm
in Psychological, Linguistic and Musical Processes. Springfield: Charles C. Thomas,
1986. p.131-167.
GERRIT, G. Java and Midi Programs: Wire Provider. Disponvel em:
<http://www.geocities.com/ggehnen/>. Acesso em: set. 2003
HUHNS M.; SINGH P. Reading in Agents. San Francisco, California: [s.n], 1998. p.
91-97
JAVASOUND. Disponvel em:
Acesso em: mar. 2004.

<http://java.sun.com/products/java-media/sound/>.

JFUGUE. Disponvel em: <http://innix.com/jfugue/>. Acesso em: ago. 2003


JMSL
Java
Music
Specification
Language.
Disponvel
<http://www.algomusic.com/jmsl/index.html>. Acesso em: set. 2003.

em:

JSCORE.
Disponvel
em:
<http://homepages.nyu.edu/~ray208/Jscoring/html/JScore.html>. Acesso em: set. 2003 .
JSYNTHLIB - Universal Synthesizer Patch Editor.
<http://www.overwhelmed.org/jsynthlib/>. Acesso em: set. 2003

Disponvel

em:

KAISER, S.; WEHRLE, T. Emotion research and AI: some theoretical and technical
issues. Revue d'Intelligence Artificielle, Genve, 1994.
MARSANYI, R. JavaMIDI. Disponvel em: <http://www.softsynth.com/javamidi/>.
Acesso em: set. 2003
MCNABB,
M.
Java
MIDI
Kit:
Fantasia.
Disponvel
<http://www.mcnabb.com/software/fantasia/index.html>. Acesso em: set. 2003.

em:

MIDI SHARE. Java Programming: MidiShare and Java. Disponvel em:


<http://www.grame.fr/MidiShare/Develop/Java.html> . Acesso em: set. 2003
MIRANDA, E. Music, Machines, Intelligence and the Brain. San Journal of
Electroacoustic Music, [S.l.], n.12, 1999.
MIRANDA, E. R. Emergent Sound Repertories in Virtual Societies. Computer Music
Journal, Cambridge, v. 26, n.2, p. 77-90, Summer 2002.
NEMIROVSKY, P.; DAVENPORT, G. GuideShoes: Navigation based on musical
patterns. In: CHI,1999. Extended Abstracts . New York, NY: ACM, 1999. p. 266-267.
NOSUCH MIDI. Disponvel em: < http://www.nosuch.com/nosuchmidi/>. Acesso em:
set. 2003.

97

PG Music Inc. Band-in-a-box Pro 8.0. Canad, 1998.


PROJECT XEMO. Disponvel em: <www.xemo.org>. Acesso em: set. 2003.
RAMALHO, G.; ROLLAND, P.-Y.; GANASCIA, J.-G. An Artificially Intelligent Jazz
Performer. Journal of New Music Research, Amsterdam , v.28, n.2, p. 105-129, 1999.
REZENDE, S.O. Sistemas Inteligentes: Fundamentos e Aplicaes. Barueri, SP,
Manole Ed.,2003.
ROADS, C. The Computer Music Tutorial. Cambridge : Mit Press, c1996.
ROEDERER, J.Introduo Fsica e Psicofsica da Msica. So Paulo: Ed. EDUSP,
2002.
RUSSELL, S. J. Inteligncia Artificial. Rio de Janeiro: Campus, 2004.
RUSSELL, S.; NORVIG, P. Artifical Intelligence: A Modern Approach. New Jersey,
Prentice Hall, 1995.
SANTANA, H. et al. VexPat - An Analysis Tool for the Discovery of Musical Patterns.
In: BRAZILIAN SYMPOSIUM ON COMPUTER MUSIC, SBCM, 9., 2003;
Proceedings[S.l.: s.n], 2003.
SHER, C. The New Real . Berkeley: Sher Music, 1991.
SIMON, H. Model of Bounded Rationality: BehavioralEconomics and Business
Organization. Cambridge: MIT Press,1982.
SORENSEN, A.; BROWN,A. jMusic: Music Composition in Java. Disponvel em:
<http://jmusic.ci.qut.edu.au/>. Acesso em: set. 2003.
TOM
DA
MATA.
Disponvel
<http://www.tomdamata.org.br/cancioneiro/ritmo.asp>. Acesso em: mar. 2005.

em:

TRITONUS: Open Source Java Sound. Disponvel em: < http://tritonus.org/>. Acesso
em: set. 2003.
VENTURA, R.; CUSTDIO, L.; PINTO C. Artificial Emotions - Good Bye Mr.
Spock! In: Cognitive Science, Tokyo, Japan, p. 938-941, 1999.
WESSEL, D.; WRIGHT, M. Problems and Prospects for Intimate Musical Control of
Computers. Computer Music Journal, Cambridge, v.26, n.3, p. 11-22, Fall 2002.
WEST, R.; HOWELL, P.; CROSS, I. Musical Structure and Knowledge Representation.
In: HOWELL, P.; WEST, R.; CROSS, I.(Ed.). Representing Musical Structure.
London: Academic Press, 1991. p.1 -30.
WULFHORST, R. et al. An Open Architecture for a Musical Multi-Agent System. In:
BRAZILIAN SYMPOSIUM ON COMPUTER MUSIC, SBCM, 8., 2001.
Proceedings[S.l.: s.n], 2001.
WULFHORST,
R.
Uma
Abordagem
Multiagente
para
Sistemas Musicais Interativos.2002. Dissertao (Mestrado em Cincia da
Computao) Instituto de Informtica, UFRGS, Porto Alegre.

ANEXO A
ANLISE DE SOFTWARES MUSICAIS
FOCADOS EM VIOLO/GUITARRA

Introduo
O objetivo desta anlise foi embasar as funcionalidades inovadoras da proposta e
compar-la com trabalho similares. A seleo dos software analisados baseou-se na data
de distribuio dos mesmos, sendo a maior parte deles do ano de 2002 em diante.
Alguns casos especficos no obedecem a este critrio. Isto ocorreu quando
funcionalidade desses software so particularmente similares ao software desenvolvido
na dissertao.
Devido ao grande nmero de software encontrados, os mesmos foram classificados em:
Dicionrios de Acorde, Editores de Tablatura, Sistemas de Treinamento, Software para
Composio. No se pretende com essas classificaes cobrir todos os tipos de software
que tem o foco em guitarra, simplesmente organizar os software que possuem
funcionalidades afins com o software fruto da dissertao.

Dicionrio de Acordes
Nesta categoria so analisados software que tem como principal caracterstica mostrar
como um acorde executado no violo/guitarra, seja atravs de uma representao
grfica, sonora ou textual. comum encontrar Dicionrios de Acordes como parte de
software classificados em outras categorias que possuem objetivos mais abrangentes
que os Dicionrios de Acordes.
ChordSMART 2.0: Permite a visualizao do acorde sobre a imagem do violo, com
fcil navegao entre os vrios desenhos dos acordes. Trabalha com os principais
intervalos, porm estes so fixos, no permitindo a alterao dos smbolos e a
composio de intervalos. Um ponto positivo a possibilidade da alterao da afinao
do violo, entretanto esta alterao limitada a uma lista de opes.
DAccord Guitar Chord Dictionary 2.0: Um bom software brasileiro desenvolvido
pela UFPE. O DAccord demonstra visualmente e sonoramente o acorde em seus
diversos desenhos. Os acorde podem ser escolhidos de uma base de dados ou
desenhados diretamente no brao do violo, que pode ser personalizado (viso de frente,
canhota, destra etc.) Integrado ao software existe um transpositor de tons que auxilia
nos clculos da cifras.

99

FretboardDots 2.2: Um dicionrio de acordes com uma abordagem diferente das


demais analisadas. Os acordes no so identificados pelas cifras e sim pelos intervalos.
Apesar de confuso para usurio menos experientes em msica, o sistema conseguiu
resolver com simplicidade a questes das divergncias de smbolos de cifragem. A
afinao do instrumento pode ser alterada. Um ponto negativo que trata somente os
intervalos de uma oitava.
WinChord 4.2: Um dicionrio de acordes bem completo. Como quase todo dicionrio
que calcula os acordes ao invs de uma simples indexao dos desenhos, ele permite
alterar os parmetros de calculo do algoritmo (afinao do instrumento, quantidade de
dedos, abertura dos dedos etc) para melhor ajustar-se as necessidades e restries do
usurio. O acorde mostrado no brao da guitarra, em partitura e em um teclado
musical. A lista de intervalos bem ampla porm os smbolos so estticos e esto na
notao de cifragem (EUA). O caminho inverso, ou seja, a identificao do acorde
atravs do desenho do acorde tambm possvel. Como ponto negativo temos a
interface muito confusa.
ChordWizard Gold 2.0: A completude e generalidade com que os temas musicais
foram abordados por este software tornam-o de difcil classificao. No o objetivo
deste trabalho descrever com detalhes o software analisado, portanto apenas lista-se
apenas os pontos mais significativos deste software: personalizao da interface, suporte
a vrios instrumentos de corda, representao grfica e sonora dos acordes como
descrio das notas e intervalos (inclusiva com partitura), deduo explicativa do acorde
a partir do desenho do acorde, indicao de acordes e escalas equivalentes, metrnomo,
afinador, completa biblioteca de escalas, tutorial de teoria musical e bom suporte a
impresso.
AxMaster 1.1: Um dicionrio de acordes com glossrio e teoria musical. Apesar de no
ter suporte a som, possui uma interface simples e clara.

Editores de Tablatura
Esta categoria provavelmente a mais abrangente dentre todas mencionadas. O
principal objetivo dos software desta categoria documentao da msica em
tablaturas/partituras musicais e a manipulao dos dados armazenados nas suas mais
diversas variaes, como por exemplo, a execuo sonora da msica (funcionalidade
comumente encontrada). Em editores ainda comum encontrar dicionrio de acordes,
afinadores, modos das escalas, etc. Estas ferramentas agregadas as funcionalidades
bsicas do editores de tablaturas, transforma o simples editor em verdadeiros ambientes
de auxlio a composio.
Chord Writer 2.0.2: um editor de tablatura muito simples, pouco mais que um
dicionrio de acordes. Simplesmente vincula informaes harmnicas (desenho do
acorde) a letra da msica para impresso ou troca de dados. No faz nenhum
processamento musical com esses dados.
TEFview 2.60: Apesar de estar classificado com um editor de tablatura, esta aplicao
simplesmente um bom visualizador. Dentre suas principais funcionalidades:
visualizao em partitura e tablatura simultaneamente. As diagramaes dos acordes
tambm podem ser inseridas na prpria partitura ou visualizadas em uma janela
flutuante enquanto a msica reproduzida. Tem como ponto negativo o formato
proprietrio do arquivo.

TablEdit 2.62: Engloba todas as funcionalidades do TEFview 2.60 alm das


funcionalidades de edio. possvel entrar as notas diretamente na partitura/tablatura
usando teclado virtual, guitarra virtual ou as figuras de notas disponveis em um menu.
O que diferencia este editor dos demais so os recursos extras para insero de smbolos
especficos para tablaturas de guitarra como efeitos (bend, hammer-on, pull-off etc) e
informaes de mo direta (dedos e direo do arpeggio). Infelizmente as informaes
de mo direita no influenciam na sonoridade no ato da reproduo da msica e tambm
no h suporte para entradas de dados via instrumento MIDI. Gravam no formato
proprietrio TEF.
Tab Player 4.053: Permite a reproduo e visualizao dos acordes em tablaturas, ou
seja, seis linhas horizontais com nmeros indicando os as casas que devem ser
pressionadas. Como tablaturas no so precisas no tempo, pode ocorrer impreciso na
reproduo da mesma. Um ponto positivo um mecanismo de busca de tablaturas na
web integrado na ferramenta.
Power Tab 1.7: Um excelente representante da categoria dos editores de tablatura com
algo mais: controle dos padres rtmicos. Alm de todas as funcionalidades de um bom
editor de tablaturas como dicionrio de acordes, suporte a exportao e impresso,
afinador etc esta ferramenta traz smbolos especficos de tablaturas para violo que
afetam a sonoridade produzida, so efeitos como: bend, pull-off, slides, vibrato etc. O
grande diferencial deste editor esta no controle dos padres rtmicos, apesar de um
pouco difcil de entender, possui paremetrizaes como a direo do arpeggio, o acento,
durao, forma de abafamento etc.
Guitar Pro 4: Um dos primeiros software musicais focado nas necessidades dos
violonistas/guitarristas. Por sua maturidade, sem dvida, um dos melhores e mais
usados. Possui uma interface bem organizada que fornece ao usurio vrias
possibilidades de personalizao. Dicionrio de acordes, afinador, escalas e outras
ferramentas compem este software. A simbologia da tablatura bem completa e isto
permite uma boa preciso musical e fcil acompanhamento na reproduo da msica.
Apesar de possibilitar na notao da tablatura informaes de mo direita, tais como o
direo do arpejo e o dedo que ir tocar cada corda, fica evidente a omisso de como os
padres rtmicos devem ser executados na guitarra, isto porque os acordes (apesar de
notados em diagramas sob a tablatura) so considerados notas individuais espalhas no
tempo ou sobrepostas.
Desktop Guitarist 2: Para a categoria que est inserido, este software
demasiadamente simples. Na verdade, este software foi desenvolvido por um guitarrista
que no teve preocupaes tcnicas e de engenharia de software na construo da
aplicao. Possui afinador, escalas e dicionrio de acordes, mas tudo muito simples.
No possui um acompanhamento da tablatura com o som gerado, deixando
simplesmente que o sistema indique como os acordes so feitos em uma ilustrao do
brao da guitarra.
Decifra 2: Na verso de demonstrao analisada o software no passa de um
visualizador de cifras (ou diagramas) associadas a letra da msica. Tambm possui um
fraco dicionrio de acordes e lies de guitarra.
WebLyrics 1.0.3.1: um ambiente para controle de letras cifradas. O grande
diferencial deste software brasileiro a forma como a tablatura reproduzida, isto , o
usurio determina o arpejo dos acordes usando o teclado numrico, possibilitando a
impresso de uma certa expressividade e controle do andamento.

101

Sistemas de Treinamento
So sistemas que tentam transmitir conhecimento aos usurios e validar o aprendizado
de alguma forma. Em geral trazem exerccios e grande repositrio de informaes para
consultas e referencia.
Fretboard Warrior 1.0: Aplicao simples em formato de jogo que mostra a nota em
uma representao grfica do brao da guitarra e simultaneamente toca o som
correspondente da nota. O usurio deve indicar em um menu qual a nota que a
aplicao lhe mostrou.
Ultimate Guitar Chord Trainer: Aplicao que demonstra a formao de acordes
atravs da incluso das notas (seqencialmente) na figura de um brao de guitarra. O
nome das notas, o som, os intervalos que compe o acorde e o nome do acorde so
mostrados. O usurio pode parametrizar como os acordes so formados. A interface
um pouco confusa e no ha como navegar entre os desenhos do acorde, isto porque os
acordes so mostrados em seqncia com tempo de troca entre eles pr-determinado.
Isto seria um erro grave se considerssemos esta aplicao como um dicionrio de
acordes.
NSA Song Player 1.22: Apesar de o prprio fabricante o considerar um sistema de
treinamento, isto duvidoso. A aplicao possui um dicionrio de acordes que permite
alterao da afinao e um guia de escalas. Escolhendo os acordes pode-se criar uma
msica e reproduzi-la ou ainda buscar os dados musicais de uma tablatura. A interface
extravagante. Desenvolvido em Flash e, talvez por isso, deixa a desejar em um projeto
de interface mais adequado.
aGuitar Pro 1.0: Uma aplicao que envolve teoria musical e exerccios para treinar o
ouvido do guitarrista. Possui testes para reconhecimento de acordes, notas, notas no
brao do instrumento alm de um executor de tablaturas (simplesmente toca as
tablaturas).
Guitar Trainer 2.4: Relaciona as notas na partitura com sua posio na guitarra. Possui
uma srie de testes associados a um aprendiz que pode ser criado.
Guitar Power 1.1.6: O fabricante o considera um sistema de aprendizado, mas no o
vejo desta forma. um dicionrio de acordes que mostra arpeggios (bem simples) e
tambm trabalha com escalas. Tem uma boa interface e classifica bem os acordes, alias,
este seu diferencial.
EarMaster Pro 4.0: Um excelente sistema de treinamento para qualquer instrumento
musical. Possui testes para treinamento rtmicos, meldico, harmnico de intervalos e
de reconhecimento de acordes em vrios nveis onde a dificuldade vai sendo aumentada
gradualmente a pedido do usurio. Interface bem projeta.

Software para Composio


Geram material sonoro que podem ser usados em composies. Podem aparecer em
forma de plug-ins de software de gravao ou como aplicaes independentes que
sintetizam os sons e descarregam em um arquivo de udio.
Voicings 4.06: Um software com uma idia simples porm
inovadora.
Neste
software possvel trabalhar separadamente as vozes dos acordes e seqnci-las
definindo efeitos de volume, pull off, hammer e outros. como se estivssemos

trabalhando o modo de arpejar, ou seja, informaes de mo direita. Tem ainda o


recurso de dicionrio de acordes e uma boa estratgia de loopings. Isto muito parecido
com o objetivo desta dissertao, porm com um enfoque diferente.
Rhythm n Chords Lite 2.04 (Plug-in para o Cakewalk): O mais profissional dos
software analisados. distribudo em forma de plug-in para os software de gravao
multitrilha para os produtos da Cakewalk. Objetiva criar a parte de guitarra da
composio atravs da criao de uma progresso de acordes associados a padres
rtmicos armazenados em bibliotecas de ritmos. Permite parametrizaes do controle
dos acordes e dos arpeggios.
Melody Assistant 6.2.0: O Melody Assistant compe um ambiente integrado de 3
ferramentas: Harmony Assistent, Virtual Singer e o prprio Assistent. Eles podem
funcionar separadamente, mas possuem a mesma interface. Este ambiente semiprofissional, possui uma boa qualidade de som e suporte a MIDI. Sua interface bonita,
personalizvel, mas confusa. O Melody Assintent a parte do ambiente que trabalha
com a melodia e genrico a qualquer instrumento. S se tem indcios que um software
com foco (ou um dos focos) na guitarra quando, ao explorarmos, encontramos um
dicionrio de acordes e a opo de visualizar a melodias em tabalturas.
Harmony Assistant 8.2.0: Estende o Melody Assistente com funcionalidade de
acompanhamento e ritmo. Tem muitas opes de configurao que sugere um poder
maior do que realmente o software tem. Falha na documentao que o acompanha e isso
o torna ainda mais difcil de ser operado e compreendido. Sugeri em sua documentao
que podem ser criados padres rtmicos para qualquer instrumento, inclusive
guitarra/violo, mas no foi possvel testar devido falta de documentao apropriada.
Entretanto claro de ver que existe um bom controle de padres rtmicos voltados a
percusso. uma ferramenta com funcionalidades bem poderosas.

103

ANEXO B
TECNOLOGIAS JAVA APLICADAS A
COMPUTAO MUSICAL

Introduo
So vrias as linguagens de programao que vm sendo usadas para escrever software
musicais, entretanto uma vem se destacando como a preferida pelos principais grupos
de pesquisa: Java. fato que Java uma linguagem que ganhou grande notoriedade e
vem sendo usada em diferentes reas de conhecimentos tanto na indstria como na
academia, porm quais aspectos qualificam Java como uma boa linguagem para
aplicaes musicais?
Este trabalho apresenta as principais tecnologias Java aplicadas computao musical
atravs de uma anlise funcional e exemplos prticos. A seguir sero descritos os
pacotes analisados.

Java Sound (JSDK 1.4.2)


Java Sound uma API que prov suporte para operaes de udio e MIDI com alta
qualidade, tais como: captura, mixagem, gravao, sequenciamento e sntese MIDI. O
Java Sound vem junto com o J2SE desde a verso 1.3 e por isso considerada por
alguns como a fonte do sucesso do Java para a programao musical
Em constante evoluo e melhoria, so caractersticas nativas do Java Sound:

Suporte aos formatos de arquivos de udio: AIFF, AU e WAV;

Suporte aos formatos de arquivos de msica: MIDI Type 0, MIDI Type 1, e Rich
Music Format (RMF);

Formatos de som em 8/16 bits, mono e stereo, com sample rate de 8 a 48 Hz;

Dados de udio codificados em linear, a-law, and mu-law para qualquer um dos
formatos de udio suportados;

Sntese e sequenciamento MIDI por software, bem como acesso a qualquer


dispositivo MIDI em hardware;

Mixer com capacidade para mixar e renderizar mais de 64 canais de udio


digital e sons MIDI sintetizados.

Como exemplos de aplicaes potenciais para o Java Sound, cita-se:

Frameworks para comunicao, como conferencia e telefonia;

Sistemas de entrega de contedo como media players;

Programas interativos como jogos e websites dinmicos;

Criao e edio de contedo sonoro e musical;

Componentes e ferramentas para manipulao Sonora;

A API Java Sound o suporte a udio de mais baixo nvel na plataforma Java,
permitindo aos programas um bom controle nas operaes de som. A API no inclui
editores de som sofisticados ou ferramentas grficas, mas extensvel o suficiente para
que isso seja construdo a parir dele, como uma API de baixo nvel deve ser.
Existem APIs de mais alto nvel para desenvolvimento mais rpido e fcil de
aplicaes multimdia. A prpria Sun, fabricante do Java Sound, distribui o Java Media
Framework (JMF). O JMF especifica uma arquitetura unificada, protocolo para trocas
de mensagem e interface de programao para captura, execuo e sincronizao de
mdias baseadas no tempo, como som e vdeo.
O Java Sound suporta tanto udio digital como MIDI, atravs de seus dois pacotes
distintos:

javax.sound.sampled: Captura, mixa e toca audio digital (samples);

javax.sound.midi:Sntese, sequenciamento e tratamento de eventos MIDI;

Dois outros pacotes permitem que terceiros criem e distribuam componentes de


software customizados para estender as capacidades do Java Sound.

javax.sound.sampled.spi

javax.sound.midi.spi

Configuraes de udio
O Java Sound API utiliza os recursos de hardware disponveis na mquina para
desempenhar sua principal funo: transportar udio (mover dados formatados para
dentro fora do sistema). Para executar a contento esta funo, o Java Sound implementa
mtodos de gravao e converso entre alguns formatos de udio deixando a cargo de
terceiros a implementao de plug-ins que venham suportar novos formatos de udio.
Muitas APIs para tratamento de som trabalham com o conceito de dispositivo de udio
(devices). Normalmente, um device uma interface para um dispositivo fsico de
entrada/sada, No contexto do Java Sound, devices so representados por objetos do tipo
Mixer, que tem a funo de juntar e direcionar diversas entradas de udio a uma ou mais
sadas.
O objeto responsvel por mover o udio para dentro e para fora do sistema
(normalmente para dentro e fora do Mixer) a Line. Outros objetos tambm podem ser
vistos como uma Line tais como portas de entrada e sada (microfone, CD-ROM,
headfone etc.) e at mesmo o Mixer, pois eles tambm podem ser caminhos para o
udio. Pode-se fazer uma analogia da Line com uma trilha (track) em um gravador
multitrack ligado a um mixer externo, com a diferena que, no Java Sound, uma Line

105

pode ser multi-canal de acordo com o formato de udio em transporte. A Figura 1


mostra a relao de herana entre algumas classes do Java Sound.

Fig. 1 Modelo hierrquico do objetos do Java Sound.

A interface Mixer define mtodos para se obter as Lines que ele gerencia, que podem
ser do tipo SourceDateLine (input) ou TargetDataLine(output). A inteface Line, em si,
no define mtodos para controle de gravao e execuo, sendo estes s definidos nas
DataLines.
Clip um DataLine que armazena todo o som na memria antes de sua execuo.
Graas a essa caracterstica, possvel navegar pela mdia e programar repeties
(loop).
Todo recurso de udio obtido atravs da classe que gerencia os recursos de hardware
da mquina: AudioSystem.
Uso do Java Sound na Web
Applets podem usar o Java Sound, entretanto deve-se ficar atento as restries de
segurana definidas na classe AudioPermission.O padro que uma Applet rodando
sobre restries de segurana pode executar, mas no gravar sons. Isso pode ser
modificado caso o usurio permita.
MIDI
O pacote javax.sound.midi tem classes responsveis pelo transporte, sequenciamento e
sntese de eventos MIDI .
O diagrama mostrado na Figura 2 ilustra as relaes funcionais entre os componentes
principais possveis em uma configurao MIDI baseada no Java Sound.

Fig. 2: Configurao de componentes no Java Sound.

No exemplo acima, uma performance musical preparada a partir de uma partitura


armazenada em MIDI e persistida em disco.Este arquivo MIDI lido e executado pelo
seqenciador (software), que envia as mensagens MIDI para outros dispositivos, com o
sintetizador (interno e/ou externo). O sintetizador pode usar soundbanks para uma
melhor qualidade nos timbres dos instrumentos sintetizados.
Interfaces para Expanso de Funcionalidades (SPI - Service Provider Interfaces)
Os pacotes javax.sound.sampled.spi and javax.sound.midi.spi contm
interfaces(mixer de udio, sintetizador, conversor etc.) que permitem a desenvolvedores
independentes criarem novos recursos de MIDI e udio que podem ser distribudos
separadamente e conectados (plug-ins) as implementaes feitas com Java Sound sem
que estas necessitem sofrer modificaes de cdigo. Estas implementaes podem ser
puramente software ou interfaces para melhor uso do hardware.
Consideraes sobre o Java Sound
O Java Sound no foi a primeira biblioteca a manipular sons e dados musicais (MIDI)
na plataforma Java, mas sem dvida a mais importante delas. Apesar das restries, o
Java Sound permite que as aplicaes escritas com suas classes funcionem da mesma
forma nas diversas plataformas suportadas pelo Java.
Nota-se tambm que a Sun no tem interesse em desenvolver muito mais o Java Sound,
que teve sua misso cumprida, ou seja, ele e vai continuar sendo uma biblioteca de
baixo nvel para manipulao de som e dados musicais com uma importante alternativa
de expanso, o SPI.

107

JMSL Java Music Specification Language


JMSL um framework desenvolvido em Java que auxilia no desenvolvimento de
software musicais, em especial para composio de msica computacional,
performances interativas e construo de instrumentos virtuais.
Entre as principais vantagens do JMSL, pode-se citar:
Total integrao com a linguagem (Java) e recursos da mesma, incluindo conectividade
com banco de dados, ferramentas de rede, grficos 2D e 3D, Servlet etc.;
Comunicao direta com outras bibliotecas e dispositivos implementados em Java,
como o Jsyn, JavaMIDI, MidiShare e Java Sound;
Incorporao do pacote JScore, uma biblioteca que permite edio da notao musical;
Permite ao compositor distribuir as aplicaes localmente ou atravs de Applets;
Gratuito em uma verso mais restrita (Lite);
Baseada no HMSL Hierarquical Music Specification Language, o JMSL mantm a
idia original de seu predecessor ao basear-se no conceito de hierarquias ao desenvolver
aplicaes musicais. Hierarquias nada mais so do que relacionamentos pai-filho, com
representado na Figura 3.
minhaMusica

guitarra

verso1

refrao

baixo

bateria

verso2

Fig. 3: Exemplo de organizao hierrquica em uma msica. .

As hierarquias do JMSL no necessariamente precisam ser fieis a realidade, podendo-se


criar estruturas hierrquicas altamente complexas sem nenhuma equivalncia aparente
no mundo real. Hierarquias podem ser previamente definidas ou criadas durante a
execuo de uma pea musical, entretanto todos os objetos hierarquizveis devem ser
do tipo Composable (interface que define tal caracterstica). Dois tipos de hierarquias
podem ser criados no JMSL: seqencial e paralela; Estas so, respectivamente,
representadas pelas classes SequencialCollection e ParallelCollection.
Hierarquizar, no contexto do JMSL, no significa apenas posicionar os objetos em uma
viso top-down, definindo assim a importncia dos objetos (entidades) no contexto
musical. No JMSL, posicionar um objeto na hierarquia significa definir o momento em
que o mesmo ser executado. Desta forma, o objeto mais alto na hierarquia solicita aos
seus filhos (objetos ligados diretamente a ele) que sejam executados todos juntos
(hierarquia paralela) ou seqencialmente (hierarquia seqencial).
O trecho de cdigo abaixo (Exemplo 1), mostra como possvel montar uma hierarquia
paralela. No vamos entrar em detalhes dos objetos neste momento, entretanto, para
uma boa compreenso do cdigo, importante citar que tanto o ParallelCollection
como a MusicShape so especializaes do MusicJob, que por sua vez, implementa a
interface Compasable.

ParallelCollection col = new ParallelCollection();


col.setRepeats(3);
MusicJob mj = new MusicJob();
mj.setRepeatPause(2.0);
mj.setRepeats(4);
MusicShape sh = new MusicShape(3);
sh.add(1.0, 66, 120);
sh.add(1.0, 67, 120);
sh.add(1.0, 68, 120);
sh.add(1.0, 69, 120);
sh.setRepeats(2);
col.add(mj);
col.add(sh);
col.launch(JMSL.now());
Exemplo 1: Construo de uma hierarquia paralela.

No Exemplo 1, 3(trs) objetos so criados: col (ParallelCollection), mj (MusicJob)


e sh (MusicShape) e esto hierarquizados como mostra a Figura 4. Por estarem
ligados a um objeto do tipo ParallelCollection, os objetos mj e sh so executados
simultaneamente a partir do momento que o col executado (linha 14). Cada um dos
objetos ter sua execuo repetida por diferentes vezes. A cada execuo do col (so
3), o mj executado 4 vezes e o sh duas vezes, sendo que o mj tem um intervalo
entre as repeties de 2 segundos.

col
(ParalellCollection)
mj
(MusicJob)

sh
(MusicShape)

Fig. 4: Representao visual da hierarquia do Exemplo 1.

Principais Classes e Intefaces


As classes e interfaces do JMSL e APIs correlatas (JScore, Jsyn, JavaMIDI etc.) esto
organizadas em pacotes, como de costume. Os principais pacotes e suas respectivas
caractersticas so citados na Tabela 1.
Pacote

Principais Caractersticas

com.softsynth.jmsl

Pacote que contm as principais classe e interfaces do


JMSL. Imprescindvel para qualquer aplicao que
venha usar o JMSL.

109

com.softsynth.jmsl.jsyn

Engloba as classes e interfaces necessrias para a


integrao com o Jsyn.

com.softsynth.jmsl.midi

Classes necessrias para manipulao de eventos


MIDI, incluindo comunicao com dispositivos
externos.

com.softsynth.jmsl.net

Permite manipulao(serializao) de objetos JSML


na Web.

com.softsynth.jmsl.score O JScore agregado ao JSML. Classes e interfaces que


permitem edio de notao musical.
com.softsynth.jmsl.util

Conjunto de classes utilitrias de especial uso para


composio algortmica.

com.softsynth.jmsl.view

Conjunto de classes grficas para exibio de


informaes musicais tratadas com o JSML.

Tab. 1 Principais pacotes do JSML

Descreve-se a seguir as classes e interfaces mais relevantes


com.softsynth.jmsl, que por sua vez o principal pacote do JSML.

do

pacote

Composable
Qualquer objeto Java que implemente a interface Compasable pode ser posicionado em
uma hierarquia e programado para ser executado em determinado tempo e/ou ordem;
Compasable a principal interface do JMSL. Ela define mtodos para o escalonamento
dos objetos. Na hierarquia, o objeto pai envia mensagens aos filhos indicando o
momento dele ser iniciado e este, por sua vez, retorna ao pai o momento em que
encerrou sua execuo.
Por ser uma sub-interface da interface base Playable, os objetos que implementam a
Composable so obrigados a sobrescrever o mtodo play() retornando o momento do
final da execuo do mesmo.
Alm dos mtodos de controle de execuo musical como: play(), stop(), halt(), finish(),
repeat() e outros, a interface Composable ainda define mtodos para transpor
tonalidades, controlar andamento e visualizar a hierarquia onde est inserida.
A maior parte das classes que veremos a seguir implementam a interface Composable,
portanto, deixaremos os exemplos para mais adiante.
MusicJob
a classe base do JMSL, uma implementao direta da interface Composable que
controla as aes repetidamente no tempo. Generaliza importantes classes como a
ParallelCollection, SequentialCollection e MusicShape;
Alm dos mtodos definidos na interface Composable, o MusicJob tem eventos que
permitem incluso de atrasos e pausas entre os eventos e tambm a capacidade de ser
serializado e, conseqentemente, persistido, propiciando seu uso na Web. Qualquer

cdigo Java que precise ser gerenciado no tempo pode fazer uso do MusicJob, desde do
envio de notas musicais at mudana da cor do fundo ou exibio de uma mensagem.
Dois tipos de abordagens OOP podem ser usadas em relao ao MusicJob: a sobreescrita dos mtodos em sub-classes ou a incluso de funcionalidade atravs do mtodo
setPlayable() na prpria MusicJob instanciada. O Exemplo 2 mostra como possvel
estender a classe MusicJob com uma de nossa prpria implementao.
package JMSLTutorial;
import com.softsynth.jmsl.*;
public class MinhaMusicJob extends MusicJob {
/** Sobre-escreve repeat() para prover nossa funcionalidade*/
public double repeat(double playTime) throws InterruptedException {
System.out.println("Eu sou uma MusicJob");
return playTime; // retorna o tempo da concluso
}
/** Teste */
public static void main(String args[]) {
MinhaMusicJob minhaMusicJob = new MinhaMusicJob ();
minhaMusicJob.setRepeats(10); // repete 10 vezes
minhaMusicJob.setRepeatPause(1.5);// espera 1.5s entre as

//repeties

minhaMusicJob.launch(JMSL.now()); // inicia
Exemplo 2: Sobre-escrevendo os mtodos da MusicJob

MusicShape
A MusicShape um lista multidimensional, onde as linhas so chamadas de elementos e
as colunas de dimenses. Os dados contidos em uma MusicShape no tem forma
definida, ficando a cargo de outra classe a interpretao(Interpreter) dos mesmos. Esta
caracterstica garante flexibilidade a classe, podendo a mesma representar melodias,
harmonias, ritmos ou qualquer outro tipo de dado, inclusive no musical, que precise ser
escalonado no tempo.
Os dados podem ser tocados pela prpria MusicShape (implementa a Composable) ou
por qualquer outra Composable;
Os dados abaixo representam uma melodia, onde a dimenso 0 (primeira coluna) guarda
a durao, dimenso 1 (segunda coluna) guarda a nota MIDI e a dimenso 2(terceira
coluna) guarda a velocidade(velocity) MIDI. importante salientar que os dados no
precisam ter uma interpretao obvia, como no MIDI.
0

1.0

65.0

120.0

1.5

68.0

110.0

0.5

72.0

100.0

111

1.0

60.0

120.0

1.0

63.0

80.0

Tab. 2: Dados em uma MusicShape.

Os dados contidos em uma MusicShape podem ser modificados em tempo real pelo
usurio usando o MusicShapeEditor, contido no JMSL; Por exemplo, os dados de uma
MusicShape podem ser definidos e tocados algoritmicamente, como mostra o trecho de
cdigo do Exemplo 3.
.
.
for (int i=0; i < numberOfElements; i++){
double value = centralValue + JMSLRandom.choosePlusMinus(i);
myShape.add(value);
}
Exemplo 3: Gerao randmica dos dados de uma MusicShape

Instrument
O instrumento JMSL toca os dados que so interpretados quando o mtodo play() da
interface Instrument disparado. Para uma interpretao customizada dos dados,
sobrescreve-se o mtodo play(); Seja qual for o tipo de dado (nota MIDI, parmetro do
JSyn, parmetros de cor etc.) a interpretao de total responsabilidade do Instrument,
ficando a cargo dele escolher enviar para um interpretador customizado se este for o
caso.
Qualquer classe que implemente a interface Instrument toca os dados de uma
MusicShape (um vetor de ponto flutuante). Quando a MusicShape carragada, ela pega
um elemento por vez e entrega ao seu Instrument, atravs do mtodo play(), assim o
Instrument pode interpretar diretamente o dado ou passar ao seu Interpreter
(interpretador) customizado.
A interface Instrument tem uma classe adaptadora que implementa os seus mtodos para
facilitar a programao: a InstrumentAdapter. O Exemplo 4 mostra como simplesmente
imprimir os dados declarando nossa prpria subclasse da InstrumentAdapter e
sobrescrevendo o mtodo o mtodo play().
Note que no cdigo do Exemplo 4, o momento da execuo passado como argumento
(playTime) do mtodo play(), que por sua vez retorna o tempo atualizado.

class PrintingInstrument extends InstrumentAdapter {


public double play(double playTime, double timeStretch,
JMSL.out.println("Dados do vetor DAR");
JMSL.printDoubleArray(dar);
JMSL.out.println();
return playTime + (dar[0]*timeStretch); //dar[0]=durao
}

double dar[]){

}
Exemplo 4: Como usar o IntrumentAdapter.

Interpreter
Como j mencionado, o Instrument usa um Interpreter para interpretar os dados. As
classes que implementam a Instrument j tem um Interpreter default, entretanto o
mesmo pode ser substitudo para uma interpretao customizada. Este procedimento
pode ser visto no Exemplo 5, onde criaremos nosso prprio Interpreter e o
plugaremos ao instrumento default de um MusicShape.
Para definir nosso interpretador para o instrumento da MusicShape utilize o seguinte
sintaxe: myMusicShape.getInstrument().setInterpreter(new PrintingInterpreter());
class PrintingInterpreter extends Interpreter {
/** Sobre-escrito para uma interpretao customizada. */
public double interpret(double playTime, double timeStretch, double dar[], Instrument
ins) {
JMSL.out.print(getName() + " chamado por " + ins + " com ");
JMSL.printDoubleArray(dar);
return playTime + (dar[0]*timeStretch);
}
}
Exemplo 5: Criando um interpretao prpria

Player
s vezes razovel ou pelo menos sensato executar vrias MusicShapes com o mesmo
Instrumento. Por exemplo, uma pea musical pode ter 100 compassos, e ser executada
em uma DrumMachine. Depois de montar um Instrument para executar o trabalho (um
MidiInstrument, por exemplo, que envia no canal 10), seria conveniente ter uma nica
MusicShape para representar cada compasso. Estes compassos deveriam ser executados
em seqncia, do primeiro ao ltimo, usando o mesmo Instrumento. Em outro caso,
algumas poucas MusicShapes podem compor uma mesma pea e devem ser tocadas
simultaneamente, mas com instrumentos e interpretadores diferentes. para executar
este tipo de ao que o Player existe.
Como o Player uma subclasse da SequentialCollection, o padro que as
MusicShapes sejam executadas seqencialmente, mas isto pode ser modificado
utilizando a interface Behavior.

JMusic
jMusic uma biblioteca de programao musical de alto nvel escrita em Java,
desenvolvida na Universidade de Tecnologia de Queensland (Brisbane Austrlia).
Assim como algumas outras linguagens e ambientes de programao, o jMusic foi
projetado para ser usado por msicos e no programadores, com a funo de auxili-los
no processo composicional. Entretanto, muitos programadores fazem uso do jMusic

113

como uma poderosa API para desenvolver aplicaes musicais, em especial


instrumentos digitais, ambientes de educao e anlise musical.
Pode-se citar como vantagens do jMusic:
Por ter sido escrito em Java, o jMusic consegue manter as principais virtudes da
linguagem como sua flexibilidade e portabilidade, alm de usar conhecimento prvio de
Java no aprendizado do jMusic;
JMusic gratuito e aberto distribudo sobre a GNU General Public Licence;
Fcil aprendizado e uso, uma vez que foi construdo de acordo com as convenes
musicais tradicionais;
O material musical construdo em outros programas e interfaces musicais pode ser
importado ou exportado com facilidade;
Grande variedade de ferramentas utilitrias para visualizao e audio da composio
em construo;
JMC (J-Musical-Constants): A interface raiz do jMusic
Parmetros dos protocolos de comunicao, sntese e manipulao de udio podem no
ser muito intuitivos e de fcil leitura para os msicos, pblico alvo do jMusic. Para
tornar a codifio mais legvel e musical, o jMusic fornece uma interface que define
constantes associando nomes conhecidos a seus valores computacionais. Exemplo, o
valor MIDI para um D central (4 oitava) 60. Em classes que implementam a JMC
possvel substituir o valor 60 por um intuitivo C4.
Atualmente a JMC definie constantes para altura da nota, ritmo, dinmica, e MIDI. A
Tabela 3 lista um resumo dos principais valores.

Descrio da Constante

Pitch (Altura da Nota)

Valores
Combinao das Notas (A...G) + Acidente (S =
sustenido ou F =bemol) + oitava (1..9)
Na oitava ainda possvel usar o N para valores
negativos. Ex. CN1.
Exemplos: C4, FS3, GF9, D1

Clculo de Freqncia

Existe ainda uma funo que calcula a freqncia


de uma nota. A FRQ[n], onde n a nota. N pode
ser o valor MIDI da nota ou uma das constantes
acima mencionadas.
Exemplo FRQ[36] ou FRQ [C4]

Pausa

A pausa considerada um nota especial no jMusic.


A constante REST substitui a nota.

Ex;

Valores Rtmicos

Semibreve: WHOLE_NOTE,WN;
Mnima: HALF_NOTE, HN, MINIM;
Semnima = CROTCHET, C, QUARTER_NOTE,
e QN. (valor de referencia = 1.0);
Colcheia = QUAVER, Q, EIGHTH_NOTE, ou EN;
Semicolcheia= SEMI_QUAVER e SQ;
Fusa = THIRTYSECOND_NOTE, TN, TSN;
Os sufixos DOTTED,DOUBLE_DOTTED podem
ser usados para aumentar metade do valor e dobrar
o valor da nota, respectivamente.
O prefixo TRIPLET diminui em 1/3 o valor da nota
e o DEMI, a metade.
* olhar documentao para mais valores

Dinmica

SILENT = 0, PPP = 10, PP = 25, P = 50, MP = 60,


MF = 70, F = 85, FF = 100,
FFF = 120;

Panning(Stereo)

PAN_CENTRE = 0.5,
PAN_RIGHT = 1.0;

Duration Articulation

STACCATO = 0.2, LEGATO


SOSTENUTO = 1.2, TENUTO = 1.0;

Timbre (MIDI
Change)

Escalas

PAN_LEFT

=
=

0.0,
0.95,

Program ABASS,
AC_GUITAR,
ACCORDION,
ACOUSTIC_GRAND,
GUITAR,
AGOGO,
AHHS, ALTO, ALTO_SAX, APPLAUSE, PIANO
.
MAJOR_SCALE
,
MINOR_SCALE
HARMONIC_MINOR_SCALE
MELODIC_MINOR_SCALE
NATURAL_MINOR_SCALE
DIATONIC_MINOR_SCALE
AOLEAN_SCALE
,
DORIAN_SCALE
LYDIAN_SCALE , MIXOLYDIAN_SCALE
PENTATONIC_SCALE , BLUES_SCALE

,
,
,
,
,
,
,

TURKISH_SCALE ,INDIAN_SCALE
Tab. 3: Constantes da JMC

Representaes dos dados no jMusic


As informaes musicais so organizadas e armazenadas tal qual a pauta musical, ou
seja, a partitura(score) formada de partes (part), que por sua vez, constituda de
frases musicais(phrases) onde esto contidas as notas.

115

A nota a estrutura bsica usada no jMusic e traz consigo uma srie de atributos, como:
altura(pitch), volume (dynamic), figura de tempo (RhythmValue), controle de stereo
(pan), durao (duration) e os acidentes (sustenido e bemol). Frase pode ser vista como
vozes de uma parte; por exemplo, no piano cada mo tocaria uma voz. A frase s tem
um atributo realmente importante, a lista de notas. Veremos adiante que existem classes
distintas para cada estrutura musical que se deseja construir.
Uma parte contm um vetor de frases (sons familiares) e tambm um ttulo ("Violino 1"
por exemplo), um canal e um instrumento (em MIDI, um nmero de mudana de
programa - em udio, um ndice no vetor de instrumentos). O Exemplo 6 mostra como
estas estruturas musicais so ligadas para produzir um som.
import jm.JMC;
import jm.music.data.*;
import jm.util.*;
import jm.audio.*;
public final class SonOfBing implements JMC{
public static void main(String[] args){
Score score = new Score(new Part(new Phrase(new Note(C4,
MINIM))));
Write.midi(score);
Instrument inst = new SawtoothInst(44100);
Write.au(score, inst);
}
}
Exemplo 6: Gerao simples de um som usando jMusic

Quando cria-se uma frase, passa-se como parmetro para o construtor um double. Este
paramento o tempo de incio medido em beats. A tempo de referencia de um beat
um QUARTER_NOTE / CROTCHET (1.0), todos os outros valores de ritmos so
relativos a estes.
Pausas tambm so consideradas notas e como tal, tem uma durao definida. A
constante REST representa a pausa, ou seja, o intervalo de silncio.
Estrutura para Gerao de udio em Tempo-real
O jMusic tambm possui classes que permitem a composio em tempo real: RTLine e
RTMixer. A Figura 5 mostra as classes necessrias para os dois tipos de composio
(off-line e tempo real).

Fig. 5: Classes necessrias nas composies Offline e Real-time

A RTLine uma classe abstrata que estendemos para prover processamento de udio
em tempo real. Esta pode ser entendida como uma mistura da Part com a Phrase, pois a
mesma envia notas diretamente para pea, como a Part, apesar de ser monofnica como
a Phrase.
O RTMixer recolhe todos os fluxos de udio gerados pelos RTLines, junta-os e envia
para o dispositivo de som (usando JavaSound.) Normalmente, vai existir somente um
RTMixer por aplicao mas sero vrios RTLines, um para cada parte da msica.
Note que a classe Note central para ambas as estratgias de composio.
Gerando Msica Polifonia
Existem duas maneiras de se escrever msicas polifnicas no jMusic, equivalentes ao
mundo real. A primeira gravar vrias vozes em uma nica parte (Part), como ema
fuga no rgo, onde o compositor escreve para duas ou mais partes simultneas para
uma mo tocar. A segunda escrever para duas ou mais partes, como em um quinteto
de madeiras e sopros. A partitura de uma orquestra uma mistura dos dois tipos,
contendo instrumento monofnico, como a flauta, e polifnicos, como o piano.
Os trechos de cdigo abaixo fazem parte de uma aplicao que grava uma pea
polifnica formada por 3 instrumentos monofnicos. Os trechos foram divididos para
uma melhor narrativa e compreenso dos mesmos.
Score score = new Score("Row Your Boat");
Part flute = new Part("Flute", FLUTE, 0);
Part trumpet = new Part("Trumpet", TRUMPET, 1);
Part clarinet = new Part("Clarinet", CLARINET, 2);
Exemplo 7: Estruturao da pea polifonica

O trecho do Exemplo 7, simplesmente declara as estruturas de maior hierarquia que iro


compor a pea polifnica em questo. Como possvel observar, a partitura (score) ser
formada de 3 partes (Part) correspondendo a flauta, trompete e clarinete, cada
instrumento no seu prprio canal MIDI.
int[] pitchArray ={C4,C4,C4,D4,E4,E4,D4,E4,F4,G4,C5,C5,C5,G4,G4,G4,E4,
E4,E4,C4,C4,C4,G4,F4,E4,D4,C4};

117

double[] rhythmArray = {C,C,CT,QT,C,CT,QT,CT, QT,M, QT, QT, QT, QT, QT,


QT, QT, QT, QT, QT, QT, QT, CT, QT, CT, QT,M};
Phrase phrase1 = new Phrase(0.0);
phrase1.addNoteList(pitchArray, rhythmArray);
Exemplo 8: Montagem da melodia em pea polifnica

O Exemplo 8 mostra como as frases musicais so formadas. Diferentemente do que o


msico est acostumado na notao clssica, as notas e suas duraes esto divididas
em dois vetores: pitchArray e rhythmArray.O primeiro carrega informaes da altura da
nota e o segundo sua durao.Sendo assim, a primeira nota a ser tocada seria um D
Central com durao de uma Semnima (crotchet/quarter note).
A primeira frase (phrase1) foi criada com os vetores acima e tempo de incio igual a 0,
ou seja, tocada imediatamente aps a solicitao.
Phrase phrase2 = phrase1.copy();
phrase2.setStartTime(4.0);
Phrase phrase3 = phrase1.copy();
phrase3.setStartTime(8.0);
Mod.transpose(phrase1, 12);
Mod.transpose(phrase3, -12);
Mod.repeat(phrase1, 1);
Mod.repeat(phrase2, 1);
Mod.repeat(phrase3, 1);
Exemplo 9: Definio dos parmetros das frases

No exemplo 9, trabalha-se a tonalidade e atrasos de duas novas frases que so cpias da


frase 1. Esta operao e ir fazer soar polifonicamente as notas atravs da sobreposio
das frases.
flute.addPhrase(phrase1);
trumpet.addPhrase(phrase2);
clarinet.addPhrase(phrase3);
score.addPart(flute);
score.addPart(trumpet);
score.addPart(clarinet);
Write.midi(score, "rowboat.mid");
Exemplo 10: Vinculando os objetos composicionais

Por fim, o Exemplo 10 mostra como vincular os objetos e gravar o resultado para um
arquivo MIDI;

Exibindo material musical


jMusic pode ser visto como um cdigo para descrever msica. A msica pode ser
representada em diversas notaes diferentes levando-se em considerao aspectos
como: conhecimento musical do usurio, quantidade de frases e partes musicais,
objetivo do software em desenvolvimento etc. O jMusic possui uma classe utilitria
usada para visualizar de diversas formas a msica.
A forma mais comum de representar a msica atravs na da notao clssica,
denominada no jMusic como Common Practice Notation, ou mesmo CPN. Atualmente,
a implementao da CPN permite que somente frases musicais sejam exibidas e outras
pequenas operaes como: salvar em MIDI, modificar notas e formulas de compasso,
tocar etc. O Exemplo 11 demonstra como possvel representar uma frase musical na
forma de CPN usando a classe View. O resultado pode ser visto na Figura 6.

import jm.music.data.*;
import jm.JMC;
import jm.util.*;
public class Dot01 implements JMC {
public static void main(String[] args) {
Note n;
n = new Note(C4, QUARTER_NOTE);
Phrase phr = new Phrase();
phr.addNote(n);
Mod.repeat(phr, 15);
View.notate(phrase);
}
}
Exemplo 11: Representando uma frase musical na notao clssica

Fig. 6: Representao na forma de pentagrama

Apesar de bastante til, a CPN possui restries de implementao e possui difcil


leitura para leigos em msica. Uma das maiores desvantagens fato de no consegui
exibir duas frases ao mesmo tempo em uma nica janela. Uma notao que vem ajudar
a transpor estas restries a ShowScore; um ponto intermedirio entre a CPN e a
Piano Roll (Screcth) que veremos a seguir.

119

Na ShowScrore, frases ( e at mesmo partes) podem ser vistas simultaneamente, como a


Figura 7 mostra. Dentre as funes mais significativas da ShowScore, cita-se:
Cada parte tem uma cor definida randomicamente, ou seja, notas da mesma parte
possuem a mesma cor, facilitando a visualizao;
A intensidade das cores representam a dinmica da nota;
Notas cromticas so indicadas com o smbolo do sustenido '#';
Cada frase tem um retangulo em volta facilitando o reconhecimento;
Barras horizontais e verticais ajudam o posicionamento no tempo;
Zoom;

Fig. 7: Notao ShowScore.

Screcth um visualizador compacto, que organiza as notas cromaticamente ao invs de


pautas. Este tipo de interface tambm conhecido como piano-roll e permite incluso
de notas em tempo de execuo. A Figura 8 mostra um exemplo.

Fig. 8: Notao Screcth (Piano Roll).

Tanto o ShowScore como o Screcth possuem mtodos sobrecarregados que aceitam


desde frases(phrases) at partituras(score).

Arpegios
Uma importante classe para manipulao de melodias a Mod. Atravs dela possvel
repetir, inverter e at mesmo arpejar em forma de palndromos.
Sintetizando notas atravs de instrumentos virtuais (digitais)
O jMusic possui um completo pacote de udio que envolve sntese sonora, construo
de instrumentos virtuais e uso de samples em composies.
Instrumentos virtuais so classes usadas para renderizar partituras do jMusic em
arquivos de udio (ou sada de udio em tempo real) e so feitos a partir de objetos de
udio organizados em uma estrutura hierrquica denominada corrente (chain). Estas
correntes de objetos de udio definem todas as propriedade do som que se ouve e o tipo
de sntese a ser utilizada para ger-lo.
Todos os instrumentos virtuais devem estender a classe Instrument. Isto permite que o
novo instrumento criado se preocupe apenas com os aspectos de timbre do mesmo,
deixando os detalhes de comunicao entre os objetos de udio e as notas para a
superclasse.
A qualidade do som produzida pelo instrumento (sample rate) pode ser modificada de
acordo com a aplicao, entretanto deve-se ficar atento para o sample rate no ser
menor que 8000, levando se em considerao a frmula de Nyquist.
O arranjo hierrquico dos objetos necessrio porque a Instrument essencialmente
uma classe para gerar / processar samples (amostras de som). Os samples so passados
de uma objeto para outro atravs da corrente, formando um fluxo de samples; como
mostra a Figura 9.

Fig. 9: Fluxo de dados de udio.

Os principais objetos de audio so:Wavetable, Envelope, Volume, Panner, SampleIn,


SampleOut, Filter, Add, Splitter, e WhiteNoise.
A organizao hierrquica de objetos de udio (e msica) no algo recente. Uma das
primeiras linguagens de programao para msica, Music V escrita por Max Marthews
nos Laboratrios da Bell EUA, estabelecia a conveno de usar digramas de fluxos de
sinais, como a Figura 10 mostra. Nela, o objeto de cima um envelope que pega dois
atributos para gerar uma amplitude de sada, que por sua vez, um paramento de
entrada junto com a freqncia em um oscilador que gera ondas senoidais. O mesmo
diagrama transposto para o jMusic ficaria como na Figura 11.

121

Fig. 10: Diagrama Music V

Fig. 11: Diagrama jMusic

O trecho que cdigo do Exemplo 12 codifica o diagrama da Figura 12. Nele possvel
observar como ocorre a sntese de udio no JMusic.

Fig. 12:Exemplo de diagrama de audio.


public void createChain(){
WaveTable wt = new WaveTable(this, this.sampleRate,
Oscillator.getSineWave(this.sampleRate), channels);
Envelope env = new Envelope(wt, pointArray);
Volume vol = new Volume(env,(float)1.0);
StereoPan span = new StereoPan(vol);
SampleOut sout = new SampleOut( span, "jmusic.tmp");
}
Exemplo 12: Codificao de um diagrama de udio

Como visto no Exemplo 12 os instrumentos virtuais podem sintetizar as notas atravs


dos objetos de udio como o Wavetable.
Em Java, as WaveTables (tabelas de ondas) so vetores preenchidos com valores
calculados ou extrados de gravaes digitais de sons acsticos. Com esses atributos do
som devidamente processados consegue-se obter o som desejado do instrumento.
Outros tipos de sntese como a granular, aditiva e subtrativa tambm esto disponveis
no jMusic.
Outra opo dos instrumentos virtuais usar amostras de som (samples). Nesta tcnica,
pequenos arquivos de som so gravados e definidos como notas que podem ter sua

freqncia (pitch) e durao modificados e seqenciadas para gerar uma composio. O


Exemplo 13 mostra uma aplicao utilizando samples.
public class WaveformExample implements JMC {
public static void main(String[] args) {
new WaveformExample();
}
public WaveformExample() {
Note n = new Note(C4, MINIM);
Score score = new Score(new Part(new Phrase(n)));
Instrument sineWave = new SimpleSineInst(44100);
Write.au(score, "WaveformExample.au", sineWave);
}
}
Exemplo 13: Uso de samples.

Uma srie de instrumentos virtuais prontos para usar esto disponibilizados no site da
jMusic.
Principais Classes e Intefaces
As classes e interfaces do jMusic esto organizadas em pacotes por funcionalidade,
sendo assim, a Tabela 4 lista os principais pacotes.
Pacote

Principais Caractersticas

jm

Simplesmente possui a interface JMC de alta


importncia para o desenvolvimento com o jMusic.
Todos os outros pacotes esto contidos neste pacote.

jm.audio

Contm as classes necessrias para qualquer


manipulao do udio, incluindo: criao de
intrumentos virtuais, sntese e samples.

jm.constants

Contem as super interfaces para a interface JCM;

Jm.gui.*

Formado
de
7
sub-pacotes
(jm.gui.cpn
,.jm.gui.graph
jm.gui.helper
,jm.gui.histogram
,jm.gui.show
,jm.gui.sketch ,jm.gui.wave), este conjunto de
pacotes contm teis classes para ajudar na interface
grfica da aplicao.

jm.midi

Manipulao do MIDI de uma forma geral, dos eventos


aos dados.

Jm.music.*

Classes e ferramentas que ajudam na composio de


msicas computacionais.

123

jm.util

Classe utilitrias.

jmms

Integrao com o pacote MIDI Share

jmqt

Pacote d eintegrao com o QuickTime


Tab. 4: Principais pacotes do JSML.

Devido generalidade deste pacote, seria uma tarefa deveras difcil eleger as principais
classes, visto que isto dependeria dos objetivos a serem alcanados. Entretanto,
acredita-se que nos exemplos postados ao longo da apresentao do jMusic, as
principais classes tenham sido devidamente citadas e referenciadas para um estudo mais
profundo, se necessrio, na documentao do jMusic.
Consideraes sobre o jMusic
um pacote bem completo e com interessantes recurso tanto para udio como para
tratamento MIDI.
O tutorial claro e feito para quem no tem experincia em programao, como os
msicos.Entretanto pouco atrativo para quem j possui experincia em programao e
Java, pois o mesmo mistura os conceitos e definies, obrigando quem quer aprender
simplesmente jMusic a ler todo o tutorial.

Wire /Wire Provider


Nas primeiras verses do Java Sound existia um problema de implementao que s foi
resolvido, ainda que parcialmente, na verso JDK1.4.1 (2003). O problema era mais
evidente e grave quando a aplicao rodava sobre o MS Windows. Basicamente, o
JavaSound da verso 1.3 no conseguia trocar mensagens MIDI com dispositivos
externos.
Para suprir a falta de comunicao MIDI com dispositivos externos, alguns fabricantes e
programadores disponibilizaram bibliotecas que permitem tal comunicao. O problema
que estas bibliotecas no so escritas em Java, e isto pode afetar a portabilidade da
aplicao que a usa. O melhor mesmo verificar se as limitaes atuais do Java Sound
so mesmo um problema para sua aplicao e avaliar o uso destas bibliotecas em
detrimento da possvel perda da portabilidade.
Duas verses do Wire esto disponveis. A primeira chama-se simplesmente Wire e foi
escrita por uma pequena empresa alem chamada Bonneville. um exemplo tpico de
JNI (Java Native Interface), ou seja, classes escritas em C++ e aproveitadas pelo Java.
S funciona no Windows.
A outra verso foi escrita por Dr.-Ing. Gerrit Gehnen e foi baseada na verso de Niel
Gorisse (Bonneville) e no pacote para Linux da Tritonus. Por ser um service provider
(ver Java Sound SPI) basta copiar dois arquivos para que a JRE reconhea e
disponibilize os dispositivos MIDI.
Nestas duas verses o uso do JavaSound obrigatrio, entretanto se o usurio quiser
usar outra biblioteca musical ou rodar em plataforma diferente do Windows, ter que
usar uma outra biblioteca de comunicao MIDI, tais como: Java MIDI, NoSuch ou
MidiShare.

JavaMIDI - 2001
JavaMIDI um conjunto de classes, escritas por Robert Marsanyi, que permite uso do
MIDI sobre a platforma Java assim como o Wire e o Wire provider com a diferena de
rodar sobre Windows e Macintosh.

NoSuch MIDI
Uma boa biblioteca para trabalhar com MIDI na plataforma Windows. capaz de lidar
com dispositivos MIDI externos, mensagens exclusivas, escalonamento em tempo real
da sada, escrita e leitura de MIDI. No precisa do Java Sound por ser uma
implementao independente, o que a faz no rodar em browsers. Gratuita para uso no
comercial.

MIDI Share
Feita em um tempo onde no existia suporte a MIDI no Java sobreviveu ao Java Sound
por no apresentar problemas com dispositivos MIDI externos e sobressai-se das demais
bibliotecas similares por rodar em Applets, mas para tanto, necessrio instalar dois
arquivos(bibliotecas nativas) no cliente JMidi e JPlayer;
Dois pacotes:
JMidi: Contem as a maioria das funes do MidiShare ;
JPlayer: Biblioteca que implementa sequenciadores multi-track e sincronizveis;.
Principais classes:
Midi: D acesso as funes do MidiSahre atravs da biblioteca nativa JMidi;
MidiPlayer: Controla execuo do MIDI;
MidiAppl : Esqueleto de aplicaes MIDI;
MidiTask: escalonador de tarefas MIDI;
MidiFileStream: Permite leitura e escrita de arquivos MIDI;

MIDI Kit
Esta biblioteca uma boa alternativa para quem precisa de portabilidade nas aplicaes
MIDI. Com ela possvel desenvolver com facilidade aplicaes MIDI simples e locais,
bem como servidores de processamento MIDI distribudo em rede que se configura
dinamicamente para atender as necessidade de cada cliente.
Da mesma forma que outras bibliotecas que usam rotinas no escritas em Java, o MIDI
Kit necessita que arquivos sejam postados no cliente para funcionar em Applets.
Para usar os recursos MIDI da biblioteca basta estender as MIDIProcessor ou
Performer.

125

Apesar do nome, o MIDI Kit tambm consegue processar udio atravs da classe
AudioProcessor e suas sub-classes. At o momento, somente o processamento de
arquivos
de
som
e
execuo
dos
mesmos
esto
disponveis.
O modo de funcionamento do MIDI Kit baseado na arquitetura do NeXT Music Kit
(Stanford CCRMA, 1998). construda sobre o preceito de centralizador de eventos
que ficam em loop (EventLoop). Eventos de vrios tipos, incluindo eventos MIDI,
interface grfica, controle de sincronismo e tempo, so criados por threads e
entrada/sada e colocadas em um fila (FIFO) central. Na thread principal, chamada de
Main EventLoop, os eventos so removidos, um de cada vez , e processados pelos seus
respectivos Processors. Como todos os eventos so processados por uma nica thread,
no necessrio o esforo extra em cdigo para manter a sincronizao.
Principais Classes
MIDIProcessor: onde a ao est! Vrias subclasses da MIDIProcessor desempenham
operaes como o mapeamento da notas de entrada, sequenciamento, execuo de som,
envio de mensagens MIDI e at mesmo encaminhar eventos MIDI (MIDIEvents) para
outros processadores (MIDIProcessor) na rede.
AudioProcessor: Controla todo o processamento de udio digital do MIDI Kit que, at
o momento, no muito.
Performers: uma subclasse da MIDIProcessor que interage com a Conductor para
perfazer aes em um determinado momento.
Conductor: Outra subclasse da MIDIProcessor que tambm controla uma fila ordenada
por tempo de eventos musicais, mas em sua prpria thread. Quando chega o momento
do evento ser executado, o evento encaminhado a fila principal (EventLoop). Possui
duas noes de tempo: beat e cronometro(hh:mm:ss:ms).
Time: um objeto esttico que tem a funo de ser o relgio de todo o sistema.

JFugue
JFugue um conjunto de classes Java para programao musical. Esta biblioteca usa
simples strings (cadeia de caracteres) para representar dados musicais, incluindo notas,
acordes e mudanas de instrumentos. JFugue tambm permite a definio de msica
atravs de padres que podem ser transformados para criar novos segmentos musicais
derivados de peas musicais j existentes.
JFugue pode escrever arquivos MIDI e simplifica a programao musical.

Tritonus
Tritonus uma implementao com o cdigo aberto mais limpa e eficiente do Java
Sound 1.0 para Linux. distribuda de acordo com os termos da GNU Library General
Public License.
Os coordenadores do projeto so importantes pesquisadores e desenvolvedores da rea,
como Matthias Pfisterer e Florian Bomers, entretanto a maior parte do cdigo foi
desenvolvido por voluntrios. Isso permite a distribuio gratuita da API, mas deixa a
desejar em suporte e freqncia de lanamento de novas verses, sendo a ltima
atualizao datada ao ano anterior a escrita deste trabalho.

Tritonus mais estvel que o Java Sound, mas ainda no est completo e perfeito(muito
longe disso). Apesar da precariedade de funcionalidade e de sua limitao de plataforma
(somente Linux), o Tritonus quase uma unanimidade entre aqueles que programam em
Linux.
Funcionalidades de udio
Existe uma relao unilateral do Java Sound em relao ao Tritonus, ou seja, o que for
feito para o Java Sound, atravs dos pacotes de SPI, deve funcionar no Tritonus. Isto
muito cmodo para o pessoal do Tritonus, mas tambm auxilia o desenvolvimento do
Java Sound, pois mais fcil estender um servio do que cri-lo inteiramente. Isso se
aplica no suporte a compresso e descompresso de dados de udio.
Suporta leitura e gravao de arquivos no formato .au, .aiff and .wav, assim como Java
sound,mas diferentemente deste no possui pacote s para Services Providers estenderem
sua capacidades, tendo os mesmos que trabalharem direto no cdigo fonte.
Uma outra diferena do Java Sound o fato do Tritonus no possuir um Mixer, tendo
que buscar algum disponvel no sistema. Isto facilita a integrao do cdigo com infraestrutura de hardware da mquina mas tambm dificulta a criao de novos dispositivos
de udio,que tem que prover implementaes para as interfaces Mixer, SourceDataLine,
TargetDataLine e Clip;
Standard linear : Mono e Stereo, Big e little endian, 8, 16, 24 e 32 bits, A-law and u-law
codec;
Mp3 decoder (Javalayer 0.0.7 incorporado ao Tritonus, Java MP3 Player Project criao
de MP3 usando a biblioteca LAME). O Java Sound no prove mais suporte a MP3 por
problemas autorais.
Funcionalidades do MIDI
As partes principais do suporte ao MIDI esto implementadas baseada no seqenciador
ALSA. Uma implementao baseada no Midi Share est em desenvolvimento.

Escrita e leitura de arquivos MIDI;.

Um sistema de sntese de software (TiMidity) no muito estvel.

Interface para sintetizadores em hardware (com restries)

MIDI IN/OUT (acesso a dispositivo MIDI externos)

JASS (Real-time audio synthesis)


JASS (Java Audio Synthesis System) uma unidade geradora baseada em ambientes
para programao de sntese de udio. Escrita em Java puro, o ambiente baseia-se em
um pequeno nmero de interfaces e classes abstratas que implementam a funcionalidade
necessria pra criao de patches. Patches so criados juntando unidade geradoras em
complexas estruturas e podem renderizar sons em tempo real. A comunicao com o
hardware de udio foi escrita com o Java Sound e, em algumas plataformas, JNI (Java
Native Interface).
A biblioteca se prope a ser uma alternativa ao Java Sound com baixa latncia devido a
mtodos nativos. Atualmente possui implementao para Linux (ALSA e OSS),

127

Macintosh (OS/X) e Windows (DirectX, ASIO blocking API, ASIO callback API).
Todas as implementaes, exceto ASIO callback, utilizam uma classe de entrada/sada
de audio em tempo real escrita em C++ por Gary P. Scavone;
JASS tem o cdigo fonte aberto e est disponvel para uso no comercial;

Jsyn
Jsyn permite o desenvolvimento de programas Java para computao musical. Pode-se
rodar como aplicaes stand-alone ou como applets em webpages (usando o plug-in).
Escrito em C para prover sntese em tempo real, o Jsyn pode ser usado para gerar efeitos
de som, ambientes de udio ou msica. Jsyn se baseia no tradicional modelo de
unidades geradoras que juntas podem gerar sons complexos.

Sntese em tempo real e de alta fidelidade usando a CPU;

Biblioteca de unidades geradores incluindo osciladoras, filtros, envelopes,


geradores de rudos e efeitos.

Todas a operaes usam preciso de 32 bits.

Pode-se combinar samples o sons sintetizados em tempo-real;

Fcil uso das classes Java para criar, conectar e controlar as unidades geradoras;

Uso de time-stamping para programao de eventos no tempo;

Uso de fila de samples e dados do envelope para programar repetio e colagem

Suporte a entrada de udio para gravao e processamento de voz;

Suporte para dispositivos multi-canal;

Suporte para plataformas Windows, Macintosh e Linux;

SDK gratuito;

Editor grfico(Wire) que permite gerar sons conectando unidades geradoras


inteiramente,podendo exportar o cdigo Java resultante.
6.3.1 Custo

O Plug-in grauito;

Para uso no commercial, o Jsyn SDk tambm gratuito.

Para uso comercial e acesso a ferramentas mais elaboradas o produto deve ser
registrado, ou seja, pago.

O principal pacote do Jsyn o com.softsynth.jsyn.*, entretanto possui diversos subpacotes:

com.softsynth.jsyn.util : classes utilitrias;

com.softsynth.jsyn.view102: utiliades grfica do AWT1.0.2;

com.softsynth.jsyn.view11x: utiliades grfica do AWT.1.x;

com.softsynth.jsyn.circuits.*: Exemplo usando circuitos;

JSCORE
JScore um analisador sinttico em Java para dados de msica que gera as partituras no
formato XML e o udio (MIDI). O primeiro objetivo do JScore era demostrar
potencialidade do JLex (gerador de analisadores sintticos) integrado ao JMusic que
descreve a msica no modo que o JLex deve entender.

Xemo
Xemo um projeto que visa desenvolver um robusto e extensvel framework para
composio e notao musical. A principio o projeto no tem relao com qualquer
tecnologia, ou seja, apenas define o que tem que ser feito. Passado um ano da criao do
projeto, a primeira API de msica foi lanada com a inteno de motivar voluntrios a
se engajarem no projeto.
A API define interfaces para layout e renderizao de smbolos musicais em alta
resoluo em dispositivos 2D, incluindo monitores e impressoras. Com isto, pode-se
desenvolver programas de composio interativa, editores de notao musical, jogos e
software
educacionais.
Atualmente, a API simplesmente um conjunto de classes grficas vazias, ou seja, no
possuem nenhuma funcionalidade para armazenar ou ler arquivos de udio ou MIDI ou
mesmo executar o que foi escrito.
A API contm funcionalidades especificas para representao musical, execuo e
composio interativa. Seus elementos base so pacotes para notao musical,
representao de estruturas musicais e execuo e performance MIDI.

XEMO API

Representation

Description
Representao musical em diferentes formatos, incluindo XML
(MusicXML e MIDIXML). Pssui mecanismos para definir, construir e
manter referencia cruzadas entre diferentes representaes.

Notation

Define mecanismo para renderizao de objetos da notao musical


clssica;

Playback

Implementa interfaces de alto nvel para gerao de arquivos MIDI e


streams de udio co suporte da dinmica, tempo e seleo do patch.

Tab. 5: Pacotes do XEMO.

O projeto XEMO tem seus objetivos bem estruturados, possui uma boa organizao e
timas idias, entretanto ainda muito imaturo para uso no desenvolvimento de

129

aplicaes musicais. Est em uma fase que precisa muito mais de ajuda do que capaz
de ajudar.

Concluso
Este trabalho apresentou e analisou 14 ferramentas que agregam ao Java a capacidade
de trabalhar com udio e dados musicais. Foram vistas caractersticas, arquiteturas e
exemplos destas bibliotecas que foram classificadas em 8 categorias distintas.
Chegou-se a concluso que as melhores API s para trabalho com som (de maneira
geral) so o Jsyn, jMusic e Java Sound. Para trabalhar com MIDI, as melhores APIs
so jMusic, JMSL e Java Sound. O destaque deste trabalho foi a jMusic que se mostrou
completa, estvel e de fcil uso em todas as categorias.

ANEXO C
DOCUMENTAO DOS PACOTES DE
FORMAO E REPRESENTAO DE ACORDES

Devido ao volume de pginas da documentao, a mesma se encontra no CD em anexo.

Você também pode gostar