Noticias

Aceleramos nuestro sistema de streaming de audio

Actualmente utilizamos OpenAL como para nuestro driver de audio, y gracias a la extensión AL_EXT_STATIC_BUFFER, que se ofrece al menos en MACOSX e iOS, hemos conseguido una ganancia del 2500% en el rendimiento a la hora de transferir datos de audio.

¿Qué es lo que ofrece esta extensión?

Básicamente la función: alBufferDataStatic, que permite pasarle directamente a OpenAL un buffer de memoria gestionado por nosotros, con lo que OpenAL no tiene que reservar memoria extra (el correspondiente malloc o realloc), ni hacer una copia de todos los datos (memcpy) en su propio buffer, consiguiendo, de esta manera una gran ganancia en el rendimiento.

Hemos visto en Internet una cierta polémica a la hora de usar esta función.

Por una parte es recomendada por Apple en su Technical Note: OpenAL FAQ for iPhone OS, pero hay mucha gente (en los foros de Apple) que parece no entender bien lo que hace esta función, con lo que hacen un mal uso de ella, y por lo tanto no obtienen los resultados deseados.

Un claro ejemplo de mal uso es pasarle a OpenAL un buffer de memoria (utilizando alBufferDataStatic) y liberarlo a continuación, (que es exactamente lo que hay que hacer cuando se utiliza alBufferData). Consiguiendo que se oiga ruido aleatorio por los altavoces, a veces incluso se escuchará correctamente durante un rato, hasta que esa memoria sea utilizada…

Algunas malas prácticas con el uso de esta función vienen recogidas en el blog de Ben Britten: alBufferDataStatic: why you should avoid it, que en nuestra opinión no dice que no se utilice, sino que no se utilice si no se sabe exactamente lo que se esta haciendo.

En cualquier caso, nosotros hemos llegado a la conclusión de que somos capaces de reservar un buffer de memoria y luego no olvidarnos de liberarlo, ni de usarlo después de haberlo liberado, por lo que nos arriesgaremos a usarlo ^_^

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *