ISC-210
Programación Aplicada
Manipulación del Sonido
Manipulación del Sonido en Videojuegos.
OPENAL (Open Audio Library)
• API de audio, multiplataforma, desarrollada por Creative Labs.
• Realiza el renderizado eficiente de audio posicional y multicanal en
tres dimensiones (3D).
• Está enfocado principalmente al desarrollo de videojuegos.
• Posee un estilo y usa convenciones del código similares al de
OpenGL.
• Permite simular el sonido teniendo en cuenta los fenómenos físicos
asociados a la propagación de las ondas sonoras.
• Tiene como principal ventaja la portabilidad y ser un estándar
abierto.
Manipulación del Sonido en Videojuegos.
CONCEPTOS QUE MANEJA EL OPENAL
Efecto Doppler: es la velocidad relativa de la fuente de sonido (source) con
respecto al observador (listener), cuando la fuente sonora se acerca al
observador el sonido parece más agudo y cuando la fuente sonora se aleja del
observador el sonido parece más grave.
Nivel de intensidad : maneja de forma logaritmica el nivel de intensidad (en
decibelios) en la suma de varias FUENTES.
Atenuación por la distancia: al incremento de la separación del RECEPTOR
respecto de la EMISOR de sonido se produce una disminución del nivel de
intensidad de dicha fuente.
Reverberación: cuando el sonido se refleja en todas las direcciones con igual
probabilidad pudiendo llegar al RECEPTOR una vez que ha terminado de
emitirse dicho sonido.
Manipulación del Sonido en Videojuegos.
En OpenAL existen tres tipos fundamentales de datos:
• Sources (EMISOR): Estos objetos contienen y manejan la
información referente al espacio 3D. Contienen información sobre la
situación y la dirección del sonido. Cada una de las fuentes de
sonido va a tener asociado un buffer.
• Buffers: Estos objetos son referenciados por las fuentes.
Normalmente son menores en número que estas ultimas. Su función
consiste en almacenar sonido, ya sea comprimido y descomprimido.
• Listerner (RECEPTOR): Existe un único receptor por cada contexto
de sonido de la aplicación. Esta clase de objeto contiene
propiedades parecidas a las de una fuente que se tendrán en cuenta
a la hora de realizar el procesado del sonido.
El emisor y el receptor tiene propiedades definidas de AL_POSITION y
AL_VELOCITY en vectores de tres coordenadas.
Manipulación del Sonido en Videojuegos.
PASOS TIPICOS EN LA PROGRAMACION USANDO OPENAL
1) Inicializar OpenAL
2) Generar los Buffers
3) Generar las fuentes de sonido (sources)
4) Cargar el fichero "wav" en el buffer y traspasarlo a la fuente de sonido
generada anteriormente.
5) Definir propiedades del oyente (listener)
6) Definir propiedades de las fuentes
7) Reproducir el archivo "wav"
8) Finalizar OpenAL.
Manipulación del Sonido en Videojuegos.
CONFIGURACIONES GENERALES
1- Instalar el OpenAL SDK 1.1.
http://connect.creativelabs.com/openal/Downloads/OpenAL11CoreSDK.zip
2- Descargar el Alut (windows binary) .
http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx?RootFolder=%2fo
penal%2fDownloads%2fALUT&FolderCTID=&View=%7b6A9700C6-7248-4CD2-83F5-
268F2C176072%7d
3- Configurar el proyecto adecuadamente para vincular en sus
propiedades lo siguiente:
a) Linker -> Input -> Additional Dependencies
OpenAL32.lib y Alut.lib
b) C++ -> General -> Additional Include Directories
C:.........OpenAL 1.1 SDKinclude
c) Linker -> General -> Additional Library Directories
C:.........OpenAL 1.1 SDKlibs
4- Colocar en el “system” correspondiente según versión (32 – 64 bits)
la libreria dinámica OpenAL32.dll
5- Colocar en la ruta apropiada del VS
Includealut.h y Libalut.lib,alut.dll
Manipulación del Sonido en Videojuegos.
CONFIGURACIONES EN EL PROYECTO DEL JUEGO
• Incluir en el archivo stdafx.h los encabezados:
#include <AL/alut.h>
#include <stdlib.h>
• Incluir en el proyecto los archivos encargados de la manipulación de
los sonidos (AudioManager.h y AudioManager.cpp) dentro del filtro
Output.
• Crear dentro del directorio DATA una carpeta para almacenar todos
los archivos de sonidos.
• Incluir en el tmain() luego de la inicialización del glut, la inicialización
del alut, colocando la siguiente línea de código:
alutInit(&argc, argv);
Manipulación del Sonido en Videojuegos.
CONFIGURACIONES EN LOS ARCHIVOS XML
• Modificar los archivos XML, añadiéndole el atributo correspondiente
al sonido donde corresponda.
• LEVEL: se debe añadir un atributo que indique el sonido de fondo del
nivel. Si el juego presenta varias escenas, valorar si es necesario
tener un sonido de fondo diferente para cada una.
• PLAYER: se debe añadir un nuevo nivel que dependa
jerárquicamente del PLAYER, donde se definan los archivos de
sonidos correspondientes a las acciones que pueden realizar. OJO
las acciones deben estar vinculados a los ESTADOS asociados con
el input. Ejemplo: en el player-> caminar, correr, disparar, etc.
• REGLAS: se debe añadir una etiqueta que indique el efecto sonoro
que se va a reproducir cuando se realice una determinada acción, si
aplica.
Manipulación del Sonido en Videojuegos.
INTEGRACION EN EL PROYECTO
Incluir en la estructura GAME un nuevo campo para el control del sonido
en el juego:
TSOUNDS mSounds;
En el GAME_Init() anadir la llamada al Init del archivo de sonido:
AudioManager_Init(&(lsGame->mSounds));
La llamada debe estar antes de los Init de las entidades del juego.
En el GAME_Deinit() anadir la llamada al Deinit del archivo de sonido:
AudioManager_Deinit(&(lsGame->mSounds));
La llamada debe estar despues de los Deinit de las entidades del juego.
En las funciones encargadas de la lectura del XML, se debe usuar la
función: AudioManager_Load(&(lsGame->mSounds),"Fondo.wav", true);
Esta función carga en el buffer los sonidos del juego, asignadole un ID único a
cada sonido. El último parámetro indica si es un sonido ciclico o no.
Manipulación del Sonido en Videojuegos.
INTEGRACION EN EL PROYECTO
Utilizar según corresponda las siguientes funciones:
AudioManager_Play(&(sGame.mSounds),ID_Sound);
AudioManager_Stop(&(sGame.mSounds),ID_Sound);
Ejemplo: player al caminar
En la función update del Player, colocar en las acciones asociadas al
eGLKey_Left y eGLKey_Right la llamada a la función:
AudioManager_Play(&(sGame.mSounds), lsPlayer->mySounds[eWalk]);
Y en la condición que valida el STOP, incluir la llamada la función:
AudioManager_Stop(&(sGame.mSounds), lsPlayer->mySounds[eWalk]);

ISC - 210 Sonido - Open Al

  • 1.
  • 2.
    Manipulación del Sonidoen Videojuegos. OPENAL (Open Audio Library) • API de audio, multiplataforma, desarrollada por Creative Labs. • Realiza el renderizado eficiente de audio posicional y multicanal en tres dimensiones (3D). • Está enfocado principalmente al desarrollo de videojuegos. • Posee un estilo y usa convenciones del código similares al de OpenGL. • Permite simular el sonido teniendo en cuenta los fenómenos físicos asociados a la propagación de las ondas sonoras. • Tiene como principal ventaja la portabilidad y ser un estándar abierto.
  • 3.
    Manipulación del Sonidoen Videojuegos. CONCEPTOS QUE MANEJA EL OPENAL Efecto Doppler: es la velocidad relativa de la fuente de sonido (source) con respecto al observador (listener), cuando la fuente sonora se acerca al observador el sonido parece más agudo y cuando la fuente sonora se aleja del observador el sonido parece más grave. Nivel de intensidad : maneja de forma logaritmica el nivel de intensidad (en decibelios) en la suma de varias FUENTES. Atenuación por la distancia: al incremento de la separación del RECEPTOR respecto de la EMISOR de sonido se produce una disminución del nivel de intensidad de dicha fuente. Reverberación: cuando el sonido se refleja en todas las direcciones con igual probabilidad pudiendo llegar al RECEPTOR una vez que ha terminado de emitirse dicho sonido.
  • 4.
    Manipulación del Sonidoen Videojuegos. En OpenAL existen tres tipos fundamentales de datos: • Sources (EMISOR): Estos objetos contienen y manejan la información referente al espacio 3D. Contienen información sobre la situación y la dirección del sonido. Cada una de las fuentes de sonido va a tener asociado un buffer. • Buffers: Estos objetos son referenciados por las fuentes. Normalmente son menores en número que estas ultimas. Su función consiste en almacenar sonido, ya sea comprimido y descomprimido. • Listerner (RECEPTOR): Existe un único receptor por cada contexto de sonido de la aplicación. Esta clase de objeto contiene propiedades parecidas a las de una fuente que se tendrán en cuenta a la hora de realizar el procesado del sonido. El emisor y el receptor tiene propiedades definidas de AL_POSITION y AL_VELOCITY en vectores de tres coordenadas.
  • 5.
    Manipulación del Sonidoen Videojuegos. PASOS TIPICOS EN LA PROGRAMACION USANDO OPENAL 1) Inicializar OpenAL 2) Generar los Buffers 3) Generar las fuentes de sonido (sources) 4) Cargar el fichero "wav" en el buffer y traspasarlo a la fuente de sonido generada anteriormente. 5) Definir propiedades del oyente (listener) 6) Definir propiedades de las fuentes 7) Reproducir el archivo "wav" 8) Finalizar OpenAL.
  • 6.
    Manipulación del Sonidoen Videojuegos. CONFIGURACIONES GENERALES 1- Instalar el OpenAL SDK 1.1. http://connect.creativelabs.com/openal/Downloads/OpenAL11CoreSDK.zip 2- Descargar el Alut (windows binary) . http://connect.creativelabs.com/openal/Downloads/Forms/AllItems.aspx?RootFolder=%2fo penal%2fDownloads%2fALUT&FolderCTID=&View=%7b6A9700C6-7248-4CD2-83F5- 268F2C176072%7d 3- Configurar el proyecto adecuadamente para vincular en sus propiedades lo siguiente: a) Linker -> Input -> Additional Dependencies OpenAL32.lib y Alut.lib b) C++ -> General -> Additional Include Directories C:.........OpenAL 1.1 SDKinclude c) Linker -> General -> Additional Library Directories C:.........OpenAL 1.1 SDKlibs 4- Colocar en el “system” correspondiente según versión (32 – 64 bits) la libreria dinámica OpenAL32.dll 5- Colocar en la ruta apropiada del VS Includealut.h y Libalut.lib,alut.dll
  • 7.
    Manipulación del Sonidoen Videojuegos. CONFIGURACIONES EN EL PROYECTO DEL JUEGO • Incluir en el archivo stdafx.h los encabezados: #include <AL/alut.h> #include <stdlib.h> • Incluir en el proyecto los archivos encargados de la manipulación de los sonidos (AudioManager.h y AudioManager.cpp) dentro del filtro Output. • Crear dentro del directorio DATA una carpeta para almacenar todos los archivos de sonidos. • Incluir en el tmain() luego de la inicialización del glut, la inicialización del alut, colocando la siguiente línea de código: alutInit(&argc, argv);
  • 8.
    Manipulación del Sonidoen Videojuegos. CONFIGURACIONES EN LOS ARCHIVOS XML • Modificar los archivos XML, añadiéndole el atributo correspondiente al sonido donde corresponda. • LEVEL: se debe añadir un atributo que indique el sonido de fondo del nivel. Si el juego presenta varias escenas, valorar si es necesario tener un sonido de fondo diferente para cada una. • PLAYER: se debe añadir un nuevo nivel que dependa jerárquicamente del PLAYER, donde se definan los archivos de sonidos correspondientes a las acciones que pueden realizar. OJO las acciones deben estar vinculados a los ESTADOS asociados con el input. Ejemplo: en el player-> caminar, correr, disparar, etc. • REGLAS: se debe añadir una etiqueta que indique el efecto sonoro que se va a reproducir cuando se realice una determinada acción, si aplica.
  • 9.
    Manipulación del Sonidoen Videojuegos. INTEGRACION EN EL PROYECTO Incluir en la estructura GAME un nuevo campo para el control del sonido en el juego: TSOUNDS mSounds; En el GAME_Init() anadir la llamada al Init del archivo de sonido: AudioManager_Init(&(lsGame->mSounds)); La llamada debe estar antes de los Init de las entidades del juego. En el GAME_Deinit() anadir la llamada al Deinit del archivo de sonido: AudioManager_Deinit(&(lsGame->mSounds)); La llamada debe estar despues de los Deinit de las entidades del juego. En las funciones encargadas de la lectura del XML, se debe usuar la función: AudioManager_Load(&(lsGame->mSounds),"Fondo.wav", true); Esta función carga en el buffer los sonidos del juego, asignadole un ID único a cada sonido. El último parámetro indica si es un sonido ciclico o no.
  • 10.
    Manipulación del Sonidoen Videojuegos. INTEGRACION EN EL PROYECTO Utilizar según corresponda las siguientes funciones: AudioManager_Play(&(sGame.mSounds),ID_Sound); AudioManager_Stop(&(sGame.mSounds),ID_Sound); Ejemplo: player al caminar En la función update del Player, colocar en las acciones asociadas al eGLKey_Left y eGLKey_Right la llamada a la función: AudioManager_Play(&(sGame.mSounds), lsPlayer->mySounds[eWalk]); Y en la condición que valida el STOP, incluir la llamada la función: AudioManager_Stop(&(sGame.mSounds), lsPlayer->mySounds[eWalk]);