Zerr* is a channel-based spatialization concept for an arbitrary audio source. It distributes audio signals to multiple loudspeakers, based only on the signals’ inherent features as well as the properties of the speaker array setup. Although various aspects of the algorithm can be tuned, also during runtime, the audio signal itself defines the spatial distribution. Depending on the parametrization, the approach can alter the original signal significantly, similar to modulation and distortion effects. Please check the conference paper, "Autogenous Spatialization for Arbitrary Loudspeaker Setups" for design details.
Zerr* is intended to be available in various creative coding environments. The currently supported environments are listed below:
| Linux | MacOS(M1) | MacOS(Intel) | Windows | |
|---|---|---|---|---|
| Puredata | ✅ | ✅ | ✅ | ✅ |
| JACK | 🛠️ | 🛠️ | 🛠️ | 🛠️ |
| SuperCollider | ⏳ | ⏳ | ⏳ | ⏳ |
| Max/MSP | ➖ | ✅ | ✅ | 🛠️ |
✅: Fully Supported
🛠️: In Development
⏳: Planned
➖: Not available
You can download the precompiled version of each environment and system from Releases. Please check the readme of each environment for detail instructions.
Otherwise, you can also build it for your own machine.
-
Clone this repo and initialize the submodules( pd-lib-builder, min-devkit )
git clone --recurse-submodules git@github.com:ringbuffer-org/Zerr.git && cd Zerr
- Zerr* uses Conan for dependency management, please refer to its documentation for details
- The core library of Zerr* depends only on yaml-cpp and fftw3. Both are declared once in the root
conanfile.txtand resolved into a single sharedbuild/folder that every target consumes — the core and Max/MSP viabuild/conan_toolchain.cmake, PureData viabuild/conandeps.mk
# from the repo root; pick the profile matching your host
conan install . --output-folder=build --build=missing \
-pr:h=profiles/macos -pr:b=profiles/macos- Committed profiles live in
profiles/(macos,linux,mingw), so dependency resolution is reproducible instead of depending on each machine's~/.conan2default. Recipe revisions are pinned inconanfile.txtbecause both libraries need a ConanCenter revision that supports CMake 4. Readprofiles/macosbefore changing either — it records which settings are deliberately not pinned, and why - The macOS deployment target is set in
core/CMakeLists.txt(andmaxmsp/CMakeLists.txt), not via the Conan profile — see the comment inprofiles/macosfor the reasoning ./build.shresolves dependencies automatically on first use, so the command above is only needed for a manual or non-default build../build.sh depsre-runs just the resolve step, and./build.sh -c depsdiscards it- Conan is only required when dependencies actually need resolving; a tree with a populated
build/folder still builds without it - You can also edit the paths in Makefile/CMakeLists.txt to point to your own
-
Make sure you have installed Puredata. Building pd externals depends on the Puredata-API (m_pd.h)
-
Build/Install with following commands
# build puredta externals
./build.sh puredata
# build and install puredata package
./build.sh -i puredatabuild.sh runs on Windows as well, from an MSYS2 MINGW64 or Git Bash shell. It detects the host
and selects profiles/mingw, pins CMake to the MinGW Makefiles generator — without that, CMake
picks Visual Studio whenever one is installed and compiles with MSVC against a MinGW toolchain — and
uses mingw32-make in preference to the MSYS make. There is no .bat/PowerShell equivalent;
native cmd.exe is not supported.
# in an MSYS2 MINGW64 shell, with MinGW-w64 gcc 13 on PATH
./build.sh deps
./build.sh core
./build.sh puredatapd-lib-builder needs to find your Pd installation for m_pd.h; set PDDIR if it does not locate it
on its own.
Max/MSP cannot be built on Windows from this script — a .mxe64 requires an MSVC toolchain, whose
runtime and C++ ABI cannot link against the MinGW-built libzerr_core.a that profiles/mingw
produces. ./build.sh maxmsp reports this and exits rather than failing inside Min-DevKit. See
docs/design/dependency-fallbacks.md §3.7.
# build Jack client
./build.sh jack