# ultraelectronica/br41ndmg architecture

> Architecture diagram of the GitHub repository ultraelectronica/br41ndmg, 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/ultraelectronica/br41ndmg
- Repository: https://github.com/ultraelectronica/br41ndmg

## Overview

br41ndmg is a Rust audio-resampling library with a separate command-line application. Its main workflow accepts audio buffers or files, builds a configurable polyphase sinc filter bank, resamples offline or in chunks, and can write WAV output while preserving tags. The CLI adds single-file and batch jobs plus an interactive browser, file-info pane, and spectrogram viewer. The graph reflects documented features, but unsampled implementation details and some internal call paths are omitted where the excerpts do not establish them.

Main entry points: [`src/io.rs`](https://github.com/ultraelectronica/br41ndmg/blob/master/src/io.rs) (Audio buffers and I/O), [`cli/src/tui.rs`](https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/tui.rs) (Interactive browser), [`cli/src/resample_job.rs`](https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/resample_job.rs) (Resample jobs), [`src/filter.rs`](https://github.com/ultraelectronica/br41ndmg/blob/master/src/filter.rs) (FIR filter helpers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI application"]
  node_cli_entry["CLI entry<br/>[main.rs]"]
  node_jobs["Resample jobs<br/>[resample_job.rs]"]
  node_tui["Interactive browser<br/>[tui.rs]"]
  node_viewer["File info viewer<br/>[viewer.rs]"]
  node_spectrogram["Spectrogram analysis<br/>[spectrogram.rs]"]
end

subgraph group_audio["Audio I/O"]
  node_audio_io["Audio buffers and I/O<br/>[io.rs]"]
  node_tags["Tag preservation<br/>[tags.rs]"]
end

subgraph group_dsp["Resampling DSP"]
  node_resampler["Offline and streaming<br/>[resampler.rs]"]
  node_polyphase["Polyphase filter bank<br/>[polyphase.rs]"]
end

subgraph group_helpers["DSP helpers"]
  node_filter["FIR filter helpers<br/>[filter.rs]"]
  node_sinc["Sinc kernels<br/>[sinc.rs]"]
  node_window["Window functions<br/>[window.rs]"]
  node_utils["Cutoff validation<br/>[utils.rs]"]
end

node_user(("User"))
node_audio_files["Audio files"]
node_wav_output["WAV output"]

node_user -->|"invokes"| node_cli_entry
node_cli_entry -->|"launches"| node_tui
node_cli_entry -->|"dispatches jobs"| node_jobs
node_tui -->|"starts processing"| node_jobs
node_tui -->|"probes and reads"| node_audio_io
node_tui -->|"reads and writes"| node_tags
node_tui -->|"computes"| node_spectrogram
node_tui -->|"renders view"| node_viewer
node_viewer -->|"displays"| node_spectrogram
node_jobs -->|"reads and writes"| node_audio_io
node_jobs -->|"resamples buffers"| node_resampler
node_jobs -->|"preserves tags"| node_tags
node_audio_files -->|"supplies input"| node_audio_io
node_audio_io -->|"provides resample buffer"| node_resampler
node_audio_io -->|"writes WAV"| node_wav_output
node_resampler -->|"uses filter bank"| node_polyphase
node_polyphase -->|"builds coefficients"| node_sinc
node_polyphase -->|"applies window"| node_window
node_filter -->|"uses kernels"| node_sinc
node_filter -->|"applies window"| node_window
node_filter -->|"validates cutoff"| node_utils
node_sinc -->|"validates cutoff"| node_utils
node_tags -->|"integrates WAV tags"| node_audio_io
node_audio_io -->|"decodes input"| node_audio_files

click node_cli_entry "https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/main.rs"
click node_jobs "https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/resample_job.rs"
click node_tui "https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/tui.rs"
click node_viewer "https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/viewer.rs"
click node_spectrogram "https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/spectrogram.rs"
click node_audio_io "https://github.com/ultraelectronica/br41ndmg/blob/master/src/io.rs"
click node_tags "https://github.com/ultraelectronica/br41ndmg/blob/master/src/tags.rs"
click node_resampler "https://github.com/ultraelectronica/br41ndmg/blob/master/src/resampler.rs"
click node_polyphase "https://github.com/ultraelectronica/br41ndmg/blob/master/src/polyphase.rs"
click node_filter "https://github.com/ultraelectronica/br41ndmg/blob/master/src/filter.rs"
click node_sinc "https://github.com/ultraelectronica/br41ndmg/blob/master/src/sinc.rs"
click node_window "https://github.com/ultraelectronica/br41ndmg/blob/master/src/window.rs"
click node_utils "https://github.com/ultraelectronica/br41ndmg/blob/master/src/utils.rs"

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_cli_entry,node_jobs,node_tui,node_viewer,node_spectrogram,node_user toneBlue
class node_audio_io,node_tags toneAmber
class node_resampler,node_polyphase toneMint
class node_filter,node_sinc,node_window,node_utils toneRose
class node_audio_files,node_wav_output toneIndigo
```

## Components

### CLI application

- [CLI entry](https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/main.rs): `cli/src/main.rs`
- [Resample jobs](https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/resample_job.rs): `cli/src/resample_job.rs`
- [Interactive browser](https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/tui.rs): `cli/src/tui.rs`
- [File info viewer](https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/viewer.rs): `cli/src/viewer.rs`
- [Spectrogram analysis](https://github.com/ultraelectronica/br41ndmg/blob/master/cli/src/spectrogram.rs): `cli/src/spectrogram.rs`

### Audio I/O

- [Audio buffers and I/O](https://github.com/ultraelectronica/br41ndmg/blob/master/src/io.rs): `src/io.rs`
- [Tag preservation](https://github.com/ultraelectronica/br41ndmg/blob/master/src/tags.rs): `src/tags.rs`

### Resampling DSP

- [Offline and streaming](https://github.com/ultraelectronica/br41ndmg/blob/master/src/resampler.rs): `src/resampler.rs`
- [Polyphase filter bank](https://github.com/ultraelectronica/br41ndmg/blob/master/src/polyphase.rs): `src/polyphase.rs`

### DSP helpers

- [FIR filter helpers](https://github.com/ultraelectronica/br41ndmg/blob/master/src/filter.rs): `src/filter.rs`
- [Sinc kernels](https://github.com/ultraelectronica/br41ndmg/blob/master/src/sinc.rs): `src/sinc.rs`
- [Window functions](https://github.com/ultraelectronica/br41ndmg/blob/master/src/window.rs): `src/window.rs`
- [Cutoff validation](https://github.com/ultraelectronica/br41ndmg/blob/master/src/utils.rs): `src/utils.rs`

### Other components

- **User**
- **Audio files**
- **WAV output**

## Connections

- User → CLI entry: invokes (evidence: `README.md`)
- CLI entry → Interactive browser: launches (evidence: `cli/src/main.rs`)
- CLI entry → Resample jobs: dispatches jobs (evidence: `cli/src/main.rs`)
- Interactive browser → Resample jobs: starts processing (evidence: `cli/src/tui.rs`)
- Interactive browser → Audio buffers and I/O: probes and reads (evidence: `cli/src/tui.rs`)
- Interactive browser → Tag preservation: reads and writes (evidence: `cli/src/tui.rs`)
- Interactive browser → Spectrogram analysis: computes (evidence: `cli/src/tui.rs`)
- Interactive browser → File info viewer: renders view (evidence: `cli/src/tui.rs`)
- File info viewer → Spectrogram analysis: displays (evidence: `cli/src/viewer.rs`)
- Resample jobs → Audio buffers and I/O: reads and writes (evidence: `cli/src/resample_job.rs`)
- Resample jobs → Offline and streaming: resamples buffers (evidence: `cli/src/resample_job.rs`)
- Resample jobs → Tag preservation: preserves tags (evidence: `cli/src/resample_job.rs`)
- Audio files → Audio buffers and I/O: supplies input (evidence: `README.md`)
- Audio buffers and I/O → Offline and streaming: provides resample buffer (evidence: `README.md`)
- Audio buffers and I/O → WAV output: writes WAV (evidence: `README.md`)
- Offline and streaming → Polyphase filter bank: uses filter bank (evidence: `src/resampler.rs`)
- Polyphase filter bank → Sinc kernels: builds coefficients (evidence: `src/polyphase.rs`)
- Polyphase filter bank → Window functions: applies window (evidence: `src/polyphase.rs`)
- FIR filter helpers → Sinc kernels: uses kernels (evidence: `src/filter.rs`)
- FIR filter helpers → Window functions: applies window (evidence: `src/filter.rs`)
- FIR filter helpers → Cutoff validation: validates cutoff (evidence: `src/filter.rs`)
- Sinc kernels → Cutoff validation: validates cutoff (evidence: `src/sinc.rs`)
- Tag preservation → Audio buffers and I/O: integrates WAV tags (evidence: `src/tags.rs`)
- Audio buffers and I/O → Audio files: decodes input (evidence: `README.md`)
