# pranavsandeep/noisesuppression architecture

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

- Interactive diagram: https://gitdiagram.com/pranavsandeep/noisesuppression
- Repository: https://github.com/pranavsandeep/noisesuppression

## Overview

This is a real-time audio noise-suppression application. At startup, `main.cpp` loads configuration and an ONNX model, configures a duplex audio device, and starts an audio-processing thread. Audio callbacks and processing are exposed through `AudioInput`; the repository also includes audio-processing, suppression, model-inference, and spectral-feature modules. The README is empty and those implementation files were not sampled, so their detailed call wiring is uncertain; the graph shows the startup wiring evidenced in `main.cpp` and keeps the likely processing stages distinct without asserting their internal connections.

Main entry points: [`main.cpp`](https://github.com/pranavsandeep/noisesuppression/blob/master/main.cpp) (Application startup), [`AudioInput.cpp`](https://github.com/pranavsandeep/noisesuppression/blob/master/AudioInput.cpp) (Audio input and callbacks), [`Model.cpp`](https://github.com/pranavsandeep/noisesuppression/blob/master/Model.cpp) (ONNX model wrapper), [`AudioProcessing.cpp`](https://github.com/pranavsandeep/noisesuppression/blob/master/AudioProcessing.cpp) (Audio processing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime orchestration"]
  node_main["Application startup<br/>[main.cpp]"]
  node_config["Runtime config<br/>[AppConfig.hpp]"]
end

subgraph group_audio["Audio handling"]
  node_audioinput["Audio input and callbacks<br/>[AudioInput.cpp]"]
  node_queue["Concurrent queue<br/>[concurrentqueue.h]"]
end

subgraph group_denoise["Suppression pipeline"]
  node_audioprocessing["Audio processing"]
  node_features["Spectral features<br/>[librosa.h]"]
  node_suppression["Noise suppression"]
end

subgraph group_inference["Model inference"]
  node_model["ONNX model wrapper<br/>[Model.cpp]"]
  node_model_design["Conv-GRU model design<br/>[ConvModel.py]"]
end

node_user(("Operator"))
node_configfile["config.cfg"]
node_audio_device["Duplex audio device"]
node_onnx["ONNX Runtime"]
node_audio_output(("Processed audio"))

node_user -->|"starts"| node_main
node_main -->|"loads config"| node_config
node_config -->|"reads"| node_configfile
node_main -->|"creates model"| node_model
node_main -->|"sets parameters"| node_audioinput
node_main -->|"starts thread"| node_audioinput
node_main -->|"configures duplex"| node_audio_device
node_audio_device -->|"dispatches callback"| node_audioinput
node_model -->|"runs inference"| node_onnx
node_audioinput -.-> node_queue
node_audioinput -.-> node_audioprocessing
node_audioprocessing -.-> node_features
node_audioprocessing -.-> node_suppression
node_suppression -.-> node_model
node_audioinput -.-> node_audio_output
node_model_design -.-> node_model

click node_main "https://github.com/pranavsandeep/noisesuppression/blob/master/main.cpp"
click node_config "https://github.com/pranavsandeep/noisesuppression/blob/master/AppConfig.hpp"
click node_audioinput "https://github.com/pranavsandeep/noisesuppression/blob/master/AudioInput.cpp"
click node_queue "https://github.com/pranavsandeep/noisesuppression/blob/master/concurrentqueue.h"
click node_audioprocessing "https://github.com/pranavsandeep/noisesuppression/blob/master/AudioProcessing.cpp"
click node_features "https://github.com/pranavsandeep/noisesuppression/blob/master/librosa/librosa.h"
click node_suppression "https://github.com/pranavsandeep/noisesuppression/blob/master/NoiseSuppression.cpp"
click node_model "https://github.com/pranavsandeep/noisesuppression/blob/master/Model.cpp"
click node_model_design "https://github.com/pranavsandeep/noisesuppression/blob/master/Model/ConvModel.py"

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_main,node_config toneBlue
class node_audioinput,node_queue toneAmber
class node_audioprocessing,node_features,node_suppression toneMint
class node_model,node_model_design toneRose
class node_user,node_configfile,node_audio_device,node_onnx,node_audio_output toneIndigo
```

## Components

### Runtime orchestration

- [Application startup](https://github.com/pranavsandeep/noisesuppression/blob/master/main.cpp): `main.cpp`
- [Runtime config](https://github.com/pranavsandeep/noisesuppression/blob/master/AppConfig.hpp): `AppConfig.hpp`

### Audio handling

- [Audio input and callbacks](https://github.com/pranavsandeep/noisesuppression/blob/master/AudioInput.cpp): `AudioInput.cpp`
- [Concurrent queue](https://github.com/pranavsandeep/noisesuppression/blob/master/concurrentqueue.h): `concurrentqueue.h`

### Suppression pipeline

- [Audio processing](https://github.com/pranavsandeep/noisesuppression/blob/master/AudioProcessing.cpp): `AudioProcessing.cpp`
- [Spectral features](https://github.com/pranavsandeep/noisesuppression/blob/master/librosa/librosa.h): `librosa/librosa.h`
- [Noise suppression](https://github.com/pranavsandeep/noisesuppression/blob/master/NoiseSuppression.cpp): `NoiseSuppression.cpp`

### Model inference

- [ONNX model wrapper](https://github.com/pranavsandeep/noisesuppression/blob/master/Model.cpp): `Model.cpp`
- [Conv-GRU model design](https://github.com/pranavsandeep/noisesuppression/blob/master/Model/ConvModel.py): `Model/ConvModel.py`

### Other components

- **Operator**
- **config.cfg**
- **Duplex audio device**
- **ONNX Runtime**
- **Processed audio**

## Connections

- Operator → Application startup: starts
- Application startup → Runtime config: loads config
- Runtime config → config.cfg: reads
- Application startup → ONNX model wrapper: creates model
- Application startup → Audio input and callbacks: sets parameters
- Application startup → Audio input and callbacks: starts thread
- Application startup → Duplex audio device: configures duplex
- Duplex audio device → Audio input and callbacks: dispatches callback
- ONNX model wrapper → ONNX Runtime: runs inference
- Audio input and callbacks → Concurrent queue
- Audio input and callbacks → Audio processing
- Audio processing → Spectral features
- Audio processing → Noise suppression
- Noise suppression → ONNX model wrapper
- Audio input and callbacks → Processed audio
- Conv-GRU model design → ONNX model wrapper
