SDL_mixer.h

Función Mix_HookMusic

Sintaxis

void Mix_HookMusic(void (SDLCALL *mix_func)(void *udata, Uint8 *stream, int len), void *arg);

Descripción

Añade tu propio reproductor de música o una función de mezclador adicional.

Parámetros

mix_func
La función de retrollamada que se convertirá en el nuevo callback post-mix.
arg
Un puntero que se pasa, intacto, a la llamada de retorno.

Observaciones

Funciona de forma parecida a Mix_SetPostMix(), pero tiene algunas diferencias cruciales. Hay que tener en cuenta que una aplicación puede utilizar esto y Mix_SetPostMix() al mismo tiempo. Esto permite a una aplicación reemplazar la reproducción de música incorporada, ya sea con su propio decodificador de música o con algún tipo de salida de audio generada proceduralmente.

La retrollamada suministrada se disparará cada vez que SDL_mixer se prepare para suministrar más datos al dispositivo de audio. Esto se ejecuta dentro de una retrollamada de audio SDL, por lo que es importante que regrese rápidamente, o podría haber problemas en la reproducción de audio.

Ejecutar esta retrollamada es lo primero que SDL_mixer hará cuando comience a mezclar más audio. El buffer contendrá silencio al entrar, por lo que la retrollamada no necesita mezclar en los datos existentes o inicializar el buffer.

Hay que tener en cuenta que mientras se establece una retrollamada a través de esta función, SDL_mixer no mezclará ninguna música en reproducción; en su lugar se utiliza esta retrollamada. Para desactivarla (y así volver a activar la reproducción de música incorporada) llamar a esta función con una retrollamada NULL.

Los datos escritos por la retrollamada están en el formato en el que se abrió el dispositivo de audio, y a la vuelta de la retrollamada, SDL_mixer mezclará cualquier fragmento en reproducción (pero no música) en el buffer. La retrollamada no puede redimensionar el búfer (por lo que se debe estar preparado para proporcionar exactamente la cantidad de datos demandados o dejarlo como silencio).

El puntero arg suministrado aquí se pasa a la retrollamada tal cual, para cualquier cosa que quiera hacer con él (realizar un seguimiento de algún estado en curso, ajustes, etc).

Como solo hay un "canal" de música mezclado, solo hay una retrollamada disponible. Si se necesita mezclar múltiples entradas, hay que manejarlas desde una única función.