Ir al contenido

publicidad
publicidad

Foto

Curso MM: 11 Utilizando sonidos


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
No hay respuestas en este tema

#1

Escrito 15 agosto 2009 - 18:17

Utilizando sonidos

Con el sistema de win32 no se pueden ejecutar dos wavs a la vez, así que hay dos opciones:

- interrumpir el sonido actual para oir el nuevo,
- permitir que todos los sonidos se oigan hasta completarse y rechazar cualquier sonido que intente interrumpir el actual.

El mezclado de wavs es posible con Directx pero no lo usaremos. La función de win32 es ésta:

[code:1]BOOL PlaySound(LPCSTR szSound, HMODULE hModule, DWORD dwSound);[/code]

Los parámetros indican si se ejecuta desde un archivo o desde memoria, si un sonido puede ser interrumpido o repetido en bucle infinito, etc.

Si ejecutamos desde un archivo: el primer argumento es el nombre del archivo, el segundo es NULL, y el tercero indica la forma específica de ejecución. SND_FILENAME indica ejecución desde un archivo, SND_SYNC y SND_ASYNC si se ejecuta de forma síncrona (no se puede hacer nada en el juego hasta que termina) o asíncrona (el juego puede seguir mientras se ejecuta). Ejemplo:

[code:1]PlaySound("Boo.wav", NULL, SND_ASYNC | SND_FILENAME);[/code]

Otra bandera importante es SND_NOSTOP. Al incluirla el sonido no interrumpirá al que se esté ejecutando en ese momento. El problema es que puede que no se ejecute nunca. Si no se especifica, el sonido cortará al anterior para reproducirse.

La bandera SND_RESOURCE indica que ejecutamos el sonido desde un recurso en vez de un archivo. El parámetro hInstance de PlaySound() es un identificador de recurso. Ejemplo:

[code:1]PlaySound((LPCSTR)IDW_BOO, _hInstance, SND_ASYNC | SND_RESOURCE);[/code]

La bandera SND_LOOP hace que un sonido se repita hasta ser interrumpido por otro:

[code:1]PlaySound((LPCSTR)IDW_BACKBEAT, _hInstance, SND_ASYNC | SND_RESOURCE |
SND_LOOP);[/code]

Para parar un sonido: usando la bandera SND_PURGE con los parámetros usados para reproducir el sonido:

[code:1]PlaySound((LPCSTR)IDW_BACKBEAT, _hInstance, SND_PURGE | SND_RESOURCE);[/code]

Si queremos parar todos los sonidos simplemente pasamos NULL como primer argumento:

[code:1]PlaySound(NULL,NULL,SND_PURGE);[/code]

Ejemplo: Brainiac 2
Brainiac.h , Brainiac.cpp

Se utilizan sonidos al seleccionar casillas con el ratón y al comprobar si son parejas o no. Pocos cambios.

Código fuente


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad
publicidad