Dear list,
here's a new pre-release for the AoO multichannel audio streaming library. In the last two months, the library has been seen many improvements and has been used successfully in our Virtual Rehearsal Room project (see vrr.iem.at https://vrr.iem.at/).
Binaries for all common platforms (Windows, macOS, Linux, ARM boards) are available on Deken (search for "aoo"). The source code can be found here: https://git.iem.at/cm/aoo
See the help patches (aoo_send~-help.pd, aoo_receive~-help.pd, aoo_server.pd) for usage instructions.
If you want to stream between different home networks (without port forwarding), you can use [aoo_client] and connect to our public AoO server at the IEM (hostname: vrr.iem.at, port: 7077). You can easily set up your own AoO server by running a Pd patch containing [aoo_server <port>] on your web server.
---
Selected features:
# create audio networks of any topology with arbitrary ad-hoc connections # [aoo_send~] / [aoo_receive~] take a port number and ID, so multiple objects (within a single Pd instance) can operate on the same port. Additionally, you can have multiple objects across different Pd instances (using different port numbers). # [aoo_send~] can stream to several destinations simultaneously; # [aoo_receive~] can receive several AoO streams simultaneously, summing the signals # AoO is connectionless: streams can start/stop at any time, enabling a "message-based audio" approach. # AoO sinks can "invite" sources, i.e. ask them to send audio. The source may follow the invitation or decline it. # AoO sinks and sources can operate at different blocksizes and samplerates # the streaming format can be set independently for each source; currently only PCM (uncompressed) and Opus (compressed) are implemented, but this can be easily extended with the AoO codec plugin API. # audio encoding/decoding is multithreaded # adjustable resending mechanism for dropped packets # adjustable jitter buffer size. # [aoo_server] / [aoo_client] implement the UDP hole punching technique to establish peer2peer connections between different home networks. # AoO is actually a C++ library with a C interface, so it can be used in apps or embedded devices (like the ESP32). An implementation for Supercollider is already planned.
---
For questions, bug reports or feature requests, please open an issue at https://git.iem.at/cm/aoo/-/issues. We're very happy about any kind of feedback!
Christof