// the find
introlab/odas
ODAS: Open embeddeD Audition System
ODAS is a C library for real-time sound source localization, tracking, and separation on microphone arrays — the kind of thing that goes into robots and smart speakers. It's backed by published academic papers and designed to run on low-cost embedded hardware, so it's not a toy prototype. Target audience is robotics engineers and audio researchers who need something that actually runs on an RPi or XMOS board.
The signal processing pipeline is properly decomposed — STFT/iSTFT, beamforming, Kalman tracking, particle filters, and source separation each live in their own module with clean naming conventions (freq2xcorr, track2steer, etc.), which makes it navigable despite the volume of code. Ships with hardware-specific config files for a dozen real microphone arrays (ReSpeaker, Matrix Creator, miniDSP, XMOS) so you're not starting from scratch with your specific hardware. Pure C with CMake means it actually compiles on embedded targets without fighting a toolchain. The companion odas_web visualizer exists as a separate project, which is the right call — keeps the library lean.
Last meaningful activity was late 2024 and the repo has been essentially maintenance-mode for a couple of years, so don't expect active development or quick issue responses. The wiki is the primary documentation and wikis rot — if the wiki goes stale you're reading C headers to understand the config file format. No unit tests visible in the tree; for DSP code this is a real gap since subtle numerical bugs are hard to catch any other way. The async connector layer (aconnector, amessage, asink, asource prefixes) duplicates a lot of structure from the synchronous equivalents and the distinction isn't explained anywhere obvious, which makes the architecture harder to follow than it needs to be.