Función SDL_QueueAudio
Sintaxis
int SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len);
Descripción
Pone en cola más audio en los dispositivos sin retrollamada.
Parámetros
- dev
- El ID del dispositivo al que pondremos audio en cola.
- data
- Los datos a poner en cola al dispositivo para su posterior reproducción.
- len
- El número de bytes (¡no muestras!) a los que apuntan los datos.
Valor de retorno
Devuelve 0 si tiene éxito o un código de error negativo si falla. Ver SDL_GetError.
Observaciones
Si se está buscando recuperar audio en cola de un dispositivo de captura sin retrollamada, se debe usar SDL_DequeueAudio() en su lugar. SDL_QueueAudio() devolverá -1 para significar un error si se usa con dispositivos de captura.
SDL ofrece dos formas de alimentar audio al dispositivo: se puede suministrar un callback que SDL dispare con cierta frecuencia para obtener más audio (método pull), o se puede no suministrar ningún callback, y entonces SDL esperará que se suministren datos a intervalos regulares (método push) con esta función.
No hay límites en la cantidad de datos que se puede poner en cola, salvo que se agote el espacio de direcciones. Los datos en cola se drenarán al dispositivo según sea necesario sin más intervención por su parte. Si el dispositivo necesita audio pero no hay suficiente en cola, reproducirá silencio para compensar la diferencia. Esto significa que se tendrán saltos en la reproducción de audio si no se ponen en cola datos suficientes de forma rutinaria.
Esta función copia los datos suministrados, por lo que es seguro liberarlos cuando la función retorna. Esta función es segura para subprocesos, pero poner en cola el mismo dispositivo desde dos subprocesos a la vez no garantiza qué búfer se pondrá en cola primero.
No se puede poner en cola audio en un dispositivo que está utilizando una retrollamada suministrada por la aplicación; hacerlo devuelve un error. Se debe utilizar la retrollamada de audio o poner audio en cola con esta función, pero no ambas.
No se debe llamar a SDL_LockAudio() en el dispositivo antes de ponerlo en cola; SDL maneja el bloqueo internamente para esta función.
Hay que tener en cuenta que SDL2 no soporta audio planar. Se tendrá que remuestrear desde formatos de audio planar a uno no planar (ver SDL_AudioFormat) antes de poner el audio en cola.