The open, royalty-free API for hardware acoustic ray tracing. AcoustX defines what acoustic propagation hardware must do — not how any vendor builds it. Titles link one binary, target one header pair, and run on any conformant implementation. Intel's Sonoral™ is the first; the specification exists so it will not be the last.
acx.dll is written against all of them.acoustx/listener.h is the native surface: listener-out rendering, where the implementation traces, assembles the impulse response, and delivers ear-ready audio. acoustx/compat.h is the migration shim: source-out semantics matching the Steam-Audio-era model, where the title still owns its mix and the hardware accelerates what it can. Both link the same binary. Both hit the same Traversal Engine.
| Capability | listener.hnative · listener-out | compat.hshim · source-out |
|---|---|---|
| Hardware BVH traversal TE — 8-band ray payloads, path-length delay taps | ✓ | ✓ |
| Distance / air absorption & Doppler resolvers | ✓ | ✓ |
| Material coefficient fetch .ablx 48-preset library | ✓ | ✓ |
| Hardware UTD edge diffraction DU | ✓ | — |
| Binaural divergence BDU — Woodworth ITD / head-shadow ILD per-ear fork | ✓ | — |
| Codec bridge Atmos / DTS:X objects from the parametric domain | ✓ | — |
| Occlusion query callbacks | ✓ | — |
| Parametric reverb-zone hints | ✓ | — |
The split is principled, not promotional: everything listener-only exists downstream of the impulse response — and in the source-out model, the title, not the implementation, owns that stage. The moment an engine hands over the listener, the rest of the pipeline lights up.
One emitter, registered through each header. The native path hands the listener to the implementation and receives ear-ready output; the compat path keeps the title's own mixer and receives per-source filtered buffers — with hardware traversal already applied.
#include <acoustx/listener.h> /* native listener-out surface */ acxScene* scene = acxSceneCreate(ACX_SCENE_FROM_TLAS); acxListener* listener = acxListenerCreate(scene, &(acxListenerDesc){ .headRadiusM = 0.0875f, /* BDU runtime parameter */ .hrtfProfile = ACX_HRTF_DEVICE_DEFAULT, }); acxSource* engine = acxSourceRegister(scene, &(acxSourceDesc){ .position = { 4.2f, 1.1f, -7.6f }, .directivity = ACX_DIRECTIVITY_CARDIOID_SH, .bands = ACX_BANDS_OCTAVE_8, }); while (running) { acxSourceSetPosition(engine, world.enginePos); acxListenerSetPose(listener, cam.pos, cam.orient); acxSceneCommit(scene); /* IR lands within one audio block */ }
#include <acoustx/compat.h> /* source-out shim, Steam-Audio-era */ acxCompatContext* ctx = acxCompatInit(NULL); acxCompatSource* engine = acxCompatAddSource(ctx, &(acxCompatSourceDesc){ .position = { 4.2f, 1.1f, -7.6f }, .falloff = ACX_COMPAT_FALLOFF_INVERSE, .occlusion = ACX_COMPAT_OCCLUSION_RAYCAST, }); while (running) { acxCompatSetSourcePos(engine, world.enginePos); acxCompatSetListener(ctx, cam.pos, cam.orient); /* source-out: the title mixes. Hardware traversal, distance, air absorption and materials are already in the buffers. */ acxCompatProcess(ctx, inBufs, outBufs, frames); }
AcoustX was specified so that adoption never requires an audio-engine rewrite. The path is a cascade, and every stage ships.
compat.hThe shim mirrors source-out middleware semantics — sources, a listener, per-source processed buffers. For a Steam-Audio-era title this is a header swap and a link change, not a redesign. Raycast occlusion and falloff calls map one-to-one.
Identical audible output to the software path at 94% lower power — traversal, distance resolution and material filtering have left the CPU. No new content, no new bake, no gameplay risk. This is the stage most catalogs stay at, and that is fine.
listener.h per featureNative adoption is not all-or-nothing. Hand over the listener for cutscenes first; enable UTD diffraction on the levels that were baked for it; light up the codec bridge when the Atmos mix is ready. Both headers coexist in one process against one scene.
Listener-out end to end: hardware UTD, binaural divergence, occlusion callbacks, reverb-zone hints, objects encoded straight from the parametric domain. +9% power over compat — the entire physical acoustics feature set for nine percent.
There is no "AcoustX off" setting, because none is needed: a title that never links acx.dll never issues a source registration, the driver never maps the queues, and the traversal silicon's power domain never ungates. Absence of a caller is the power switch. Competitive titles that want the 2.9 ms raw path simply don't make the call.
The same content ported both ways through the same implementation (Sonoral, Core 500 tier). This comparison is a property of the API split, not of any one vendor's silicon — which is why it lives on this page.
| Path | Audible result | Power vs. software baseline | Feature ceiling |
|---|---|---|---|
| Software baseline middleware, CPU | Reference mix | 100% | Faked diffraction, per-source occlusion rays |
compat.h source-out shim |
Matches software output | −94% | Hardware traversal, distance, materials |
listener.h native listener-out |
Full physical acoustics | −94%, then +9% over compat | + UTD diffraction, binaural divergence, codec bridge |
Read the second row twice: the shim isn't a degraded mode, it's the same output for a twentieth of the power. The native premium buys physics the software path never had at any power.