Java Sound é uma API (Application Programming Interface - biblioteca de classes) que provê suporte para operações de
áudio e MIDI com alta qualidade, tais como: captura, mixagem, gravação, sequenciamento
e síntese MIDI. A Java Sound vem junto com o J2SE desde a versão 1.3 e por
isso é considerada por
alguns como a fonte do sucesso do Java para a programação
musical. Na versão J2SE 1.5 teve grande avanço e correção e alguns de seus
principais bugs, como a comunicação MIDI com dispositivos externos.
Em constante evolução e melhoria, são características
nativas do Java Sound:
- Suporte aos formatos de arquivos de áudio: AIFF, AU e WAV;
- Suporte aos formatos de arquivos de música: MIDI Type 0,
MIDI Type 1, e Rich Music Format (RMF);
- Formatos de som em 8/16 bits, mono e estéreo, 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;
- Síntese e seqüenciamento 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 nível na
plataforma Java,
permitindo aos programas um bom controle nas operações de
som. A API não inclui
editores de som sofisticados ou ferramentas gráficas, mas é
extensível o suficiente para
que isso seja construído a partir dela, como uma API de baixo
nível deve ser.
Existem APIs de mais alto nível para desenvolvimento mais
rápido e fácil de
aplicações multimídia. A própria 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 programação para captura,
execução e sincronização de
mídias baseadas no tempo, como som e vídeo. Porém, nesta
pesquisa, ela não será utilizada.
É permitido que terceiros criem e distribuam componentes de software customizados para
estender suas
capacidades.
Como exemplos de aplicações potenciais para o Java Sound,
cita-se:
- Frameworks para comunicação, como conferência e
telefonia;
- Sistema de entrega de conteúdo, como media
players;
- Programas interativos como jogos e websites dinâmicos;
- Criação e edição de conteúdo sonoro e musical;
- Componentes e ferramentas para manipulação sonora;
· Java Sound não foi a primeira biblioteca a manipular sons
e dados musicais (MIDI) na plataforma Java, mas, sem dúvidas, é a mais
importante delas. Apesar das restrições, o Java Sound permite que as aplicações
escritas com suas classes funcionem da mesma forma nas diversas plataformas
suportadas pelo Java.
Nota-se também que a Sun não tem interesse em desenvolver
mais esta API, pois ela vai continuar sendo uma biblioteca de baixo nível para
manipulação de som e dados musicais, com uma importante alternativa de expansão,
a interface SPI (Server Provider Interfaces). Ela permite desenvolvedores
independentes criarem novos recursos de MIDI e áudio que podem ser distribuídos
separadamente e conectados (plug-ins) sem que as implementações necessitem modificações
no código. Estas implementações podem ser puramente software ou interfaces para
melhor uso do hardware.
O Java Sound suporta tanto áudio digital como MIDI, através de seus dois pacotes distintos:
- javax.sound.sampled: Captura, mixa e toca audio digital (samples);
- javax.sound.midi: Síntese, sequenciamento e tratamento de eventos MIDI;
Configurações de Áudio
O Java Sound API utiliza os recursos do hardware disponíveis na máquina para desempenhar sua principal função: transportar áudio (mover dados formatados para dentro do sistema). Para executar esta função, o Java Sound implementa métodos de gravação e conversão entre alguns formatos de áudio deixando a cargo de terceiros a implementação de plug-ins que venham suportar novos formatos de áudio.
Muitas API's, para tratamento de som, trabalham com o conceito de dispositivo de áudio(devices). Normalmente, um device é uma interface para um dispositivo físico de E/S. No contexto do Java Sound, devices são representados por objetos do tipo Mixer, que tem a função de juntar e direcionar diversas entradas de áudio a uma ou mais saídas.
O objeto responsável por mover o áudio para dentro e para fora do sistema é a Line. Outros objetos também podem ser vistos como uma Line tais como portas de E/S (microfone, CD-ROM, headphone, etc) e até mesmo o Mixer, pois eles também 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 diferença que, no Java Sound, uma Line pode ser multi-canal de acordo com o formato de áudio em transporte.
A interface Mixer define métodos para se obter as Lines que ele gerencia, que podem ser do tipo SourceDataLine (input) ou TargetDataLine (output). Esta interface, no entanto, não define métodos de controle de gravação e execução, sendo esses definidos somente nas DataLine's.
Clip é uma DataLine que armazena todo o som na memória antes de sua execução. Graças a essa característica, é possível navegar pela mídia e programar repetições (loop).
Todo recurso de áudio é obtido através da classe que gerencia os recursos de hardware da máquina: AudioSystem.
·
·
Fonte de Referência
http://www.lume.ufrgs.br/bitstream/handle/10183/6606/000487146.pdf?sequence=1
http://docs.oracle.com/javase/1.5.0/docs/api/index.html
http://stackoverflow.com/tags/javasound/info