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