← Back

ofxSteamAudio

github.com/danoli3/ofxSteamAudio · @danoli3
OF 0.12 Releases Sound

ofxSteamAudio provides C++ wrappers for the Steam Audio C API to enable physics-based 3D audio in openFrameworks applications.

0 0 Last commit 2mo ago Created 6mo ago

README

ofxSteamAudio



Physics-based 3D audio for openFrameworks — Steam Audio 4.8.1 (Phonon C API)

RAII C++ wrappers covering the public Steam Audio C API, plus interactive examples that mirror Valve’s integration tests (core/src/itest).

ofxSteamAudio

Features



AreaWrapper typesSteam Audio itest
Context / memoryContextmemory, log
Audio buffersAudioBufferAudioBuffer
HRTFHRTFHRTFDatabase
BinauralBinauralEffectbinauraleffect
PanningPanningEffectpanningeffect
Virtual surroundVirtualSurroundEffectvirtualsurroundeffect
AmbisonicsEncode / Panning / Binaural / Rotation / Decodeambisonics
Direct pathDirectEffect + Simulatordirectsoundeffect, directsimulator
ReflectionsReflectionEffect, ReflectionMixerparametricreverb, reverbeffect, convolutioneffect
PathingPathEffect, probes, bakerspathing, probes
SceneScene, static / instanced meshscene, staticmesh, instancedmesh
Energy / IREnergyField, ImpulseResponse, Reconstructorenergyfield, impulseresponse
High-levelEnginemulti-source binaural demo
Also wraps: serialization, Embree device (x86_64), distance attenuation, air absorption, directivity, relative direction.

Layout



src/                    # wrappers (include ofxSteamAudio.h)
libs/steamaudio/        # headers + prebuilt libphonon (+ mysofa, pffft)
examples/
  simple-example/           # Binaural HRTF multi-source
  example-panning/          # Stereo panning
  example-ambisonics/       # Ambisonics encode → binaural
  example-virtual-surround/ # 5.1 → binaural
  example-direct/           # Occlusion + direct effect
  example-scene/            # Static + instanced meshes
  example-reflections/      # Parametric reverb
  example-pathing/          # Probe generation + path scaffolding
tests/api-tests/            # Headless coverage of all wrappers
.github/workflows/macos.yml # CI: macOS build + run tests


Quick start



#include "ofxSteamAudio.h"

ofxSteamAudio::Engine audio;

void setup() {
    audio.setup(44100, 512);
    int id = audio.addSource(glm::vec3(2, 0, 0));
    audio.setSourceFrequency(id, 220.0f);

    ofSoundStreamSettings s;
    s.numOutputChannels = 2;
    s.sampleRate = 44100;
    s.bufferSize = 512;
    s.setOutListener(this);
    soundStream.setup(s);
}

void update() {
    audio.setListener(cam);
    audio.updateSource(0, sourceWorldPos);
}

void audioOut(ofSoundBuffer& buffer) {
    audio.processAudio(buffer); // synthesizes tones + binaural spatialize
}


Low-level API (full control):

ofxSteamAudio::Context ctx;
ofxSteamAudio::HRTF hrtf;
ofxSteamAudio::BinauralEffect binaural;
// ctx.setup(); hrtf.create(ctx, audioSettings); binaural.create(ctx, audioSettings, hrtf);
// binaural.apply(direction, hrtf, monoIn.get(), stereoOut.get());


Building



Requires openFrameworks (tested with modern OF on macOS arm64/x86_64).

1. Get Steam Audio binaries



Prebuilt libs are not committed to git. Use the library manager:

./scripts/manage_libs.sh


MenuWhoWhat
1 Download from release tagConsumersPull libs-v4.8.1 assets (default install)
2 Build with apothecaryMaintainersStandalone apothecary only (no full OF)
3 PackageMaintainersWrite scripts/dist/steamaudio-.tar.gz
4 UploadMaintainersgh release upload to tag libs-v
5 Build + package + uploadMaintainersFull local pipeline for one platform
Non-interactive:

./scripts/download_libs.sh host          # this machine
./scripts/download_libs.sh osx
./scripts/build_libs.sh osx              # clones openframeworks/apothecary if needed
./scripts/package_libs.sh osx
./scripts/manage_libs.sh upload libs-v4.8.1
./scripts/manage_libs.sh list            # full platform matrix
./scripts/manage_libs.sh status


build_libs.sh does not need openFrameworks — only openframeworks/apothecary (APOTHECARY_DIR / auto-cache).

Platforms (OF ∩ Steam Audio + OF extras): osx, linux64, linuxaarch64, vs-x64, ios, android-\, emscripten-\, plus experimental/planned rows — see scripts/platforms.sh.

2. Build examples / tests



cd examples/simple-example && make -j
cd tests/api-tests && make -j Release && make RunRelease


Link notes (macOS)



addon_config.mk pulls libphonon (+ libmysofa / libpffft when present), zlib, Accelerate, AudioToolbox, CoreAudio. Default ray tracer (no Embree) works on Apple Silicon.

Platform tracking & releases



Live matrix: PLATFORM_STATUS.md (regenerated by CI / scripts).

./scripts/manage_libs.sh list          # platforms + GHA runners
./scripts/manage_libs.sh report        # local + release probe → PLATFORM_STATUS.md
./scripts/test_package.sh osx          # layout test (no OF)


WorkflowOF?Purpose
CINoProbe every release asset; download+test those present; write status (failures tracked, missing = warning)
CI optional OF jobYesDispatch with run_of_tests=true
Build Steam Audio libsNo — apothecary onlyBuild all CI-mapped platforms (continue-on-error); package successes; aggregate PLATFORM_STATUS.md; optional upload to libs-v
Maintainer release loop:

1. Actions → Build Steam Audio libs (apothecary) → Run
  • upload_release: true, libs_tag: libs-v4.8.1
  • Filter: all / full / experimental
2. Job matrix includes osx, linux64, linuxaarch64, vs-, ios, android-, emscripten-, tvos, planned Apple, etc. 3. Failures are OK — each platform writes status JSON; report job merges into PLATFORM_STATUS.md 4. Only successful .tar.gz files are uploaded to the release 5. CI then tracks which assets exist / pass package tests

Asset name: steamaudio-4.8.1-<package_id>.tar.gz

Steam Audio



License



Addon code: see LICENSE. Steam Audio: Apache 2.0 — see libs/steamaudio/license/.

Get this addon

Latest release

libs-v4.8.1 Steam Audio libs libs-v4.8.1 published 2mo ago
Prebuilt Steam Audio libs for ofxSteamAudio (apothecary-only).

Install: ./scripts/download_libs.sh host

Platform status



Matrix



PackageSupportCI runnerBuildPackage testRelease assetNotes
osxfullmacos-14failskippedmissingbuild_libs exit 1
linux64fullubuntu-22.04failskippedmissingbuild_libs exit 1
linuxaarch64fullubuntu-24.04-armfailskippedmissingbuild_libs exit 1
linuxarmv7lexperimentalnoneunknownunknownmissing
vs-x64fullwindows-2022failskippedmissingbuild_libs exit 1
vs-arm64experimentalwindows-11-armfailskippedmissingbuild_libs exit 1
vs-x86experimentalwindows-2022failskippedmissingbuild_libs exit 1
msys2experimentalwindows-2022failskippedmissingbuild_libs exit 1
iosfullmacos-14failskippedmissingbuild_libs exit 1
ios-simexperimentalmacos-14failskippedmissingbuild_libs exit 1
tvosexperimentalmacos-14failskippedmissingbuild_libs exit 1
android-arm64fullubuntu-22.04failskippedmissingbuild_libs exit 1
android-armv7fullubuntu-22.04failskippedmissingbuild_libs exit 1
android-x86experimentalubuntu-22.04failskippedmissingbuild_libs exit 1
android-x86_64experimentalubuntu-22.04failskippedmissingbuild_libs exit 1
emscripten-wasmexperimentalubuntu-22.04failskippedmissingbuild_libs exit 1
emscripten-wasm64experimentalubuntu-22.04failskippedmissingbuild_libs exit 1
watchosplannedmacos-14failskippedmissingbuild_libs exit 1
xrosplannedmacos-14failskippedmissingbuild_libs exit 1
`ca