Java Sound (Sampled )
Computação Musical e Processamento
de Som – 06.1
Márcio Dahia ([email protected]) e Ernesto Trajano ([email protected])
1
Roteiro

Teoria






O que é?
Java Sound Engine
Arquitetura
Principais conceitos
Classes importantes
Exemplos e Exercícios




Listando os recursos disponíveis
“Tocando” um arquivo
Criando uma onda
“Construindo” um filtro passa-baixa
2
O que é? (1/3)

API Java para manipular sons (áudio e MIDI):


2 pacotes



Disponível a partir do jdk1.3
javax.sound.sampled: captura, mixagem e reprodução
de áudio digital
javax.sound.midi: síntese, sequenciamento, transporte
de eventos
Service provider interface: implementação de
serviços adicionais (plug-ins)


javax.sound.sampled.spi: mp3, conversão de
formatos, etc.
javax.sound.midi.spi: sintetizadores, soundbank, etc
3
O que é? (2/3)


Nível mais baixo em Java
Outras APIs consideradas alto-nível (Java
Media Framework)


Foco no transporte de dados:


Execução, controle e sincronização de múltiplas
mídias (time-based media--vídeo, sons)
como mover bytes de dados formatados (áudio)
para/de uma aplicação
Acesso aos dispositivos de áudio do PC
4
O que é? (3/3)

Adaptado do Beatnik Audio Engine






formato: aiff, au e wav
canais: mono ou estéreo
taxa de amostragem: 8 a 48 kHz
resolução: 8 ou 16 bits
codificação: linear, a-law ou µ-law
mixer de 64 canais de áudio digital ou midi em
software
5
Sampled audio (Áudio digital)

Captura de áudio



Mixagem e reprodução
Controle



dispositivos de entrada (microfones)
ajuste de volume, reverberação, etc.
Conversores de formato
Status e notificações

recebimento de eventos relacionados à
reprodução
6
Arquitetura
7
Principais conceitos

Transporte de dados!


Para executar/capturar um som é necessário,
no mínimo




Entrada/Aplicação, Aplicação/Saída
Dado formatado
Um mixer (aplicação)
Um line (meio de transporte)
Manipulação do áudio digital com ou sem
buffers
8
Dados Formatados

Distinção entre formato de dados e formato de
arquivo

AudioFormat







Técnica da codificação (normalmente PCM)
Número de canais (1-mono, 2-estéreo ...)
Taxa de amostragem
Resolução da amostragem
Taxa de Frames
Tamanho do Frame
AudioFileFormat




Tipo do arquivo (WAVE, AIFF ...)
Tamanho do arquivo em bytes
Tamanho, em frames, dos dados contidos no arquivo
Objeto AudioFormat
9
Mixer

Encapsula diversos dispositivos
que manipulam áudio



Placa de som, etc.
Abstração de uma mesa de
mixagem
Possui




uma ou mais entradas de
áudio
uma ou mais saídas de áudio
Controles de volume,
reverberação e panorama de
conjuntos de entradas
Métodos de sincronização das
entradas
10
Line(1/3)


Representa um caminho por onde o som flui
Tipos

Clip


SourceDataLine


Entrada ou saída de dispositivo (microfone, alto-falante etc.)
TargetDataLine


Entrada de áudio com streaming
Port


Entrada de áudio sem streaming
Saída de áudio com streaming
Mixer
11
Line(2/3)

Funcionalidades

Controles (controls)


Status “aberto” e “fechado”



volume, panorama, reverb etc.
Aberto, aloca recursos exclusivamente
Fechado, libera
Eventos


Envia os eventos para os listeners cadastrados
Subinterfaces introduzem mais eventos
12
Line(3/3)
13
DataLine

Acrescenta à Line:







AudioFormat associado
Posição atual da mídia
Tamanho do buffer interno
Level (a amplificação atual do sinal)
Start, stop
Flush (descartar dados não processados)
Drain (consume os dados do buffer)
14
AudioSystem

Agrupa métodos estáticos para alocar os
principais recursos do sistema


Mixers, Lines, AudioInputStreams, conversores de
formato etc.
Geralmente, a requisição do recurso é feita
através da inner class Info do mesmo recurso


static Mixer getMixer(Mixer.Info info)
static Line getLine(Line.Info info)
15
AudioInputStream

InputStream acrescido de AudioFormat





Formato de áudio
Tamanho do segmento de dados (em frames)
Posicão atual (em frames)
Tamanho do frame (em bytes)
Pode-se obtê-lo a partir de



TargetDataLine
InputStream + formato de audio + tamanho do
segmento de dados
a partir de um nome de arquivo (através da classe
AudioSystem)
16
Controles

Afetam o sinal durante a passagem por um Line



Panorama, reverb etc.
Inner class <nome-controle>.Type
BooleanControl

Podem ter apenas dois valores (ligado/desligado)


FloatControl

Valores variam em um intervalo


Ex. panorama
EnumControl

Valores são objetos, apenas um pode ser escolhido


Ex. Mute, Apply reverb etc.
Ex. reverb (ReverbType)
CompoundControl

Coleção de Controls

Ex. um equalizador pode ser um conjunto de FloatControls
17
Exemplos



Exemplo 1 - Listando os recursos disponíveis
Exemplo 2 - Tocando um arquivo de áudio
Tarefa 2

Alterar algum controle (Control) do clip



Atenção: A mudança no controle de um Line só funciona caso
ele esteja aberto
Exemplo 3 - Criando uma onda sonora
Tarefa 3

Salvar a onda em arquivo


Não existe AudioOutputStream
O AudioSystem é responsável pela alocação de recursos
18
Documentação

Java Media


API


http://java.sun.com/products/java-media/sound/docsampled.html
Guia do Programador


http://java.sun.com/products/java-media/sound/
http://java.sun.com/j2se/1.4.1/docs/guide/sound/programm
er_guide/contents.html
Java Sound Resources

http://www.jsresources.org
19
Download

jsaudio