Pedro Leite [email protected]. Agenda Introdução Buffers Listener Sources Modelos de Distância...

29
Pedro Leite [email protected]

Transcript of Pedro Leite [email protected]. Agenda Introdução Buffers Listener Sources Modelos de Distância...

AgendaIntroduçãoBuffersListenerSourcesModelos de DistânciaDemoConclusãoReferências

IntroduçãoOpenAL é uma API multiplataforma para áudio

3DObjetivo de situar fontes de áudio (sources)

num espaço tridimensional, em volta de um ouvinte (listener)

Código fonte abertoDesenvolvida em CUtiliza a notação de OpenGL para descrever

comandos e argumentosglBegin, glEnd, glIsEnable, etc.alBuffer, alSource, alListener, etc.

IntroduçãoCreative Labs suporta OpenAL em seu

hardware

Engines que utilizamDoom 3Jedi Knight e Jedi Knight 2Jedi AcademyQuake 4Prey

IntroduçãoPossui tipos primitivos bem definidos

ALboolean, ALchar, ALbyte, etc.Detecta algumas condições que podem levar a

errosalGetError

Implementa efeito DopplerSources, listener e o próprio som possuem uma

velocidade associadaalDopplerFactor

Diferentes modelos de distânciaAL_LINEAR_DISTANCEAL_INVERSE_DISTANCEAL_EXPONENCIAL_DISTANCE

IntroduçãoOpenAL fornece uma máquina de estados simples

alGetBooleanv, alGetIntegerv, alGetFloatv, alGetDoublev

alGetBoolean, alGetInteger, alGetFloat, alGetDoubleTempo e freqüência

Métrica padrão definida em segundos e HertzEspaço e distância

Nenhuma métrica definidaA critério do desenvolvedor

Assim como OpenGL, OpenAL fornece um mecanismo para extensõesCada vendendor pode prover extensões diferentes

em suas placas de som

Introdução

BuffersEncapsula os dados do áudioBuffers em OpenAL possuem dados de áudio

no formato PCMUtiliza 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 - PropriedadesFreqüência

Samples por segundo (Hertz)AL_FREQUENCY

TamanhoQuantidade de bytesAL_SIZE

BitsQuantidade de bits por sampleAL_BITS

CanaisQuantidade de canais para os dados contidos no

bufferAL_CHANNELS

Buffers - CriaçãoPodem 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

alGenBuffersFormatos incluem Mono e Stereo com 8 ou 16 bits

AL_FORMAT_MONO8AL_FORMAT_MONO16AL_FORMAT_STEREO8AL_FORMAT_STEREO16

Buffers - EstadosUNUSED

Não está incluído em nenhuma fila para nenhum source

O nome do buffer pode ser deletado neste estadoPROCESSED

Está na fila de pelo menos algum sourceO áudio já foi consumido

PENDINGEstá na fila de pelo menos algum sourceO áudio ainda não foi totalmente consumido

ListenerEntidade estática que percebe o som

OpenAL define somente um listener por contexto

Não possui nome

Listener - PropriedadesPosição

alListenerfv(AL_POSITION, listener_position);Velocidade

Não atualiza a posição do listener com o tempoalListenerfv(AL_VELOCITY, listener_velocity);

GanhoDefine um multiplicador de amplitude escalaralListenerf(AL_GAIN, listener_gain);alListenerf(AL_MIN_GAIN, listener_min_gain);alListenerf(AL_MAX_GAIN, listener_max_gain);

OrientaçãoDois vetores: direção (“at”) e normal (“up”)alListenerfv(AL_ORIENTATION, listener_orientation);

SourcesFontes sonoras

OpenAL permite a criação de vários sourcesPossuem um buffer de dados associado

Som a ser emitido pelo sourceDefinem um som localizado e um conjunto de

atributos a serem aplicados ao som, em sua origemPrimeiro estágio de processamento no caminho

ao listener

Sources - PropriedadesPosição

alSourcefv(AL_POSITION, source_position);Velocidade

Não atualiza a posição do listener com o tempoalSourcefv(AL_VELOCITY, source_velocity);

GanhoDefine um multiplicador de amplitude escalaralSourcef(AL_GAIN, source_gain);alSourcef(AL_MIN_GAIN, source_min_gain);alSourcef(AL_MAX_GAIN, source_max_gain);

PitchPorcentagem da freqüência do áudio a ser utilizadaalSourcef(AL_PITCH, source_pitch);

Sources - PropriedadesPosicionamento

Em relação ao listener ou globalalSourcei(AL_SOURCE_RELATIVE,

source_relative);Tipo

Tipo da fonte pode ser estática, streaming ou indeterminada

LoopingIndica se o source deve estar ou não em loop

alSourcei(AL_LOOPING, source_loop);

Sources - PropriedadesCone

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çãoPodem 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

estaticamentealSourcei(source_id, AL_BUFFER, buffer_name)

Sources podem ser do tipo streamingalSourceQueueBufferalSourceUnqueueBuffer

Sources - EstadosAL_INITIAL

Quando o source é criado ou quando a função alSourceRewind foi devidamente chamada

Próximos estados: AL_PLAYINGAL_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_STOPPEDAL_PAUSED

O source foi pausado através da função alSourcePausePróximos estados: AL_INITIAL, AL_STOPPED, AL_PLAYING

AL_STOPPEDO source foi parado através da função alSourceStopPróximos estados: AL_INITIAL

Modelos de DistânciaOpenAL possui diferentes modelos de distância

Ganho de cada source é atenuado pela distânciaDefinido pelo bit AL_DISTANCE_MODELBits AL_REFERENCE_DISTANCE e

AL_ROLLOFF_FACTOR influem diretamente no modelo escolhidoAL_REFERENCE_DISTANCE é a distância

máxima do source no qual o listener possui ganho

Modelos de DistânciaAL_NONE

Nenhum modelo associadoAL_INVERSE_DISTANCE

Ganho inversamente proporcional à distância

AL_INVERSE_DISTANCE_CLAMPEDNão permite ganho maior que 1

a

Modelos de Distância

Modelos de DistânciaAL_LINEAR_DISTANCE

Ganho calculado através de uma função linear

AL_LINEAR_DISTANCE_CLAMPEDNão permite ganho maior que 1

a

Modelos de Distância

Modelos de DistânciaAL_EXPONENCIAL_DISTANCE

ganho calculado através de uma função exponencial

AL_EXPONENCIAL_DISTANCE_CLAMPEDNão permite ganho maior que 1

Modelos de Distância

Static Source, Looping & Fadeaway, Multiple Sources, Sharing Buffers, Streaming

ConclusãoPontos fortes

MultiplataformaCódigo fonte abertoGrandes empresas e projetos utilizandoFácil utilização no desenvolvimento

Pontos fracosVersão no Linux ainda está na 0.0.8Somente uma empresa fornece aceleração em

hardware

ReferênciasOpenAL 1.1 Specification

http://www.openal.org/documentation.htmlCreative Labs

http://developer.creative.com/Wikipedia

http://en.wikipedia.org/wiki/OpenAL