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 ^_^

Nueva versión de BrainWave

Finalmente hemos actualizado BrainWave, nuestra librería de audio 3D. Las mejoras en esta nueva versión incluyen:

  • Streaming de audio (AU / SND, CAFF, AIFF, WAVE, OGG).
  • Mejoras y optimizaciones en el sistema de codecs (signed/unsigned integer 8, 16, 24, 32, 64 bits, float 32, 64 bits, A-Law, MU-Law, IMA-ADPCM, MS-ADPCM. Big Endian y Little Endian. Mono y Stereo).
  • Corregidos algunos pequeños bugs.

Embedded Tremor

Today we embedded a reduced subset of Tremor library, an optimized integer-only implementation of the OGG Vorbis decoder, thought for embedded devices.

Then, now we have our fourth optional library:

  • With OGG Vorbis embedded.
  • With Tremor embedded.
  • Without OGG Vorbis nor Tremor embedded, that permits you to link with the original libraries or your own implementation.
  • Other one without any OGG Vorbis support (small size).

This version takes only 97 KB in size.

Embedded OGG Vorbis

We are noticed that there are some people who are bothered with the fact of have to link with multiple libraries (libogg, libvorbis and libvorbisfile) only for have support for another audio format.

For this reason we made a reduced ogg vorbis library subset only for decode it. And then we included this code inside BrainWave. We said reduced because it is only 135 kb in size.

Note that the sizes of these libraries are (MinGW GCC 4.4.1):
  • libogg_static: 15 KB
  • libvorbis_static: 1313KB
  • libvorbisfile_static: 28 KB
Total: 1356 KB
Due to the fact that there can be some people that maybe want to use these 3 libs for his own purposes, or because there will be some people that maybe don’t want ogg support at all, we made three separated libraries:
  • One with OGG Vorbis embedded
  • Other one without OGG Vorbis embedded that permits you to link with the original libraries.
  • Other one without any OGG Vorbis support.
In this way, the BrainWave users can select the best choice for his app.

Added .AU sound file format

We are noticed about some people needs support for .AU files on MACOS (or .SND files on NeXT or some *NIX systems). For this reason we added support for this file format.

Adding this format we have realized that the system of codecs could be improved, shortly we will update it.

Congratulations! Now we have another common audio file format for BrainWave and we will have an easiest audio codec system.

Easy 3D Sound System

BrainWave  incorporates  a simple system to position sounds in a 3D space:

First you must define the radius of the sphere, or spheroid, which wraps the listener.

Out of the defined spheroid, the listener will not listen anything.

Later you must define the position of the sounds:

Finally you can change the position of the listener (default 0, 0, 0) and the position of the sound objects that appear in the screen.