# izumoff/aurabars architecture

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

- Interactive diagram: https://gitdiagram.com/izumoff/aurabars
- Repository: https://github.com/izumoff/aurabars

## Overview

AuraBars is a native AIMP embedded spectrum-visualization plugin. AIMP supplies spectrum frames to the registered visualization, which groups and scales frequency bins, maintains animation state, and renders bars, backgrounds, grids, layout, and peak markers to a drawing surface. Users configure the display through AIMP’s options frame; settings are loaded from and saved to AIMP configuration, with presets and clipboard transfer available. The excerpts establish plugin registration, frequency mapping, geometry, settings, and parts of rendering and options behavior; unsampled rendering and dialog details are represented only where the README documents them.

Main entry points: [`src/Visualization.cpp`](https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp) (Visualization extension), [`src/Plugin.cpp`](https://github.com/izumoff/aurabars/blob/main/src/Plugin.cpp) (Plugin entry), [`src/OptionsFrame.cpp`](https://github.com/izumoff/aurabars/blob/main/src/OptionsFrame.cpp) (Settings dialog), [`src/Settings.cpp`](https://github.com/izumoff/aurabars/blob/main/src/Settings.cpp) (Live settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["AIMP integration"]
  node_plugin["Plugin entry<br/>[Plugin.cpp]"]
  node_visualization_ext["Visualization extension<br/>[Visualization.cpp]"]
  node_options_ext["Options extension<br/>[OptionsFrame.cpp]"]
  node_spectrum["Spectrum frames"]
  node_canvas["Drawing surface"]
end

subgraph group_visualization["Spectrum visualization"]
  node_signal["Bin processing<br/>[Visualization.cpp]"]
  node_frequency["Frequency mapping<br/>[FrequencyMap.cpp]"]
  node_geometry["Bar geometry<br/>[BarGeometry.cpp]"]
  node_animation["Smoothing and peaks<br/>[Visualization.cpp]"]
  node_render["GDI rendering<br/>[Visualization.cpp]"]
end

subgraph group_configuration["Settings and options"]
  node_settings["Live settings<br/>[Settings.cpp]"]
  node_options_ui["Settings dialog<br/>[OptionsFrame.cpp]"]
  node_presets["Built-in presets<br/>[Presets.cpp]"]
end

subgraph group_support["Shared runtime"]
  node_debug["Debug logging<br/>[Common.cpp]"]
end

node_aimp(("AIMP host"))
node_config_store[("AIMP config")]
node_clipboard["Clipboard"]
node_user(("AIMP user"))

node_aimp -->|"loads plugin"| node_plugin
node_plugin -->|"loads settings"| node_settings
node_plugin -->|"reads config"| node_config_store
node_plugin -->|"registers extension"| node_visualization_ext
node_plugin -->|"registers extension"| node_options_ext
node_aimp -->|"provides frames"| node_spectrum
node_spectrum -->|"draw callback"| node_visualization_ext
node_visualization_ext -->|"processes bins"| node_signal
node_signal -->|"maps frequencies"| node_frequency
node_visualization_ext -->|"computes layout"| node_geometry
node_visualization_ext -->|"updates state"| node_animation
node_visualization_ext -->|"draws frame"| node_render
node_render -->|"draws to"| node_canvas
node_user -->|"edits options"| node_options_ui
node_options_ext -->|"builds dialog"| node_options_ui
node_options_ui -->|"loads preset"| node_presets
node_options_ui -->|"copies or pastes"| node_clipboard
node_options_ui -->|"updates settings"| node_settings
node_options_ext -->|"saves config"| node_config_store
node_settings -->|"supplies values"| node_visualization_ext
node_visualization_ext -.->|"appends samples"| node_debug
node_options_ext -.->|"logs failures"| node_debug

click node_plugin "https://github.com/izumoff/aurabars/blob/main/src/Plugin.cpp"
click node_visualization_ext "https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp"
click node_options_ext "https://github.com/izumoff/aurabars/blob/main/src/OptionsFrame.cpp"
click node_signal "https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp"
click node_frequency "https://github.com/izumoff/aurabars/blob/main/src/FrequencyMap.cpp"
click node_geometry "https://github.com/izumoff/aurabars/blob/main/src/BarGeometry.cpp"
click node_animation "https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp"
click node_render "https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp"
click node_settings "https://github.com/izumoff/aurabars/blob/main/src/Settings.cpp"
click node_options_ui "https://github.com/izumoff/aurabars/blob/main/src/OptionsFrame.cpp"
click node_presets "https://github.com/izumoff/aurabars/blob/main/src/Presets.cpp"
click node_debug "https://github.com/izumoff/aurabars/blob/main/src/Common.cpp"

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_plugin,node_visualization_ext,node_options_ext,node_spectrum,node_canvas,node_user toneBlue
class node_signal,node_frequency,node_geometry,node_animation,node_render,node_config_store toneAmber
class node_settings,node_options_ui,node_presets toneMint
class node_debug toneRose
class node_aimp,node_clipboard toneIndigo
```

## Components

### AIMP integration

- [Plugin entry](https://github.com/izumoff/aurabars/blob/main/src/Plugin.cpp): `src/Plugin.cpp`
- [Visualization extension](https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp): `src/Visualization.cpp`
- [Options extension](https://github.com/izumoff/aurabars/blob/main/src/OptionsFrame.cpp): `src/OptionsFrame.cpp`
- **Spectrum frames**
- **Drawing surface**

### Spectrum visualization

- [Bin processing](https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp): `src/Visualization.cpp`
- [Frequency mapping](https://github.com/izumoff/aurabars/blob/main/src/FrequencyMap.cpp): `src/FrequencyMap.cpp`
- [Bar geometry](https://github.com/izumoff/aurabars/blob/main/src/BarGeometry.cpp): `src/BarGeometry.cpp`
- [Smoothing and peaks](https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp): `src/Visualization.cpp`
- [GDI rendering](https://github.com/izumoff/aurabars/blob/main/src/Visualization.cpp): `src/Visualization.cpp`

### Settings and options

- [Live settings](https://github.com/izumoff/aurabars/blob/main/src/Settings.cpp): `src/Settings.cpp`
- [Settings dialog](https://github.com/izumoff/aurabars/blob/main/src/OptionsFrame.cpp): `src/OptionsFrame.cpp`
- [Built-in presets](https://github.com/izumoff/aurabars/blob/main/src/Presets.cpp): `src/Presets.cpp`

### Shared runtime

- [Debug logging](https://github.com/izumoff/aurabars/blob/main/src/Common.cpp): `src/Common.cpp`

### Other components

- **AIMP host**
- **AIMP config**
- **Clipboard**
- **AIMP user**

## Connections

- AIMP host → Plugin entry: loads plugin
- Plugin entry → Live settings: loads settings
- Plugin entry → AIMP config: reads config
- Plugin entry → Visualization extension: registers extension
- Plugin entry → Options extension: registers extension
- AIMP host → Spectrum frames: provides frames
- Spectrum frames → Visualization extension: draw callback
- Visualization extension → Bin processing: processes bins
- Bin processing → Frequency mapping: maps frequencies
- Visualization extension → Bar geometry: computes layout
- Visualization extension → Smoothing and peaks: updates state
- Visualization extension → GDI rendering: draws frame
- GDI rendering → Drawing surface: draws to
- AIMP user → Settings dialog: edits options
- Options extension → Settings dialog: builds dialog
- Settings dialog → Built-in presets: loads preset
- Settings dialog → Clipboard: copies or pastes
- Settings dialog → Live settings: updates settings
- Options extension → AIMP config: saves config
- Live settings → Visualization extension: supplies values
- Visualization extension → Debug logging: appends samples
- Options extension → Debug logging: logs failures
