| Artículos | 01 ABR 1995

Aplicaciones Windows con sonido incorporado

Tags: Histórico
Las API permiten programar efectos multimedia
Jaime Peña.

Actualmente, el mundo multimedia no se ha extendido al ámbito de la programación de aplicaciones de carácter general. Aprenda a crear programas Windows que incluyen sonido digitalizado.

Las aplicaciones multimedia hacen un uso intensivo de animaciones, vídeo, música y sonido digitalizado. Su inclusión en aplicaciones Windows está, sin lugar a dudas, en la vanguardia de la programación. Aplicaciones como Microsoft Multimedia Viewer, Media Developer, Asimetrix ToolBook y, en menor medida, otras como Lotus SmartCam, ponen en nuestras manos valiosísimos atajos para grandes proyectos.

Sin llegar tan lejos, y ateniéndonos exclusivamente a la inclusión de sonido digital, en las API de Win16, Win32 y Win32s, encontramos el modo de programar efectos multimedia en nuestras aplicaciones tradicionales.

La inclusión de efectos sonoros muy simples se logra mediante la función MessageBeep, que gestiona el altavoz del ordenador, pero es, desde luego, demasiado poco, demasiado pobre para los tiempos que corren. Cuando ya no es nada extraño encontrar tarjetas de sonido en los ordenadores es recomendable incorporar sonidos diversos, incluyendo voces de aviso, ayudas, indicaciones y demás.

Presentaremos los modos de incluir y ejecutar archivos WAV, que es el estándar de sonido digital bajo Windows. Repasaremos la función motriz de todo ello y lo ilustraremos con una breve aplicación que nos dará mensajes sonoros (leídos, si lo prefiere) de las diversas opciones de menú, clics sobre la ventana de la aplicación y ayuda sobre el uso con voz humana.

¿Dónde guardar los sonidos?

Para que una aplicación Windows pueda localizar y, en su caso, reproducir sonidos digitalizados (formato WAV), debe cargar previamente su contenido. A diferencia de lo que puede ocurrir con textos expuestos en una ventana, los sonidos digitalizados son como otros recursos generados externamente.

Inicialmente, los sonidos digitalizados no son creados ni tratados por los editores de recursos tradicionales (véase Resource Workshop de Borland, App Studio de Microsoft, Resource Toolkit o Resource Studio de Symantec u otros), es más, hay un mutismo casi absoluto acerca de su tratamiento como recursos Windows. Se crean por medio de un hardware específico y se deben guardar en archivos .WAV, compatibles con la norma Windows de sonido digital. Para ser reproducidos por una aplicación caben tres posibilidades. Primera, insertarlos en el archivo de recursos de la aplicación. Segunda, insertarlos en una biblioteca de enlace dinámico (DLL). Y, tercera, leer su contenido, directamente, del archivo WAV.

El primero de los métodos (incluir el sonido en el archivo de recursos) es el más simple de implementar. Aunque raramente documentado, en un archivo de recursos se puede incluir uno tipo WAVE, de la misma manera que incluimos un BITMAP o un CURSOR o uno tipo ICON. Todos ellos tienen en común que inicialmente se encuentran en un archivo externo y se integran (después del enlazado) en el ejecutable final. Su sintaxis es muy simple:

recurso_id wave nombre.wav

por ejemplo:

entrada wave saludo.wav

en donde ENTRADA es el identificador del recurso que utilizaremos en el código fuente, WAVE es la palabra clave del tipo de recurso y SALUDO.WAV es el nombre del archivo de sonido digitalizado.

La solución no es despreciable, desde luego será muy útil en archivos de sonido digitalizado de pequeña entidad. El problema se nos puede presentar con archivos digitalizados de gran magnitud (o cuando hay un gran número de ellos). Téngase en cuenta que las dimensiones de un WAV crecen enormemente con el tiempo y con características innatas, como la frecuencia de muestreo en la grabación. Algunos datos son recogidos en la tabla de la figura 1.

Microsoft no recomienda archivos WAV de más de 100 KB, lo que da para unos 9 segundos de grabación sonora monoaural a 11 kHz, calidad suficientemente aceptable para mensajes de grabación de voz (advierta que se pueden incluir más de 16 horas de grabación de estas características en un CD-ROM; mientras que sólo hay capacidad para poco más de una hora de grabación de la máxima calidad). En tales casos, no será extraño preferir que el sonido digitalizado sea mantenido al margen del ejecutable en sí. De ahí la importancia de los otras dos posibilidades.

Si se incluyen en una biblioteca de enlace dinámico (DLL), se tendrá la ventaja de hacerlos accesibles a múltiples aplicaciones simultáneamente. De hecho, no es descabellado pensar en una especie de diccionario de sonidos de carácter general para nuestras aplicaciones y, complementariamente, usar otros específicos insertos en el ejecutable (vía archivo de recursos).

Finalmente, la tercera opción, leerlos directamente desde un archivo WAV, es la solución más rápida para el programador. Su inconveniente vendrá dado (en programas de cierta entidad) porque deberemos tratar con un grupo importante de archivos, lo que no siempre es vistoso, ni recomendable. De todas formas, es una cuestión de diseño de la aplicación y ahí los gustos juegan un papel importante.

La función sndPlaySound

Para tratar todas las formas de cargar y ejecutar sonidos digitalizados tipo WAV, se usa la función sndPlaySound. Una función alternativa (y mejor implementada) es la denominada PlaySound, pero sólo está disponible en el API Win32 y en el subconjunto Win32s. Ambas funciones se explican detalladamente en recuadros adjuntos a este artículo. Si analizamos la estructura de la función sndPlaySound veremos que inicialmente parece haber sido diseñada para dar acceso fácil a archivos WAV. Sólo usando el modificador SND_MEMORY, en su segundo parámetro, podemos ejecutar sonidos cargados previamente en memoria, bien sea a través de la carga previa de un recurso, bien sea leyendo previamente los datos de un archivo.

Nótese que si se encuentran en una DLL, el proceso será el mismo que en el caso de incluirse en el archivo de recursos de la propia aplicación, sólo cambiaría el método de acceso al recursos. En cuyo caso deberíamos pasar como handle de la instancia, en la función LoadResource, el de la librería cargada mediante LoadLibrary (función del API de Windows).

Se puede hacer sonar el WAV en modo síncrono y asíncrono. Si es en modo síncrono (flag SND_SYNC), la función retorna una vez iniciada la ejecución, pudiéndose seguir con el programa. Si se ejecuta en modo asíncrono (flag SND_ASYNC), no devolverá el control hasta finalizar la ejecución del sonido. Esto tiene importancia a la hora de liberar de memoria los datos del WAV, ya que si se hace antes de finalizar, riesgo que corremos en el modo síncrono, podremos provocar un error irrecuperable (los temidos UAE).

Ejecución de archivos WAV

Hemos hablado de los tres modos posibles de ejecutar sonido digitalizado de archivos WAV. También hemos dado un breve repaso a la función sndPlaySound, que es la encargada de realizar la ejecución en cualquiera de las tres formas. Ahora veremos ejemplos de cómo llevar a cabo el procedimiento de carga de datos (o indicación de dónde se pueden encontrar) y de cómo hacer sonar el sonido en nuestra aplicación.

Comencemos por la ejecución de un WAV leído directamente del disco (contenido en un archivo .WAV). La función sndPlaySound nos lo pone realmente sencillo; el primer parámetro de la función debe ser el nombre del archivo .WAV (su ruta completa si es que no se encuentra en la secuencia de búsquedas de Windows).

Lo normal es que el archivo WAV se encuentre en el directorio de Windows o en el de la aplicación, así sólo deberemos indicar su nombre y extensión. El segundo parámetro de la función deberá tener los flags que indican cómo ejecutar el archivo de sonido. Lo más habitual es especificar que sea asíncrono y que no se ejecute ningún otro sonido por defecto, en caso de que n

Contenidos recomendados...

Comentar
Para comentar, es necesario iniciar sesión
Se muestran 0 comentarios
X

Uso de cookies

Esta web utiliza cookies técnicas, de personalización y análisis, propias y de terceros, para facilitarle la navegación de forma anónima y analizar estadísticas del uso de la web. Consideramos que si continúa navegando, acepta su uso. Obtener más información