Mostrando postagens com marcador sampled. Mostrar todas as postagens
Mostrando postagens com marcador sampled. Mostrar todas as postagens

quinta-feira, 21 de agosto de 2008

Como acessar os recursos de som do seu sistema?

A API Java Sound provê maneiras de informar os componentes de áudio disponíveis no seu sistema e maneiras do seu programa acessá-los.

A classe AudioSystem

A classe AudioSystem atua como um coletor e distribuidor de informações para componentes de áudio, incluindo serviços nativos e serviços instalados separadamente por meio de providers de terceiros. Por exemplo, um programa pode ser iniciado solicitando a classe AudioSystem onde existe um mixer que possua uma certa configuração.

Alguns recursos que um programa pode obter da classe AudioSystem:

  • Mixers: um sistema geralmente possui vários mixers instalados. Existe pelo menos um para entrada de áudio e outro para saída de áudio. A classe AudioSystem provê uma lista de todos os mixers instalados.
  • Lines: como as linhas estão associadas a mixers, um programa pode recuperar uma linha diretamente da classe AudioSystem.
  • Conversões de formatos: um programa pode querer traduzir um formato de áudio em outro.
  • Arquivos e streams: a classe AudioSystem provê métodos para traduzir arquivos de áudio e streams de áudio.

Objetos de Informação

Algumas classes na API Java Sound provêem informações úteis sobre interfaces associadas. Por exemplo, Mixer.Info provê detalhes (nome do fabricante, descrição e versão) sobre um mixer instalado.


Um pouco na correria... Em breve vou postar mais informações de como utilizar a classe AudioSystem.

Até mais!

domingo, 10 de agosto de 2008

javax.sound.sampled

O foco do pacote javax.sound.sampled é o de playback e captura de informações de áudio. Para isso é necessário conhecer 3 conceitos fundamentais: formato de informação de áudio, line e mixer.

A tarefa principal da API Java Sound é saber como mover bytes de áudio formatados para dentro e para fora do sistema. Esta tarefa envolve a abertura dos dispositivos de entrada e saída e o gerenciamento de buffers que são preenchidos com as informações de áudio em tempo real. Também envolve a mistura de múltiplos streams de áudio em apenas um stream. O transporte de som para dentro e fora do sistema tem que ser corretamente manipulado pois é preciso contemplar as necessidades do usuário quando este solicita que o fluxo de som seja iniciado, parado, resumido ou interrompido.

Manipulação de áudio com e sem buffer
A API Java Sound manipula o transporte de áudio nas formas de streaming, com buffer e sem buffer. O termo "streaming" é usado de forma genérica para referenciar a manipulação de bytes de áudio em tempo-real. Não se refere ao envio de áudio pela Internet. Em outras palavras, um stream de áudio é um conjunto simples de bytes de áudio que chegam mais ou menos na mesma taxa de amostragem que serão manipulados.
As operações nos bytes começam antes de toda a informação chegar. No modelo de streaming, particularmente no caso de entrada, não é necessário conhecer antecipadamente o tamanho do som e quando ele irá terminar. Devemos manipular um buffer de informações por vez até que a operação seja suspendida. No caso de saída, devemos entregar os bytes de áudio para a engine de som e ela cuida de tocar cada amostra no momento correto.

quinta-feira, 7 de agosto de 2008

Áudio Amostrado (Sampled)

Nesse post, tento explicar como é a idéia de um sinal de áudio amostrado e como a API Java Sound aborda este conceito.

Imagine uma pessoa falando ao microfone. O microfone converte o sinal acústico da voz da pessoa em um sinal elétrico analógico correspondente (este processo se dá pela captura da variação da pressão do ar que é causada pela fala da pessoa). Um conversor AD (analógico-digital) transforma então este sinal analógico para uma forma digital amostrada conforme o gráfico a seguir:

O gráfico desenha a pressão do som (amplitude) no eixo vertical e o tempo no eixo horizontal. A amplitude de uma onda sonora é medida periodicamente a uma certa taxa, resultando em amostras discretas (os pontos vermelhos do gráfico) que compreendem o sinal de áudio digital. A precisão da aproximação do sinal analógico depende de sua resolução no tempo (taxa de amostragem) e sua quantização (ou resolução em amplitude - o número de bits usados para representar cada amostra).

A API Java Sound não possui uma configuração de hardware específica. É projetada para permitir que diferentes tipos de componentes de áudio sejam instalados em um sistemas e acessados pela API.
A figura anterior mostra o exemplo de uma placa de som contendo várias portas de entradas e saídas. O mixer geralmente recebe informções de áudio de alguma fonte: arquivo, streaming de rede, sintetizador MIDI, dentre outros. O mixer combina todas as entradas de áudio em um único stream, podendo ser enviado para um dispositivo de saída.

Voilà! Lembro que isto é apenas uma introdução.