A 2D acoustic simulator for predicting low-frequency directivity in PA systems.
LowFreq Sim lets live-sound and system engineers lay out subwoofer arrays and instantly see how they sum in the room — sound-pressure coverage, phase interference, and time alignment — so you can steer bass where you want it and keep it off the stage. Everything updates in real time as you drag sources, retime them, or flip polarity.
Built as a native desktop app with Tauri and a React + TypeScript front end.
Three coverage views
- SPL — relative sound-pressure heatmap, normalized to the loudest point on screen
- Phase — wavefront interference map showing peaks and troughs
- Time Spread — arrival-time alignment, from tight (green) to smeared (red)
Per-source control — position, gain (dB), delay (ms), polarity invert, mute/solo, and naming for every sub. Organize sources into colored groups with their own mute/solo.
Real-world array presets — drop in proven configurations and compare them instantly:
- Broadside, End-fire (quarter-wavelength steered), Gradient / Cardioid (single and 2×2)
- Inverted/cardioid stacks, Physical arc, Delay (electronically steered) arc
- L/R "power alley", Cardioid line, and optimized coupled lines of 2–5 subs (1.5 m spacing to suppress grating lobes)
Measurement mic — drop a virtual mic anywhere and read its live frequency-response spectrum.
Tunable environment — frequency, air temperature (speed of sound), venue dimensions, dynamic range, wavefront density, optional polar-plot overlay, and optional room-boundary reflections (reflection coefficient and bounce order).
Fast editing — drag to move, double-click to add, shift-click to multi-select, copy/cut/paste, 12-step undo, and save/load layouts locally.
- Tauri 2 (Rust) — native desktop shell and packaging
- React 19 + TypeScript — UI
- Vite 6 — dev server and bundler
- Tailwind CSS 4 — styling
- HTML5 Canvas for the real-time field rendering
Prerequisites: Node.js
npm install
npm run devThen open http://localhost:3000.
Prerequisites: Node.js and the Rust toolchain, plus Tauri's platform dependencies.
# run the native app in development
npm run tauri dev
# build a distributable (.app / .dmg on macOS)
npm run tauri build| Action | Shortcut |
|---|---|
| Select | Click · Shift-click to multi-select |
| Move | Drag |
| Add source | Double-click the canvas |
| Copy / Cut / Paste | Cmd/Ctrl + C / X / V |
| Remove | Delete / Backspace |
| Zoom | Scroll · or R / T |
| Undo | Controls panel (12 steps) |
Each source is summed at every point on a grid as a complex pressure phasor, accounting for distance attenuation, per-source delay and polarity, and the wavelength at the selected frequency. The speed of sound tracks air temperature (c = 331.3 + 0.606·T m/s), so retiming and spacing behave the way they do on a real site. The end-fire, gradient, and cardioid presets derive their spacing and delay from a quarter wavelength at the current frequency.
SPL values are relative — colors are normalized to the loudest point currently on screen, for comparing coverage within a configuration, not absolute SPL between setups.
MIT © 2026 ZDAudio