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).
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