domingo, 17 de agosto de 2008

3 Conceitos Principais - Line

Um line é um caminho de movimentação do áudio para dentro e para fora de um sistema, geralmente um mixer (embora tecnicamente um mixer também seja um tipo de line).

As portas de entrada e saída de áudio são lines. Além de microfones e alto-falantes, também são tipos de lines caminhos de informações que um programa pode enviar ou receber áudio de um mixer.

A única diferença entre lines na API Java Sound e as lines de um mixer físico é que o fluxo de informações de áudio em uma linha na API Java Sound pode ser mono ou multicanal. No caso do mixer físico, cada entrada e saída é um único canal de som. Na API Java Sound o número de canais em uma linha é especificado pela classe AudioFormat da informação sendo transmitida nesta linha.

O tipo de linha chamado Clip funciona basicamente para a execução do áudio. O tipo SourceDataLine aceita streams de áudio em tempo-real. Ambos são lines de entrada.

O tipo TargetDataLine é uma linha (saída do mixer) que contém a mistura de streams de entrada.

A hierarquia de Interfaces de Line.



A interface base, Line, descreve funcionalidades mínimas comuns a todas as linhas:
  • Controles: DataLines e Ports geralmente possuem um conjunto de controles que afetam o sinal de áudio atravessando uma linha. A API Java Sound especifica classes de controle que podem ser usadas para manipular aspectos do som tais como ganho, pan, reverb e taxa de amostragem.
  • Status aberto ou fechado: a correta abertura de uma linha garante que os recursos sejam alocados à linha. Um mixer tem um número finito de linhas. O fechamento de uma linha indica que os recursos utilizados pela linha podem então ser liberados.
  • Eventos: uma linha gera eventos quando é aberta ou fechada. Entretanto, sub-interfaces de Line podem introduzir outros tipos de eventos. Quando uma linha gera um evento, o evento é enviado para todos os objetos que estão registrados para ouvirem por eventos naquela linha.
Ports são linhas simples para entrada e saída de áudio.

Um Mixer é definido tendo um ou mais source lines e uma ou mais target lines. A interface Mixer foi criada para satisfazer a uma variedade de dispositivos. A interface Mixer suporta sincronização, ou seja, você pode especificar que duas ou mais linhas de um mixer sejam tratadas como um grupo sincronizado. Então você pode iniciar, parar ou fechar todas as linhas de informações apenas enviando uma simples mensagem para qualquer linha no grupo, ao invés de ter que controlar cada uma individualmente.

A interface DataLine provê as seguintes características adicionais à Line:
  • Formato de audio: cada data line tem um formato de áudio associado com as informações do stream.
  • Media position: um data line pode dizer sua posição atual, expressa em sample frames. Isto representa o número de janelas de amostras capturadas de um data line desde que este foi aberto.
  • Tamanho do buffer: este é o tamanho do buffer interno do data line.
  • Level: a amplitude corrente do sinal de áudio.
  • Iniciar ou parar playback ou captura.
  • Pausar ou resumir playback ou captura.
  • Flush: descartar informações não processadas da fila.
  • Drain: bloqueio até que toda a informação não processada seja drenada da fila e o buffer do data line esteja vazio.
  • Status ativo: um data line é considerado ativo se está envolvido em uma captura ou apresentação ativa de informações de áudio de/para um mixer.
  • Eventos: eventos START e STOP são produzidos quando apresentações ou capturas ativas de informações de/para um data line são iniciadas ou paradas.
Um TargetDataLine recebe informações de áudio de um mixer. Esta interface provê métodos para ler informações do buffer de um TargetDataLine e para determinar quanta informação ainda está disponível para ser lida.

Um SourceDataLine recebe informações de áudio para playback. Provê métodos para escrever informações ao buffer do SourceDataLine para playback e para determinar quanta informação a linha está preparada para receber sem bloqueio.

Um Clip é um DataLine em que as informações de áudio podem ser carregadas principalmente para playback. Pelo fato das informações já estarem pré-carregadas, a duração do clip é conhecida antes do playback e é possível escolher qualquer ponto de início de execução. Clips podem ser repetidos, ou seja, é possível criar loops com Clip.


Com este post, finalizo a apresentação dos principais conceitos da API Java Sound. Até o próximo!

Um comentário:

Vicente disse...

Olá, como posso entrar em contato contigo?
vicente_maia_jr@hotmail.com
no aguardo, abraço