# introlab/odas architecture

> Architecture diagram of the GitHub repository introlab/odas, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/introlab/odas
- Repository: https://github.com/introlab/odas

## Overview

ODAS is a portable C library for embedded audio processing: it performs sound-source localization and tracking, separation, and post-filtering. The intended user-facing flow is microphone audio through analysis and source tracking to separated, post-filtered audio or data outputs. Its source tree also documents resampling, classification, mapping, and volume modules. The excerpts show the separation module’s message and processing dependencies; other workflow links are dashed where the README describes capabilities but sampled code does not establish exact runtime wiring.

Main entry points: [`src/module/mod_sss.c`](https://github.com/introlab/odas/blob/master/src/module/mod_sss.c) (Separation Postfilter), [`src/asource/asrc_hops.c`](https://github.com/introlab/odas/blob/master/src/asource/asrc_hops.c) (Audio Capture), [`src/module/mod_stft.c`](https://github.com/introlab/odas/blob/master/src/module/mod_stft.c) (Spectral Analysis), [`src/module/mod_istft.c`](https://github.com/introlab/odas/blob/master/src/module/mod_istft.c) (Audio Synthesis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_audio["Audio Front End"]
  node_capture["Audio Capture<br/>[asrc_hops.c]"]
  node_stft["Spectral Analysis<br/>[mod_stft.c]"]
  node_resample["Resampling<br/>[mod_resample.c]"]
  node_istft["Audio Synthesis<br/>[mod_istft.c]"]
end

subgraph group_localize["Localization Tracking"]
  node_ssl["Source Localization<br/>[mod_ssl.c]"]
  node_sst["Source Tracking<br/>[mod_sst.c]"]
  node_classify["Source Classification<br/>[mod_classify.c]"]
end

subgraph group_separation["Separation Postfilter"]
  node_sss["Separation Postfilter<br/>[mod_sss.c]"]
  node_mapping["Audio Mapping<br/>[mod_mapping.c]"]
  node_noise["Noise Processing<br/>[mod_noise.c]"]
  node_volume["Volume Processing<br/>[mod_volume.c]"]
end

subgraph group_transport["Data Transport"]
  node_messages["Typed Messages"]
  node_connectors["Message Connectors"]
  node_sinks["Audio Data Outputs"]
end

subgraph group_core["Signal Processing"]
  node_signals["Signal Representations"]
  node_systems["Signal Transforms"]
  node_initialization["Spatial Initialization<br/>[directivity.c]"]
end

node_mic(("Microphone Array"))
node_result(("Audio or Data Consumer"))

node_mic -.->|"supplies audio"| node_capture
node_capture -.->|"provides frames"| node_stft
node_stft -.->|"provides spectra"| node_ssl
node_ssl -.->|"localizes sources"| node_sst
node_sst -.->|"provides tracks"| node_sss
node_sss -.->|"separates audio"| node_istft
node_istft -.->|"outputs audio"| node_result
node_sss -->|"uses transforms"| node_systems
node_sss -->|"uses directivity"| node_initialization
node_sss -->|"accepts and emits"| node_messages
node_classify -.->|"provides labels"| node_result
node_resample -.->|"provides resampled audio"| node_result
node_mapping -.->|"provides mapped audio"| node_result
node_noise -.->|"provides noise processing"| node_result
node_volume -.->|"provides volume control"| node_result
node_messages -.->|"transfers data"| node_connectors
node_connectors -.->|"routes data"| node_sinks
node_sinks -.->|"delivers output"| node_result
node_signals -.->|"transforms representations"| node_systems

click node_capture "https://github.com/introlab/odas/blob/master/src/asource/asrc_hops.c"
click node_stft "https://github.com/introlab/odas/blob/master/src/module/mod_stft.c"
click node_ssl "https://github.com/introlab/odas/blob/master/src/module/mod_ssl.c"
click node_sst "https://github.com/introlab/odas/blob/master/src/module/mod_sst.c"
click node_classify "https://github.com/introlab/odas/blob/master/src/module/mod_classify.c"
click node_sss "https://github.com/introlab/odas/blob/master/src/module/mod_sss.c"
click node_resample "https://github.com/introlab/odas/blob/master/src/module/mod_resample.c"
click node_mapping "https://github.com/introlab/odas/blob/master/src/module/mod_mapping.c"
click node_noise "https://github.com/introlab/odas/blob/master/src/module/mod_noise.c"
click node_volume "https://github.com/introlab/odas/blob/master/src/module/mod_volume.c"
click node_istft "https://github.com/introlab/odas/blob/master/src/module/mod_istft.c"
click node_signals "https://github.com/introlab/odas/tree/master/src/signal"
click node_systems "https://github.com/introlab/odas/tree/master/src/system"
click node_initialization "https://github.com/introlab/odas/blob/master/src/init/directivity.c"
click node_messages "https://github.com/introlab/odas/tree/master/src/message"
click node_connectors "https://github.com/introlab/odas/tree/master/src/connector"
click node_sinks "https://github.com/introlab/odas/tree/master/src/sink"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_capture,node_stft,node_resample,node_istft toneBlue
class node_ssl,node_sst,node_classify toneAmber
class node_sss,node_mapping,node_noise,node_volume toneMint
class node_messages,node_connectors,node_sinks toneRose
class node_signals,node_systems,node_initialization,node_mic,node_result toneIndigo
```

## Components

### Audio Front End

- [Audio Capture](https://github.com/introlab/odas/blob/master/src/asource/asrc_hops.c): `src/asource/asrc_hops.c`
- [Spectral Analysis](https://github.com/introlab/odas/blob/master/src/module/mod_stft.c): `src/module/mod_stft.c`
- [Resampling](https://github.com/introlab/odas/blob/master/src/module/mod_resample.c): `src/module/mod_resample.c`
- [Audio Synthesis](https://github.com/introlab/odas/blob/master/src/module/mod_istft.c): `src/module/mod_istft.c`

### Localization Tracking

- [Source Localization](https://github.com/introlab/odas/blob/master/src/module/mod_ssl.c): `src/module/mod_ssl.c`
- [Source Tracking](https://github.com/introlab/odas/blob/master/src/module/mod_sst.c): `src/module/mod_sst.c`
- [Source Classification](https://github.com/introlab/odas/blob/master/src/module/mod_classify.c): `src/module/mod_classify.c`

### Separation Postfilter

- [Separation Postfilter](https://github.com/introlab/odas/blob/master/src/module/mod_sss.c): `src/module/mod_sss.c`
- [Audio Mapping](https://github.com/introlab/odas/blob/master/src/module/mod_mapping.c): `src/module/mod_mapping.c`
- [Noise Processing](https://github.com/introlab/odas/blob/master/src/module/mod_noise.c): `src/module/mod_noise.c`
- [Volume Processing](https://github.com/introlab/odas/blob/master/src/module/mod_volume.c): `src/module/mod_volume.c`

### Data Transport

- [Typed Messages](https://github.com/introlab/odas/tree/master/src/message): `src/message`
- [Message Connectors](https://github.com/introlab/odas/tree/master/src/connector): `src/connector`
- [Audio Data Outputs](https://github.com/introlab/odas/tree/master/src/sink): `src/sink`

### Signal Processing

- [Signal Representations](https://github.com/introlab/odas/tree/master/src/signal): `src/signal`
- [Signal Transforms](https://github.com/introlab/odas/tree/master/src/system): `src/system`
- [Spatial Initialization](https://github.com/introlab/odas/blob/master/src/init/directivity.c): `src/init/directivity.c`

### Other components

- **Microphone Array**
- **Audio or Data Consumer**

## Connections

- Microphone Array → Audio Capture: supplies audio
- Audio Capture → Spectral Analysis: provides frames
- Spectral Analysis → Source Localization: provides spectra
- Source Localization → Source Tracking: localizes sources
- Source Tracking → Separation Postfilter: provides tracks
- Separation Postfilter → Audio Synthesis: separates audio
- Audio Synthesis → Audio or Data Consumer: outputs audio
- Separation Postfilter → Signal Transforms: uses transforms
- Separation Postfilter → Spatial Initialization: uses directivity
- Separation Postfilter → Typed Messages: accepts and emits
- Source Classification → Audio or Data Consumer: provides labels
- Resampling → Audio or Data Consumer: provides resampled audio
- Audio Mapping → Audio or Data Consumer: provides mapped audio
- Noise Processing → Audio or Data Consumer: provides noise processing
- Volume Processing → Audio or Data Consumer: provides volume control
- Typed Messages → Message Connectors: transfers data
- Message Connectors → Audio Data Outputs: routes data
- Audio Data Outputs → Audio or Data Consumer: delivers output
- Signal Representations → Signal Transforms: transforms representations
