Pedro Leite
[email protected]
Agenda
 Introdução
 Buffers
 Listener
 Sources
 Modelos de Distância
 Demo
 Conclusão
 Referências
Introdução
 OpenAL é uma API multiplataforma para áudio 3D
 Objetivo de situar fontes de áudio (sources) num
espaço tridimensional, em volta de um ouvinte
(listener)
 Código fonte aberto
 Desenvolvida em C
 Utiliza a notação de OpenGL para descrever comandos
e argumentos
 glBegin, glEnd, glIsEnable, etc.
 alBuffer, alSource, alListener, etc.
Introdução
 Creative Labs suporta OpenAL em seu hardware
 Engines que utilizam
 Doom 3
 Jedi Knight e Jedi Knight 2
 Jedi Academy
 Quake 4
 Prey
Introdução
 Possui tipos primitivos bem definidos
 ALboolean, ALchar, ALbyte, etc.
 Detecta algumas condições que podem levar a erros
 alGetError
 Implementa efeito Doppler
 Sources, listener e o próprio som possuem uma velocidade
associada
 alDopplerFactor
 Diferentes modelos de distância
 AL_LINEAR_DISTANCE
 AL_INVERSE_DISTANCE
 AL_EXPONENCIAL_DISTANCE
Introdução
 OpenAL fornece uma máquina de estados simples
 alGetBooleanv, alGetIntegerv, alGetFloatv, alGetDoublev
 alGetBoolean, alGetInteger, alGetFloat, alGetDouble
 Tempo e freqüência
 Métrica padrão definida em segundos e Hertz
 Espaço e distância
 Nenhuma métrica definida
 A critério do desenvolvedor
 Assim como OpenGL, OpenAL fornece um mecanismo
para extensões
 Cada vendendor pode prover extensões diferentes em suas
placas de som
Introdução
Buffers
 Encapsula os dados do áudio
 Buffers em OpenAL possuem dados de áudio no
formato PCM
 Utiliza o byte order nativo do processador


Big endian
Little endian
 Podem ser compartilhados em vários contextos
 Podem ser referenciados por vários sources
Buffers - Propriedades
 Freqüência
 Samples por segundo (Hertz)
 AL_FREQUENCY
 Tamanho
 Quantidade de bytes
 AL_SIZE
 Bits
 Quantidade de bits por sample
 AL_BITS
 Canais
 Quantidade de canais para os dados contidos no buffer
 AL_CHANNELS
Buffers - Criação
 Podem ser criados e deletados dinamicamente
 void alGenBuffers(ALsizei n, ALuint* buffers)
 void alDeleteBuffers(ALsizei n,const ALuint* buffers);
 São referenciados pelo nome gerado na função
alGenBuffers
 Formatos incluem Mono e Stereo com 8 ou 16 bits
 AL_FORMAT_MONO8
 AL_FORMAT_MONO16
 AL_FORMAT_STEREO8
 AL_FORMAT_STEREO16
Buffers - Estados
 UNUSED
 Não está incluído em nenhuma fila para nenhum source
 O nome do buffer pode ser deletado neste estado
 PROCESSED
 Está na fila de pelo menos algum source
 O áudio já foi consumido
 PENDING
 Está na fila de pelo menos algum source
 O áudio ainda não foi totalmente consumido
Listener
 Entidade estática que percebe o som
 OpenAL define somente um listener por contexto
 Não possui nome
Listener - Propriedades
 Posição
 alListenerfv(AL_POSITION, listener_position);
 Velocidade
 Não atualiza a posição do listener com o tempo
 alListenerfv(AL_VELOCITY, listener_velocity);
 Ganho
 Define um multiplicador de amplitude escalar
 alListenerf(AL_GAIN, listener_gain);
 alListenerf(AL_MIN_GAIN, listener_min_gain);
 alListenerf(AL_MAX_GAIN, listener_max_gain);
 Orientação
 Dois vetores: direção (“at”) e normal (“up”)
 alListenerfv(AL_ORIENTATION, listener_orientation);
Sources
 Fontes sonoras
 OpenAL permite a criação de vários sources
 Possuem um buffer de dados associado
 Som a ser emitido pelo source
 Definem um som localizado e um conjunto de
atributos a serem aplicados ao som, em sua origem
 Primeiro estágio de processamento no caminho ao
listener
Sources - Propriedades
 Posição
 alSourcefv(AL_POSITION, source_position);
 Velocidade
 Não atualiza a posição do listener com o tempo
 alSourcefv(AL_VELOCITY, source_velocity);
 Ganho
 Define um multiplicador de amplitude escalar
 alSourcef(AL_GAIN, source_gain);
 alSourcef(AL_MIN_GAIN, source_min_gain);
 alSourcef(AL_MAX_GAIN, source_max_gain);
 Pitch
 Porcentagem da freqüência do áudio a ser utilizada
 alSourcef(AL_PITCH, source_pitch);
Sources - Propriedades
 Posicionamento
 Em relação ao listener ou global
 alSourcei(AL_SOURCE_RELATIVE, source_relative);
 Tipo
 Tipo da fonte pode ser estática, streaming ou
indeterminada
 Looping
 Indica se o source deve estar ou não em loop

alSourcei(AL_LOOPING, source_loop);
Sources - Propriedades
 Cone
 Define ângulo interno, externo e o ganho do externo
 alSourcef(AL_CONE_INNER_ANGLE, angle);
 alSourcef(AL_CONE_OUTER_ANGLE, angle);
 alSourcef(AL_CONE_OUTER_GAIN, value);
Sources - Criação
 Podem ser criados sob demanda da aplicação
 void alGenSources(ALsizei n, ALuint* buffers)
 void alDeleteSources(ALsizei n,const ALuint* buffers);
 Dados podem ser atribuídos a um source
estaticamente
 alSourcei(source_id, AL_BUFFER, buffer_name)
 Sources podem ser do tipo streaming
 alSourceQueueBuffer
 alSourceUnqueueBuffer
Sources - Estados
 AL_INITIAL
 Quando o source é criado ou quando a função alSourceRewind foi
devidamente chamada
 Próximos estados: AL_PLAYING
 AL_PLAYING
 O source está tocando o conteúdo do buffer associado a ele
(estaticamente ou por streaming) através da função alSourcePlay
 Próximos estados: AL_PAUSED, AL_INITIAL, AL_STOPPED
 AL_PAUSED
 O source foi pausado através da função alSourcePause
 Próximos estados: AL_INITIAL, AL_STOPPED, AL_PLAYING
 AL_STOPPED
 O source foi parado através da função alSourceStop
 Próximos estados: AL_INITIAL
Modelos de Distância
 OpenAL possui diferentes modelos de distância
 Ganho de cada source é atenuado pela distância
 Definido pelo bit AL_DISTANCE_MODEL
 Bits AL_REFERENCE_DISTANCE e
AL_ROLLOFF_FACTOR influem diretamente no
modelo escolhido
 AL_REFERENCE_DISTANCE é a distância máxima do
source no qual o listener possui ganho
Modelos de Distância
 AL_NONE
 Nenhum modelo associado
 AL_INVERSE_DISTANCE
 Ganho inversamente proporcional à distância
 AL_INVERSE_DISTANCE_CLAMPED
 Não permite ganho maior que 1
 a
Modelos de Distância
Modelos de Distância
 AL_LINEAR_DISTANCE
 Ganho calculado através de uma função linear
 AL_LINEAR_DISTANCE_CLAMPED
 Não permite ganho maior que 1
 a
Modelos de Distância
Modelos de Distância
 AL_EXPONENCIAL_DISTANCE
 ganho calculado através de uma função exponencial
 AL_EXPONENCIAL_DISTANCE_CLAMPED
 Não permite ganho maior que 1
Modelos de Distância
Static Source, Looping & Fadeaway, Multiple Sources, Sharing
Buffers, Streaming
Conclusão
 Pontos fortes
 Multiplataforma
 Código fonte aberto
 Grandes empresas e projetos utilizando
 Fácil utilização no desenvolvimento
 Pontos fracos
 Versão no Linux ainda está na 0.0.8
 Somente uma empresa fornece aceleração em hardware
Referências
 OpenAL 1.1 Specification
 http://www.openal.org/documentation.html
 Creative Labs
 http://developer.creative.com/
 Wikipedia
 http://en.wikipedia.org/wiki/OpenAL
Download

OpenAL – Uma Biblioteca para Som 3D