quarta-feira, 12 de dezembro de 2012

API Java Sound


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

Nenhum comentário:

Postar um comentário