Ver Mensaje Individual
  #2  
Antiguo 27-07-2006
dicatek dicatek is offline
Miembro
 
Registrado: jun 2006
Posts: 46
Reputación: 0
dicatek Va por buen camino
Lección1 Un sonido en una posición

LECCIÓN1
En este primer tutorial aprenderás a reproducir un único archivo de sonido usando OpenAL.
Primero ejecutamos Delphi e iniciamos una nueva aplicación (new aplication). A continuación, añadimos openal a la claúsula uses.

En la sección var, añadimos los siguientes valores:
Código Delphi [-]
buffer : TALuint;
source : TALuint;
sourcepos: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0 );
sourcevel: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0 );
listenerpos: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0);
listenervel: array [0..2] of TALfloat= ( 0.0, 0.0, 0.0);
listenerori: array [0..5] of TALfloat= ( 0.0, 0.0, -1.0, 0.0, 1.0, 0.0);
La variable buffer será utilizada para almacenar el sonido que vamos a reproducir. Las variables source(...) serán utilizadas para describir dónde y cómo será reproducido el sonido. Las variables listener(...) se usarán para describir dónde será oído el archivo en el espacio (3D). Ahora dejaremos el sonido, al centro del espacio (3D).

Antes que OpenAL sea activo para reproducir un sonido, es necesario, iniciarlo. Por lo tanto, el siguiente código debe de añadirse en los forms de tu aplicación en el evento oncreate.
Código Delphi [-]
var
argv: array of PalByte;
format: TALEnum;
size: TALSizei;
freq: TALSizei;
loop: TALInt;
data: TALVoid;
Primero debes inicializar la libreria OpenAL en tus forms en el evento oncreate.
Código Delphi [-]
InitOpenAL;
Después en el evento de los forms oncreate, debes inicializarlo como esto. Automáticamente escoge el mejor hardware de tu ordenador.
Código Delphi [-]
AlutInit(nil,argv);
A continuación, debes crear un buffer para almacenar el archivo de sonido .wav. Una vez el archivo .wav es cargado en el buffer, también se puede descargar para liberar memoria.
Código Delphi [-]
AlGenBuffers(1, @buffer);
AlutLoadWavFile(’ding.wav’, format, data, size, freq, loop);
AlBufferData(buffer, format, data, size, freq);
AlutUnloadWav(format, data, size, freq);
Si tu quieres sentir el sonido, tienes que decir dónde se encuentra del espacio (3D), cuál es su volumen, si tiene bucle...
Código Delphi [-]
AlGenSources(1, @source);
AlSourcei ( source, AL_BUFFER, buffer);
AlSourcef ( source, AL_PITCH, 1.0 );
AlSourcef ( source, AL_GAIN, 1.0 );
AlSourcefv ( source, AL_POSITION, @sourcepos);
AlSourcefv ( source, AL_VELOCITY, @sourcevel);
AlSourcei ( source, AL_LOOPING, loop);
Donde AL_PITCH puede hacer el sonido más agudo.
Con AL_GAIN puedes especificar que volumen tendrá el sonido reproducido.
El paso siguiente es especificar cuando se oirá el sonido. Esto puede hacerse cuando la camara lo localice o cuando el objeto represente al jugador.
Código Delphi [-]
AlListenerfv ( AL_POSITION, @listenerpos);
AlListenerfv ( AL_VELOCITY, @listenervel);
AlListenerfv ( AL_ORIENTATION, @listenerori);
En este momento, tu aplicación está a punto para empezar a reproducir algunos sonidos.
Añade al form de tu aplicación, un botón llamado Reproducir, y añade el siguiente código al evento onclick:
Código Delphi [-]
AlSourcePlay(source);
Repita dos veces el procedimiento anterior con dos botones llamados Detener y pausar y con su código respectivo, al evento onclick:
AlSourceStop(source); Para detener.
AlSourcePause(source); Para pausar.

Finalmente, antes de cerrar la aplicación y con el propósito de liberar memoria puedes meter el siguiente código al evento destroy, de tus forms:
Código Delphi [-]
AlDeleteBuffers(1, @buffer);
AlDeleteSources(1, @source);
AlutExit();
Ahora ya estas preparado para ejecutar tu primera aplicación OpenAL. Tan rápido como puedas, prueba tu programa pulsando en los botones: Reproducir, detener o pausar.
Si quieres reproducir tu sonido en bucle, basta con cambiar la siguiente línea de código.
De:
Código Delphi [-]
AlSourcei ( source, AL_LOOPING, loop );

A:
Código Delphi [-]
AlSourcei ( source, AL_LOOPING, AL_TRUE );
Prueba en cambiar los valores del pitch y la ganancia (GAIN) para comprobar qué ocurre. Prueba tambien de cambiar la posición (sourcepos) por otros valores.
Lección1

Escrito por Noeska.
Traducido por Gerard Turmo.
Corregido por ..............................

Última edición por dicatek fecha: 27-07-2006 a las 01:02:14.
Responder Con Cita