SDL_audio.h

Función SDL_LoadWAV_RW

Sintaxis

SDL_AudioSpec* SDL_LoadWAV_RW(SDL_RWops * src,
                              int freesrc,
                              SDL_AudioSpec * spec,
                              Uint8 ** audio_buf,
                              Uint32 * audio_len);

Descripción

Carga los datos de audio de un archivo WAV en la memoria.

Parámetros

src
La fuente de los datos WAVE.
freesrc
Si es distinto de cero, SDL siempre liberará la fuente de datos.
spec
Una estructura SDL_AudioSpec que será asignada con los detalles de formato del fichero wave.
audio_buf
Un puntero rellenado con los datos de audio, obtenido por la función.
audio_len
Un puntero asignado con la longitud del buffer de datos de audio en bytes.

Valor de retorno

Esta función, si se llama con éxito, devuelve spec, que se rellenará con el formato de datos de audio de los datos de la fuente wave. audio_buf se rellenará con un puntero a un búfer asignado que contiene los datos de audio, y audio_len se rellena con la longitud de ese búfer de audio en bytes.

Esta función devuelve NULL si el archivo .WAV no puede ser abierto, usa un formato de datos desconocido, o está corrupto; llame a SDL_GetError para más información.

Cuando la aplicación haya terminado con los datos devueltos en audio_buf, debe llamar a SDL_FreeWAV() para deshacerse de ellos.

Observaciones

La carga de un fichero WAVE requiere que src, spec, audio_buf y audio_len sean punteros válidos. Toda la porción de datos del fichero se carga en memoria y se descodifica si es necesario.

Si freesrc es distinto de cero, la fuente de datos se cierra automáticamente y se libera antes de que la función regrese.

Los formatos soportados son archivos RIFF WAVE con los formatos PCM (8, 16, 24 y 32 bits), IEEE Float (32 bits), Microsoft ADPCM e IMA ADPCM (4 bits), y A-law y mu-law (8 bits). Otros formatos no están soportados actualmente y causan un error.

Si esta función tiene éxito, el puntero devuelto por ella es igual a spec y el puntero a los datos de audio asignados por la función se escribe en audio_buf y su longitud en bytes en audio_len. Los miembros de SDL_AudioSpec freq, channels y format se establecen a los valores de los datos de audio en el buffer. El miembro samples se establece a un valor razonable por defecto y todos los demás se establecen a cero.

Es necesario usar SDL_FreeWAV() para liberar los datos de audio devueltos en audio_buf cuando ya no se usen.

Debido a la falta de especificación del formato .WAV, hay muchos archivos problemáticos en la vida real que causan problemas con los decodificadores estrictos. Para proporcionar compatibilidad con estos archivos, este decodificador es indulgente con respecto al truncamiento del archivo, el trozo fact y el tamaño del trozo RIFF. Las sugerencias SDL_HINT_WAVE_RIFF_CHUNK_SIZE, SDL_HINT_WAVE_TRUNCATION, y SDL_HINT_WAVE_FACT_CHUNK pueden ser usadas para ajustar el comportamiento del proceso de carga.

Cualquier archivo que no sea válido (debido a truncamiento, corrupción o valores erróneos en las cabeceras), demasiado grande o no soportado provoca un error. Además, cualquier error crítico de E/S de la fuente de datos terminará el proceso de carga con un error. La función devuelve NULL en caso de error y en todos los casos (con la excepción de que src sea NULL), se establecerá un mensaje de error apropiado.

Es necesario que la fuente de datos admita la búsqueda.

Ejemplo:

SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len);

Hay que tener en cuenta que la macro SDL_LoadWAV hace esto mismo, pero de una forma menos desordenada:

SDL_LoadWAV("sample.wav", &spec, &buf, &len);