Escolar Documentos
Profissional Documentos
Cultura Documentos
INSTITUTO DE INFORMTICA
PROGRAMA DE PS-GRADUAO EM COMPUTAO
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
INTRODUO.......................................................................................... 13
1.1
Motivao .......................................................................................................... 14
1.2
1.3
Objetivos............................................................................................................ 20
1.4
Contribuies .................................................................................................... 21
FUNDAMENTAO TERICA................................................................ 23
2.1
2.2
2.3
CONCEPO DO SISTEMA.................................................................... 34
3.1
3.2
3.3
3.4
3.5
4.2
Pacote de Gerao das Representaes dos Acordes
(br.ufrgs.inf.lcm.representacaoAcorde) ..................................................................... 58
4.3
5
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
Resultados ......................................................................................................... 88
5.9
CONCLUSO ........................................................................................... 90
6.1
6.2
Publicaes ........................................................................................................ 91
6.3
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
API
Application-Program Interface
BPM
CME
CM
Computao Musical
IA
Inteligncia Artificial
IPS
MAS
Multiagent System
GUI
JDK
LCM
MIDI
OOP
PC
Personal Computer
UFRGS
RMI
UML
LISTA DE FIGURAS
10
LISTA DE TABELAS
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.
12
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.
13
1 INTRODUO
14
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
16
17
18
19
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
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
21
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
24
25
26
27
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
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
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
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).
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).
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.
33
34
3 CONCEPO DO SISTEMA
35
36
Instrumento: Deve ser possvel alterar o instrumento que gera uma determinada
sonoridade (timbre) de um padro rtmico ou linha meldica;
37
38
Composio X
MD
ME
CS
MD
39
: Usurio
: Agente ME
* entrar cifra
At que
harmonia
esteja
completa
: Agente MD
: Agente CS
ouvir composio
Para cada
acorde de
cada agente
MD.
40
IntrumentoCorda
qtCordas
afinacao
qtTrastes
PerfilUsuario
<<Actor>>
Agente ME
1
aberturaDedo
qtDedoME
qtDedoMD
NotacaoCifragem
* simbolos Cifragem
41
42
Identificar notas com ataque junto para propiciar tratamento diferenciado, como
a velocidade de arpejo, por exemplo.
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
44
20 ms
50 ms
30 ms
MIDI Device
Real-time
Timer
.
.
.
n
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
Java
Soun
d
jMusi MIDI
c
Kit
JSy
n
Titonu
s
Critrio\API
Gravao e reproduo de udio;
JSy Jas
n
s
Critrio\API
JMus
ic
Critrio\API
Java JMus
sound ic
JMS
L
MIDI Trito
Share nus
47
X
X
Possuir
mecanismo
que
permita
programar / escalonar eventos MIDI para
serem
executadas
em
determinado
momento de tempo;
Possuir mecanismo de sincronizao;
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.
X
X
48
Critrio\API
Possuir sintetizador virtual;
Java
JMusi
Sound c
Tritonu
s
X
X
Critrio\API
Exibio de dedos MIDI em notao musical clssica
JScore
Xemo
JMusic
X
X
49
JFugu
e
Critrio\API
Xem
o
MusicXML
Critrio\API
Criao/edio grfica de elementos musicais;
jMusic
JMSL
X*
Jsyn
elementos X
Performances interativas;
Suporte a MIDI
Criao/edio
musicais;
por
cdigo
de
*MusicShape Editor
50
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
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
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
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
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
Nona Maior
Inverso no Acorde
b9
Nona Menor
Juno de intervalos
11
Intervalo maior
#11
Intervalo menor
13
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)
c)
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.
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.
56
Os autmatos da Figura 4.7 e Figura 4.8 tratam os acordes menores, sendo o segundo
para ttrades 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.
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
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
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
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
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.
dos
Acordes
59
60
Instrumento
Instrum entoLayout
(from representacaoAcorde)
(from representacaoAcorde)
InstrumentoCorda
Instrument
oPlugin
(from representacaoAcorde)
violao
(from repr...)
ViolaoPlugin
ViolaoLayout
(from representacaoAcorde)
(from representacaoAcorde)
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()
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
InstrumentoPlugin
getInst rument o() : Inst rument o
ViolaoPlugin
ViolaoPlugin()
configuraNotas() : void
configuraCordas() : void
configuraInstrumento() : void
getInstrumento() : Instrumento
getRepresentacaoAcordeMaker() : RepresentacaoAcordeInstrumentoCordaMaker
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
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
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
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?
L-se: quinta corda-terceira casa, quarta corda-segunda casa, terceira corda solta, segunda corda
primeira casa e primeira corda solta.
65
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
67
RepresentacaoAcordeInstrumentoCordaMaker
(from representacaoAcorde)
trasteInicial : int
trasteFinal : int
cordaIncial : int
cordaFinal : int
representacoes : ArrayList
posTemp : ArrayList
RepresentacaoAcordeInstrumentoCordaMaker()
getRepresentacaoAcordeInstrumentoCordaFacil()
getRepresentacaoInstrumentoCordaSimilar()
getRepresentacoesAcorde()
montaRepresentacao()
setLogOn()
setLogOn()
getLog()
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.
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()
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
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
...
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
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.
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.
75
5 CONSTRUO DO PROTTIPO
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
77
principal, pois alm da economia de memria, fica mais fcil gerenciar a interface. O
frame inicialmente dividido em 3 componentes:
78
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
public Tela1() {
super("Tela 1");
configuraTela();
}
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.
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.
81
82
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.
83
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
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
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.
87
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.
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:
89
90
6 CONCLUSO
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:
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
6.3
Trabalhos Futuros
94
95
REFERNCIAS
JASS
em:
Disponvel em:
mar.
2005.
<http://java.sun.com/products/java-media/sound/>.
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:
97
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
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.
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.
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.
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;
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.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
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.
107
guitarra
verso1
refrao
baixo
bateria
verso2
col
(ParalellCollection)
mj
(MusicJob)
sh
(MusicShape)
Principais Caractersticas
com.softsynth.jmsl
109
com.softsynth.jmsl.jsyn
com.softsynth.jmsl.midi
com.softsynth.jmsl.net
com.softsynth.jmsl.view
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
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.
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
Descrio da Constante
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
Pausa
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
Panning(Stereo)
PAN_CENTRE = 0.5,
PAN_RIGHT = 1.0;
Duration Articulation
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
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).
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
117
Por fim, o Exemplo 10 mostra como vincular os objetos e gravar o resultado para um
arquivo MIDI;
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
119
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.
121
O trecho que cdigo do Exemplo 12 codifica o diagrama da Figura 12. Nele possvel
observar como ocorre a sntese de udio no JMusic.
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
jm.audio
jm.constants
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
Jm.music.*
123
jm.util
Classe utilitrias.
jmms
jmqt
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.
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.
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.
Fcil uso das classes Java para criar, conectar e controlar as unidades geradoras;
SDK gratuito;
O Plug-in grauito;
Para uso comercial e acesso a ferramentas mais elaboradas o produto deve ser
registrado, ou seja, pago.
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
Playback
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