190 likes | 319 Views
Java Sound (S ampled ). Computação Musical e Processamento de Som – 06.1. Márcio Dahia (mlmd@cin.ufpe.br) e Ernesto Trajano (etl@cin.ufpe.br). Roteiro. Teoria O que é? Java Sound Engine Arquitetura Principais conceitos Classes importantes Exemplos e Exercícios
E N D
Java Sound (Sampled ) Computação Musical e Processamento de Som – 06.1 Márcio Dahia (mlmd@cin.ufpe.br) e Ernesto Trajano (etl@cin.ufpe.br)
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
O que é? (1/3) • API Java para manipular sons (áudio e MIDI): • Disponível a partir do jdk1.3 • 2 pacotes • 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
O que é? (2/3) • Nível mais baixo em Java • Outras APIs consideradas alto-nível (Java Media Framework) • Execução, controle e sincronização de múltiplas mídias (time-based media--vídeo, sons) • Foco no transporte de dados: • como mover bytes de dados formatados (áudio) para/de uma aplicação • Acesso aos dispositivos de áudio do PC
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
Sampled audio (Áudio digital) • Captura de áudio • dispositivos de entrada (microfones) • Mixagem e reprodução • Controle • ajuste de volume, reverberação, etc. • Conversores de formato • Status e notificações • recebimento de eventos relacionados à reprodução
Principais conceitos • Transporte de dados! • Entrada/Aplicação, Aplicação/Saída • Para executar/capturar um som é necessário, no mínimo • Dado formatado • Um mixer (aplicação) • Um line (meio de transporte) • Manipulação do áudio digital com ou sem buffers
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
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
Line(1/3) • Representa um caminho por onde o som flui • Tipos • Clip • Entrada de áudio sem streaming • SourceDataLine • Entrada de áudio com streaming • Port • Entrada ou saída de dispositivo (microfone, alto-falante etc.) • TargetDataLine • Saída de áudio com streaming • Mixer
Line(2/3) • Funcionalidades • Controles (controls) • volume, panorama, reverb etc. • Status “aberto” e “fechado” • Aberto, aloca recursos exclusivamente • Fechado, libera • Eventos • Envia os eventos para os listeners cadastrados • Subinterfaces introduzem mais eventos
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)
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 classInfo do mesmo recurso • static Mixer getMixer(Mixer.Info info) • static Line getLine(Line.Info info)
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)
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) • Ex. Mute, Apply reverb etc. • FloatControl • Valores variam em um intervalo • Ex. panorama • EnumControl • Valores são objetos, apenas um pode ser escolhido • Ex. reverb (ReverbType) • CompoundControl • Coleção de Controls • Ex. um equalizador pode ser um conjunto de FloatControls
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
Documentação • Java Media • http://java.sun.com/products/java-media/sound/ • API • http://java.sun.com/products/java-media/sound/doc-sampled.html • Guia do Programador • http://java.sun.com/j2se/1.4.1/docs/guide/sound/programmer_guide/contents.html • Java Sound Resources • http://www.jsresources.org