SDL_mixer.h

Función Mix_OpenAudio

Sintaxis

int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize);

Descripción

Abre el dispositivo de audio predeterminado para la reproducción.

Parámetros

frecuency
La frecuencia a la que se reproducirá el audio (en Hz).
format
Formato de audio, uno de los valores AUDIO_* de SDL.
channels
Número de canales (1 es mono, 2 es estéreo, etc.).
chunksize
Tamaño del búfer de audio en FRAMES de muestra (muestras totales divididas por el recuento de canales).

Valor de retorno

Devuelve 0 si tiene éxito o -1 si falla.

Observaciones

Un dispositivo de audio es lo que genera sonido, por lo que la aplicación debe abrir uno para hacer ruido.

Esta función comprobará si el sistema de audio de SDL está inicializado, y si no, lo inicializará llamando a SDL_Init(SDL_INIT_AUDIO). Se puede (y se recomienda) inicializarlo antes de llamar a esta función, ya que esto le da al programa más control sobre el proceso.

Esta función puede cubrir todas las necesidades de una aplicación, pero para aquellos que necesitan más flexibilidad, la versión más potente de esta función es Mix_OpenAudioDevice(). Esta función es equivalente a llamar a:

Mix_OpenAudioDevice(frequency, format, nchannels, chunksize, NULL,
                    SDL_AUDIO_ALLOW_FREQUENCY_CHANGE |
                    SDL_AUDIO_ALLOW_CHANNELS_CHANGE);

Si no se está particularmente preocupado por los detalles del dispositivo de audio, y los datos no están en un formato específico, los valores que se utilicen aquí pueden ser simplemente valores predeterminados razonables. SDL_mixer convertirá los datos de audio que le proporciones al formato correcto bajo demanda.

Dicho esto, si se tiene el control de los datos de audio y se conoce su formato de antemano, se puede ahorrar tiempo de CPU abriendo el dispositivo de audio en ese formato exacto para que SDL_mixer no tenga que gastar tiempo convirtiendo nada entre bastidores, y pueda simplemente pasar los datos directamente al hardware. En algunas plataformas, donde el hardware sólo soporta configuraciones específicas, puede que se tenga que tener cuidado para que todo coincida, pero datos propios son a menudo más fáciles de controlar, así que es mejor intentar abrir el dispositivo para lo que se necesite.

La otra razón para preocuparse por formatos específicos es si se planea tocar el búfer de mezcla directamente (con Mix_SetPostMix, un efecto registrado, o Mix_HookMusic), puede que se tenga código que espere que esté en un formato específico, y se debería especificar aquí.

La frecuencia del dispositivo de audio se especifica en Hz; en los tiempos modernos, 48000 es a menudo un valor predeterminado razonable.

El formato del dispositivo de audio es una de las constantes AUDIO_* de SDL. AUDIO_S16SYS (audio de 16 bits) es probablemente un valor por defecto seguro. Los sistemas más modernos pueden preferir AUDIO_F32SYS (audio de 32 bits en coma flotante).

Los canales del dispositivo de audio suelen ser 1 para salida mono, o 2 para estéreo, pero el valiente puede probar configuraciones de sonido envolvente con 4 (cuádruple), 6 (5.1), 7 (6.1) u 8 (7.1).

El tamaño del chunk del dispositivo de audio es el número de fotogramas de muestra (una muestra por fotograma para salida mono, dos muestras por fotograma en una configuración estéreo, etc.) que se introducen en el dispositivo a la vez. Cuanto menor sea el número, menor será la latencia, pero se corre el riesgo de que se produzcan caídas si es demasiado bajo. 2048 suele ser un valor por defecto razonable, pero la aplicación podría experimentar con 1024 o 4096.

Sólo se puede tener abierto un dispositivo de audio a la vez; si se quiere cambiar un ajuste, se debe cerrar el dispositivo y volver a abrirlo, algo que no se puede hacer sin problemas durante la reproducción.

Esta función no permite seleccionar un dispositivo de audio específico en el sistema, siempre elige el mejor predeterminado que puede (que, en muchos casos, es exactamente lo que se quiere de todos modos). Si se debe elegir un dispositivo específico, se puede hacer con Mix_OpenAudioDevice() en su lugar.

Si esta función reporta éxito, ¡se está listo para empezar a hacer ruido! Se pueden cargar algunos datos de audio y empezar a tocar.

La aplicación puede utilizar Mix_QuerySpec() para determinar la configuración final del dispositivo.

Cuando se termine con un dispositivo de audio, probablemente al final del programa, la aplicación debe deshacerse del dispositivo con Mix_CloseAudio().