Sei sulla pagina 1di 12

Bibliotecas Java Aplicadas a Computao Musical

Leandro L. Costalonga, Evandro M. Miletto, Luciano V. Flores, Rosa M. Vicari Instituto de Informtica Universidade Federal do Rio Grande do Sul (UFRGS) Caixa Postal 15.064 91.501-970 Porto Alegre RS Brasil
{llcostalonga,miletto,rosa}@inf.ufrgs.br, lflores@cpovo.net

Abstract. Today, there are many programming languages and libraries available for the development of computer music applications. This paper presents a comparison of Java technologies for computer music, as a quick reference for interested developers. The main available musical libraries are listed, described and compared. Resumo. Atualmente existem dezenas de linguagens de programao e bibliotecas destinadas ao desenvolvimento de aplicativos para computao musical. Este artigo apresenta um estudo comparativo sobre tecnologias Java para computao musical visando servir como referncia rpida para desenvolvedores que queiram utilizar essa tecnologia. As principais bibliotecas musicais disponveis so relacionadas, descritas e comparadas.

1. Introduo
Um dos primeiros passos em um projeto de software a escolha da linguagem que melhor possa codificar os requisitos identificados. Neste ponto, caractersticas da linguagem devem ser criteriosamente observadas e ponderadas. No paradigma orientado a objetos, onde o reuso fortemente favorecido, deve-se observar, alm das caractersticas nativas da linguagem, as opes de expanso da mesma atravs de bibliotecas, APIs (Application Programming Interfaces) ou add-ons de terceiros que possam facilitar o desenvolvimento. Neste quesito Java est muito bem amparada e, em se tratando de bibliotecas e ferramentas de auxlio para softwares musicais, no diferente. 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, alguns fatores que fazem com que Java se destaque como linguagem de programao para softwares musicais so os mesmos que fizeram de Java uma linguagem bem sucedida em reas mais tradicionais, dentre os quais se cita 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 softwares musicais como, por exemplo, o fato de incluir 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, 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 fez crescer o nmero de APIs disponveis e, conseqentemente, a dificuldade na escolha. Atualmente, muitos dos problemas iniciais do Java Sound j foram corrigidos. Comparando Java com linguagens especialmente desenvolvidas para programao musical como Max/MSP, SuperCollider, Nyquist e KeyKit, pode-se afirmar que, por ser uma linguagem aberta, Java pode combinar msica com outras funcionalidades da linguagem, como rede, grficos e banco de dados. Obviamente Java tem limitaes, principalmente de performance, por ser uma linguagem to completa e abrangente. Essas limitaes motivam empresas e desenvolvedores independentes a criarem suas bibliotecas com solues alternativas. Este trabalho pretende apresentar algumas das tecnologias disponveis, facilitando a escolha e o reuso de componentes j criados por terceiros. No o objetivo deste trabalho ensinar ou esgotar todas as possibilidades de uso das ferramentas analisadas, e sim mostrar suas potencialidades. O artigo est organizado como se segue: a seo 2 apresenta uma breve descrio de cada biblioteca analisada, ficando o estudo comparativo e classificatrio para a seo 3. Uma breve concluso apresentada na seo 4.

2. Descrio das Bibliotecas


Foram analisados 14 bibliotecas que agregam ao Java a capacidade de trabalhar com udio e dados musicais. So eles: Java Sound (Java Sound Resources, 2005), JMSL (Didkovsky e Burk, 2005), jMusic (Sorensen e Brown, 2005), Wire/Wire Provider (Wire, 2005; Gehnen, 2005), JavaMIDI (Marsanyi, 2005), NoSuch MIDI (NoSuch MIDI, 2005), MIDIShare (Grame, 2005), MIDI Kit (McNabb, 2005), jFugue (Koelle, 2005), Tritonus (Tritonus, 2005), JSyn (JSyn, 2005; JSynthLib, 2005), JScore (JScore, 2005), JASS (Doel, 2005) e Xemo (Project Xemo, 2003). Procurou-se ordenar a apresentao das APIs por sua relevncia (do ponto de vista dos autores), funcionalidade e data de criao. Todas as informaes que constam na anlise foram retiradas da documentao fornecida pelos fabricantes, o que nem sempre foi suficiente. Experimentos tambm foram realizados a fim de testar os cdigos que constam nos exemplos. Infelizmente no h espao suficiente no artigo para incluir cdigo de exemplos e descrever em detalhes as APIs, mas tais informaes so facilmente obtidas junto aos fabricantes. Com base nos exemplos e na opinio prpria dos autores (dada a subjetividade da questo), chegou-se concluso que as melhores APIs 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 a jMusic que se mostrou completa, estvel e de fcil uso em todas as categorias. Este artigo um resumo de um estudo muito mais extenso, realizado ao final de 2003, quando ento as classificaes e descries bsicas das bibliotecas foram elaboradas. As melhorias das novas verses vm sendo acompanhadas e, quando significativas, so descritas neste artigo.

2.1. Java Sound (Verso 1.5) Java Sound uma API que prov suporte para operaes de udio e MIDI com alta qualidade, tais como: captura, mixagem, gravao, seqenciamento e sntese MIDI. A Java Sound vem junto com o J2SE desde a verso 1.3 e por isso considerada por alguns como a fonte do sucesso do Java para a programao musical. Na verso J2SE 1.5 teve grande avano e correo e alguns de seus principais bugs, como a comunicao MIDI com dispositivos externos. Em constante evoluo e melhoria, so caractersticas nativas do Java Sound: Suporte aos formatos de arquivos de udio: AIFF, AU e WAV; Suporte aos formatos de arquivos de msica: MIDI Type 0, MIDI Type 1, e Rich Music Format (RMF); Formatos de som em 8/16 bits, mono e estreo, com sample rate de 8 a 48 Hz; Dados de udio codificados em linear, a-law e mu-law para qualquer um dos formatos de udio suportados; Sntese e seqenciamento MIDI por software, bem como acesso a qualquer dispositivo MIDI em hardware; Mixer com capacidade para mixar e renderizar mais de 64 canais de udio digital e sons MIDI sintetizados.

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 partir dela, 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. Java Sound suporta tanto udio digital como MIDI. Ainda, permite que terceiros criem e distribuam componentes de software customizados para estender suas capacidades. Java Sound pode ser usado na Web via applets, entretanto deve-se ficar atento s restries de segurana definidas na classe AudioPermission. O padro que uma applet executando sobre restries de segurana pode tocar, mas no gravar sons. Isso pode ser modificado caso o usurio permita. Apesar das restries, o Java Sound permite que as aplicaes escritas com suas classes funcionem da mesma forma nas diversas plataformas suportadas pelo Java. 2.2. JMSL Java Music Specification Language (Verso 1.03) JMSL um framework desenvolvido em Java que auxilia no desenvolvimento de softwares musicais, em especial para composio de msica computacional, performances interativas e construo de instrumentos virtuais.

Entre as principais vantagens do JMSL, pode-se citar: Total integrao com a linguagem (Java) e recursos da mesma, incluindo conectividade com banco de dados, ferramentas de rede, servlets, etc.; Comunicao direta com outras bibliotecas e dispositivos implementados em Java, como o JSyn, JavaMIDI, MidiShare e Java Sound; Incorporao do pacote JScore que permite edio da notao musical; Permite ao compositor distribuir as aplicaes localmente ou atravs de applets; Gratuito em uma verso mais restrita (Lite).

Baseada no HMSL Hierarquical Music Specification Language, o JMSL mantm a idia original de seu predecessor ao apoiar-se no conceito de hierarquias ao desenvolver aplicaes musicais, que nada mais so do que relacionamentos pai-filho. Hierarquias podem ser previamente definidas ou criadas durante a execuo de uma pea musical. Dois tipos de hierarquias podem ser criadas no JMSL: seqencial e paralela. Hierarquizar, no contexto do JMSL, no significa apenas posicionar os objetos em uma viso top-down, definindo assim a importncia dos objetos (entidades) no contexto musical. No JMSL, posicionar um objeto na hierarquia significa definir o momento em que o mesmo ser executado. Desta forma, o objeto mais alto na hierarquia solicita aos seus filhos (objetos ligados diretamente a ele) que sejam executados todos juntos (hierarquia paralela) ou seqencialmente (hierarquia seqencial). 2.3. JMusic (Verso 1.4.2) jMusic uma biblioteca de programao musical de alto nvel escrita em Java, desenvolvida na Universidade de Tecnologia de Queensland (Brisbane Autrlia). 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 como uma poderosa API para desenvolver aplicaes musicais, em especial instrumentos digitais, ambientes de educao e anlise musical. Pode-se citar como vantagens do jMusic: Por ter sido escrito em Java, o jMusic consegue manter as principais virtudes da linguagem como sua flexibilidade e portabilidade, alm de usar conhecimento prvio de Java no aprendizado do jMusic; JMusic gratuito e aberto distribudo sobre a GNU General Public License; Fcil aprendizado e uso, uma vez que foi construdo de acordo com as convenes musicais tradicionais; Material musical construdo em outros programas e interfaces musicais pode ser importado ou exportado com facilidade; Grande variedade de ferramentas utilitrias para visualizao e audio da composio em construo.

As informaes musicais so organizadas e armazenadas tal qual a pauta em papel, ou seja, a partitura formada de partes, que por sua vez, constituda de frases musicais onde esto contidas as notas. A nota a estrutura bsica usada no jMusic e traz consigo uma srie de atributos, como: altura, volume, figura de tempo, controle de estreo, durao 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. jMusic pode ser visto como um cdigo para descrever msica. A msica pode ser representada em diversas notaes diferentes levando-se em considerao aspectos como: conhecimento musical do usurio, quantidade de frases e partes musicais, objetivo do software em desenvolvimento, etc. A forma mais comum de representar a msica atravs na da notao clssica, denominada no jMusic como Common Practice Notation (CPN). Atualmente, a implementao da CPN permite que somente frases musicais sejam exibidas e outras pequenas operaes como: salvar em MIDI, modificar notas e formulas de compasso, tocar, etc. Apesar de bastante til, a CPN possui restries de implementao e possui difcil leitura para leigos em msica. Uma das maiores desvantagens fato de no consegui exibir duas frases ao mesmo tempo em uma nica janela. Uma notao que vem ajudar a transpor estas restries a ShowScore, um ponto intermedirio entre a CPN e a Piano Roll (Scratch). 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 propriedades do som que se ouve e o tipo de sntese a ser utilizada para ger-lo. A organizao hierrquica de objetos de udio (e msica) no algo recente. Uma das primeiras linguagens de programao para msica, Music V, escrita por Max Mathews nos Laboratrios da Bell EUA, estabelecia a conveno de usar diagramas de fluxos de sinais. Outra opo dos instrumentos virtuais usar amostras de som (samples). Nesta tcnica, pequenos arquivos de som so gravados e definidos como notas que podem ter sua freqncia (pitch) e durao modificadas e seqenciadas para gerar uma composio. 2.4. Wire/Wire Provider (Verso 0.97) As primeiras verses do Java Sound no conseguiam trocar mensagens MIDI com dispositivos externos, o que s foi resolvido na verso JDK1.4.1 (em 2003). Para resolver este problema, alguns fabricantes e programadores disponibilizaram bibliotecas que permitem tal comunicao, porm muitas no eram escritas em Java, o que limita a portabilidade das aplicaes que as usam. Duas verses do Wire foram disponibilizadas. A primeira chama-se simplesmente Wire e foi escrita por uma pequena empresa alem chamada Bonneville. um exemplo tpico de JNI (Java Native Interface), ou seja, classes escritas em C++ e aproveitadas pelo Java, no Windows. A outra verso foi escrita por Gerrit Gehnen e foi baseada na verso de Niel Gorisse (Bonneville) e no pacote para Linux da Tritonus.

2.5. JavaMIDI (Verso 5) JavaMIDI um conjunto de classes, escritas por Robert Marsanyi, que permite uso do MIDI sobre a plataforma Java assim como o Wire e o Wire Provider com a diferena de executar sobre Windows e Macintosh. 2.6. NoSuch MIDI (Verso nica) Esta biblioteca e 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 executar em browsers. gratuita para uso no comercial. 2.7. MIDI Share (Verso 1.9) Feita a um tempo em que no existia suporte a MIDI no Java, mas sobreviveu ao Java Sound por no apresentar seus problemas com dispositivos MIDI externos e sobressaiuse das demais bibliotecas similares por rodar em applets. Entretanto, necessrio instalar dois arquivos (bibliotecas nativas) no cliente JMidi e JPlayer. 2.8. MIDI Kit (Verso 1.0) Esta biblioteca pode ser 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 necessidades 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. Apesar do nome, o MIDI Kit tambm consegue processar udio. 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). 2.9. JFugue (Verso 1.0) JFugue um conjunto de classes Java para programao musical. Esta biblioteca usa simples strings (cadeias 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. Atualmente na verso 2.1, o JFugue j inclui suporte a controladores MIDI e melhorou o parse interno dos acordes, aumentando a gama de acordes trabalhveis. 2.10. Tritonus (Verso 1.x) Tritonus uma implementao com o cdigo aberto do Java Sound 1.0 para Linux. distribuda de acordo com os termos da GNU Library General Public License. Tritonus mais estvel que o Java Sound, mas ainda no est completo e perfeito. Apesar de sua limitao de plataforma (somente Linux), o Tritonus quase uma unanimidade entre aqueles que programam em Linux.

Existe uma relao unilateral do Java Sound em relao ao Tritonus, ou seja, o que for feito para o Java Sound, atravs do pacotes de SPI, deve funcionar no Tritonus. Tendo em vista a estreita relao entre Tritonous e Java Sound, a seguir algumas funcionalidades so apresentadas: Suporta leitura e gravao de arquivos no formato .au, .aiff e .wav, assim como Java Sound, mas diferentemente deste no possui pacotes para Service Providers estenderem sua capacidades, tendo os mesmos que trabalhar 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 a infra-estrutura de hardware da mquina mas tambm dificulta a criao de novos dispositivos de udio, que tm que prover implementaes para as interfaces Mixer, SourceDataLine, TargetDataLine e Clip; Standard linear: mono e estreo, big e little endian, 8, 16, 24 e 32 bits, codecs Alaw e mu-law; MP3 decoder (Javalayer 0.0.7 incorporado ao Tritonus, Java MP3 Player Project criao de MP3 usando a biblioteca LAME). O Java Sound no provm mais suporte a MP3 por problemas autorais.

As partes principais do suporte ao MIDI esto implementadas baseadas no seqenciador ALSA. Uma implementao baseada no MIDI Share est em desenvolvimento. Escrita e leitura de arquivos MIDI; Um sistema de sntese de software (TiMidity) no muito estvel; Interface para sintetizadores em hardware (com restries); MIDI IN/OUT (acesso a dispositivos MIDI externos).

2.11. JASS (Real-time Audio Synthesis - Verso 2.x) JASS (Java Audio Synthesis System) uma unidade geradora baseada em ambientes para programao de sntese de udio. Escrita em Java puro, o ambiente baseia-se em um pequeno nmero de interfaces e classes abstratas que implementam a funcionalidade necessria pra criao de patches. Patches so criados juntando unidades geradoras em complexas estruturas e podem renderizar sons em tempo real. A comunicao com o hardware de udio foi escrita com o Java Sound e, em algumas plataformas, JNI (Java Native Interface). A biblioteca se prope a ser uma alternativa ao Java Sound com baixa latncia devido a mtodos nativos. Atualmente possui implementao para Linux (ALSA e OSS), 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 udio em tempo real escrita em C++ por Gary P. Scavone. JASS tem o cdigo fonte aberto e est disponvel para uso no comercial. Atualmente a biblioteca est na verso 2.012 e atualizada constantemente. Em 2004 lanou um plug-in para IDE Eclipse, o que facilitou o desenvolvimento de

programadores terceiros. Entre as inovaes da verso 2.x est o Trace-Assertion que ajuda a especificar o comportamento dinamico do sistema em tempo de execuo. Essa funcionalidade, antes obrigatria, passa a estar desabilitada por default na ltima verso lanada. 2.12. JSyn (Verso 14.2) 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. Seguem as principais caractersticas: Sntese em tempo real e de alta fidelidade usando a CPU; Biblioteca de unidades geradoras incluindo osciladores, filtros, envelopes, geradores de rudos e efeitos; Todas a operaes usam preciso de 32 bits; Pode-se combinar samples e sons sintetizados em tempo real; Fcil uso das classes Java para criar, conectar e controlar as unidades geradoras; Uso de time-stamping para programao de eventos no tempo; Uso de fila de samples e dados do envelope para programar repetio e colagem; Suporte a entrada de udio para gravao e processamento de voz; Suporte para dispositivos multi-canal; Suporte para plataformas Windows, Macintosh e Linux; Editor grfico (Wire) que permite gerar sons conectando unidades geradoras inteiramente, podendo exportar o cdigo Java resultante; SDK e plug-in gratuitos, para uso no comercial.

2.13. JScore (Acompanha o JMSL 1.03) JScore um analisador sinttico em Java para dados de msica, que gera as partituras no formato XML e o respectivo cdigo MIDI. O primeiro objetivo do JScore era demonstrar potencialidade do JLex (gerador de analisadores sintticos), integrado ao JMusic que descreve a msica no modo que o JLex deve entender. Atualmente o JScore integra o JMSL. 2.14. Xemo Xemo um projeto que visa desenvolver um framework para composio e notao musical. Em princpio o projeto no tem relao com qualquer tecnologia, ou seja, apenas define o que tem que ser feito. 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 softwares 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 especficas para representao musical, execuo e composio interativa. Seus elementos base so pacotes para notao musical, representao de estruturas musicais e execuo, e performance via MIDI. Apesar de terem sido lanados alguns pacotes, o projeto foi aparentemente descontinuado.

3. Comparativo
A seguir apresentado um quadro comparativo entre as APIs analisadas dentro das classificaes sugeridas. 3.1. 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 1.
Tabela 1. Comparao entre APIs que processam udio. Critrio/API Gravao e reproduo de udio Converso e suporte a diferentes formatos de udio Manipulao de samples (samplear) Manipulao e/ou processamento de dados de udio Java Sound X X jMusic X X X X X MIDI Kit X JSyn X X X X Tritonus X X

3.2. Sntese de udio Esta categoria caracteriza-se pela capacidade das APIs em gerar/modificar sons baseando-se em algoritmos de sntese, de forma genrica. As funcionalidades desejveis podem ser vistas na Tabela 2.
Tabela 2: Comparao entre APIs que sintetizam udio. Critrio/API JSyn Gerao de udio a partir da conexo de unidades geradoras (osciladores, X envelopes, amplificadores etc.) Gerao de udio modificando parmetros fsicos das ondas sonoras Uso de instrumentos virtuais com parmetros de udio pr-estabelecidos e X devidamente encapsulados Suporte a diversos tipos de sntese, como wavetable, aditiva, subtrativa, FM, X etc. JASS X X X X X JMusic

Vale lembrar que o JSyn integra o pacote do JMSL. 3.3. Seqenciamento MIDI Esta categoria caracteriza-se pela capacidade das APIs em escalonar eventos MIDI no tempo. As funcionalidades desejveis podem ser vistas na Tabela 3.

Tabela 3: Comparao entre APIs que seqenciam eventos MIDI. Critrio/API Possuir seqenciador virtual Possuir mecanismo que permita programar/escalonar aes MIDI para serem executadas em determinado momento de tempo Possuir mecanismo de sincronizao Leitura de gravao de arquivos MIDI Controles da execuo da msica (andamento, posicionamento no tempo, dinmica) Controle dos canais (dinmica, mute, solo, timbre) Java Sound X JMusic JMSL MIDI Share X Tritonus

X X X X X

X X X X X X X X X

X X X X X

X X X

3.4. Comunicao MIDI com Dispositivos Externos Esta categoria caracteriza-se pela capacidade das APIs em enviar eventos MIDI a dispositivos externos. As funcionalidades desejveis podem ser vistas na Tabela 4.
Tabela 4: Comparao entre APIs que trabalham com dispositivos externos. Critrio/API Capacidade para trocar mensagens MIDI com dispositivos de hardware externo Portabilidade (pelo menos dois S.O.s) Suporte para applets Comunicao via rede Necessidade do Java Sound Java MIDI X X X X X X MIDI Share* X No Such X Wire X Wire Prov. X jMus. X X X MIDI Kit. X

X X

*O Midi Share tambm est includo no pacote do JMSL. 3.5. Sntese a Partir de MIDI Na classificao adotada por este trabalho, este item diferencia-se da sntese de udio (Sub-seo 3.2), a qual permite tambm o uso de udio como entrada, modificando-o. Esta categoria caracteriza-se pela capacidade das APIs em gerar sons a partir de eventos MIDI. As funcionalidades desejveis podem ser vistas na Tabela 5.
Tabela 5: Comparao entre APIs que geram sons a partir de eventos MIDI. Critrio/API Possuir sintetizador virtual Possibilitar redirecionamento de mensagens MIDI para sintetizadores em hardware Uso de soundbanks ou banco de timbres Controle dos parmetros de sntese via API (qualidade de udio) Persistncia dos dados em MIDI e/ou udio Java Sound X JMusic X X X X X X Tritonus X X X X X

3.6. Componentes Grficos Esta categoria caracteriza-se pela capacidade das APIs em exibir informaes musicais, em diversas notaes, atravs das interfaces grficas. As funcionalidades desejveis podem ser vistas na Tabela 6.
Tabela 6: APIs que exibem informaes musicais em interfaces grficas. Critrio/API Exibio de dados MIDI em notao musical tradicional Exibio de dados MIDI em notao musical alternativa Funcionalidades de execuo musical integradas JScore X X Xemo X JMusic X X X

3.7. Representao Musical Esta categoria caracteriza-se pela capacidade das APIs em trabalhar com outros formatos de arquivos usados para armazenar informaes musicais. As funcionalidades desejveis podem ser vistas na Tabela 7.
Tabela 7: APIs que trabalham com formatos de arquivos musicais. Critrio/API Permite codificao de dados musicais em formatos ortodoxos, diferentes do convencional MIDI MusicXML JFugue X Xemo X X

3.8. Programao Musical (Composio) Uma API musical pode ser usada em softwares destinados a diversos fins, entretanto possuem maior vocao para alguma atividade musical. Esta categoria composta pela APIs criadas para uso em composio musical. As funcionalidades desejveis podem ser vistas na Tabela 8.
Tabela 8: APIs criadas para uso em composio musical. Critrio/API Criao/edio grfica de elementos musicais Criao/edio por cdigo de elementos musicais Performances interativas Gravao do material gerado Suporte a MIDI Sntese em tempo real jMusic X X X X X X JMSL X* X X X X X JSyn X X X X X

*MusicShape Editor

4. Concluses
Este trabalho apresentou e analisou 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 concluso que as melhores APIs 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. Certamente o usurio deve considerar a natureza da sua aplicao para optar por uma ou outra biblioteca.

No se espera com este trabalho esgotar ou abranger todas as bibliotecas para programao musical em Java, somente apresentar as principais bibliotecas, visto o grande dinamismo com que so criadas diariamente.

Referncias
Didkovsky, N.; Burk, P. (2005) Java http://www.algomusic.com/jmsl/, ago. 2005. Doel, K. (2005) Real-time Audio http://www.cs.ubc.ca/~kvdoel/jass/, ago. 2005. Music Specification using Gerrit Language, JASS, Gehnen,

Synthesis by

Gehnen, G. (2005) Java and Midi Programs http://www.geocities.com/ggehnen/, ago. 2005.

Grame (2005) Recherche, http://www.grame.fr/Recherche/, ago. 2005. Java Sound Resources (2005) http://www.jsresources.org/, ago. 2005. JScore (2005) http://homepages.nyu.edu/~ray208/Jscoring/html/JScore.html, ago. 2005. JSyn (2005) Java Audio Synthesis, http://www.softsynth.com/jsyn/, ago. 2005. JSynthLib (2005) JSynthLib Home Page, http://www.jsynthlib.org/, ago. 2005. Koelle, D. (2005) JFugue - Java API for Music Programming, http://www.jfugue.org/, ago. 2005. Marsanyi, R. (2005) JavaMIDI, http://www.softsynth.com/javamidi/ , ago. 2005. McNabb, M. (2005) Fantasia and http://www.mcnabb.com/software/fantasia/, ago. 2005. Project Xemo (2003) http://www.xemo.org/, set. 2003. Sorensen, A.; Brown, A. (2005) jMusic: http://jmusic.ci.qut.edu.au/, ago. 2005. Music Composition in Java, The MIDI Kit,

NoSuch MIDI. (2005) http://www.nosuch.com/nosuchmidi/, ago. 2005.

Tritonus (2005) Open Source Java Sound, http://tritonus.org/, ago. 2005. Wire (2005) http://www.bonneville.nl/software/Wire/, ago. 2005.