Inspiration

Illegal logging almost never gets caught in the act — rangers usually find the stumps days later, long after the crew and the truck are gone. Meanwhile, conservation acoustics already has a quiet, elegant tool for this: bioacoustic indices like NDSI, which compress an entire soundscape into a single "how healthy is this ecosystem right now" number, and TDoA multilateration, the same triangulation math behind lightning-detection networks and gunshot-detection systems like ShotSpotter. Nobody had put those two ideas in one lightweight, deployable dashboard. That's AcoustoPulse.

What it does

AcoustoPulse listens to an audio feed — a live microphone or one of three built-in reference soundscapes — and does two things continuously: Scores ecosystem health in real time with the Normalized Difference Soundscape Index, comparing biological activity (2–8 kHz: birds, insects) against human noise (1–2 kHz: engines, machinery) on a live FFT. Localizes threats the instant they happen. When a sharp anthropogenic spike hits — a chainsaw starting up — three sensor nodes each timestamp the event a few milliseconds apart. AcoustoPulse solves that timing difference for an actual GPS coordinate, drops it on a live map with an accuracy radius, logs the incident, and lets you export the whole session as a JSON report a ranger could act on.

How we built it

The whole stack is Next.js 14 (App Router, TypeScript), Tailwind, and the Web Audio API — no backend, everything runs client-side. audioEngine.ts owns an 8192-point FFT AnalyserNode, sums frequency bins into the anthrophony/biophony bands to compute NDSI every frame, and runs an adaptive rolling-baseline detector to flag transients. All three demo tracks are synthesized live from oscillators and filtered noise — no audio files, no network calls. tdoaSolver.ts projects sensor GPS coordinates into a local flat-earth plane, converts the arrival-time deltas into range differences, and solves the resulting 2-hyperbola intersection with Gauss-Newton least squares — plus a GDOP-based accuracy estimate from the solution's Jacobian. UI: a hand-rolled canvas spectrogram waterfall, an SVG speedometer for NDSI, and a custom SVG "radar" map for the sensor array — all built to be dependency-free.

Challenges we ran into

Fake threat vs. real threat: a droning tractor and a sudden chainsaw cut both spike the anthrophony band — but only one should fire an alert every time it's heard. We solved it with an adaptive EMA baseline instead of a fixed threshold, so sustained noise stops re-triggering while sharp transients still do. Making the TDoA fix actually real: it would've been easy to fake a pin on a map. Instead we seed a ground-truth location, simulate realistic clock jitter across three nodes, and let the solver recover it independently — which meant debugging Gauss-Newton convergence and numerical stability near near-collinear sensor geometry. Demo reliability over features: we dropped Mapbox/Leaflet for the map because both need an API key or live tile access, which is exactly the kind of thing that dies on conference wifi. A custom offline SVG map, sharing the solver's own projection math, was the more defensible engineering call.

Accomplishments that we're proud of

The TDoA localization is a genuine live solve, not an animated pin — same for NDSI, which is computed directly off raw FFT bins every frame. Zero external dependencies at demo time: no audio assets, no map tiles, no API keys — it cannot fail on bad wifi. A complete signal chain, spectrum in and actionable coordinates out: waveform → FFT → NDSI → transient detection → TDoA fix → exportable incident report. The production build passes strict TypeScript and ESLint with zero warnings.

What we learned

NDSI is a deceptively simple idea that does a lot of work — one ratio, real-time, tells you what would otherwise take a trained ear. TDoA is easy on paper (two equations, two unknowns) and genuinely fragile in practice — sensor geometry, timing jitter, and near-degenerate cases all matter, which is why real systems use more than three sensors. The Web Audio API is a legitimate DSP environment on its own — FFT extraction and procedural audio synthesis, no backend required. Boring reliability decisions (skip the mapping SDK, pin a dependency version) often matter more for a live demo than any single algorithm.

What's next for AcoustoPulse

Move from a simulated 3-node array to a real hardware reference design (microphone + GPS + low-power radio) for an actual field pilot. Generalize the solver from 3 to N sensors for better accuracy in dense canopy where sound doesn't travel in a straight line. Add on-device classification to distinguish chainsaws, gunshots, and vehicles instead of relying on anthrophony-band energy alone. Persist soundscape history per site to track ecosystem health trends over seasons, with SMS/push alerts to ranger teams. Swap in a real basemap (Mapbox/Leaflet) once a target deployment site has reliable connectivity

Built With

Share this project:

Updates

Submission history