# tone-3000/tone3000-plugin architecture

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

- Interactive diagram: https://gitdiagram.com/tone-3000/tone3000-plugin
- Repository: https://github.com/tone-3000/tone3000-plugin

## Overview

TONE3000 is a JUCE audio plugin and standalone app for browsing or locally loading NAM amp models and impulse responses, arranging them into signal chains, and processing live audio. The main workflow is user or host audio → plugin UI and tone selection → model loading into chain blocks → audio processing → output. The README documents the processing order and product capabilities; sampled source supports some implementation details, but not every UI-service connection, so uncertain wiring is omitted.

Main entry points: [`plugin/src/Processor.cpp`](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/Processor.cpp) (Audio processor), [`plugin/ui/views/browser/ToneBrowser.cpp`](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/views/browser/ToneBrowser.cpp) (Tone browser), [`plugin/ui/services/Tone3000Client.cpp`](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/Tone3000Client.cpp) (API client), [`plugin/ui/views/PluginRoot.cpp`](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/views/PluginRoot.cpp) (Plugin screens)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Native interface"]
  node_editor["Plugin editor<br/>[NativeEditor.cpp]"]
  node_screens["Plugin screens<br/>[PluginRoot.cpp]"]
  node_tone_browser["Tone browser<br/>[ToneBrowser.cpp]"]
end

subgraph group_catalog["Tone discovery"]
  node_tone_query["Search query<br/>[ToneQuery.cpp]"]
  node_tone_client["API client<br/>[Tone3000Client.cpp]"]
  node_oauth["OAuth session<br/>[OAuth.cpp]"]
  node_loopback["OAuth callback<br/>[LoopbackServer.cpp]"]
  node_tone_load["Tone load flow<br/>[ToneLoadFlow.cpp]"]
  node_model_loads["Model loading<br/>[ModelLoads.cpp]"]
  node_local_files["Local file loading<br/>[LocalFiles.cpp]"]
end

subgraph group_dsp["Audio engine"]
  node_processor["Audio processor<br/>[Processor.cpp]"]
  node_chain["NAM / IR chain<br/>[ProcessorChain.cpp]"]
  node_nam["NAM engine<br/>[NamEngine.cpp]"]
  node_blocks["Chain blocks<br/>[ChainBlock.h]"]
  node_gate["Noise gate<br/>[NoiseGate.h]"]
  node_stereo["Stereo processing<br/>[Spread.h]"]
  node_spectrum["Spectrum analysis<br/>[BlockSpectrum.cpp]"]
  node_tuner["Tuner detection<br/>[TunerDetector.cpp]"]
end

subgraph group_state["Controls and persistence"]
  node_chain_state["Chain state<br/>[ChainState.cpp]"]
  node_chain_store["Chain store<br/>[ChainStore.cpp]"]
  node_presets[("Preset manager<br/>[PresetManager.cpp]")]
  node_midi["MIDI mapping<br/>[MidiMapper.cpp]"]
end

subgraph group_platform["Host integration"]
  node_settings["Audio settings"]
  node_autosave["State autosave"]
end

node_user(("Plugin user"))
node_host(("DAW / host"))
node_device(("Audio device"))
node_catalog_api{{"TONE3000 API"}}

node_user -->|"operates"| node_editor
node_host -->|"supplies audio"| node_processor
node_processor -->|"returns audio"| node_host
node_editor -->|"displays"| node_screens
node_screens -->|"opens browser"| node_tone_browser
node_tone_browser -->|"builds search"| node_tone_query
node_tone_browser -->|"requests catalog"| node_tone_client
node_tone_client -->|"sends requests"| node_catalog_api
node_oauth -->|"receives redirect"| node_loopback
node_oauth -->|"exchanges credentials"| node_tone_client
node_tone_browser -->|"selects tone"| node_tone_load
node_tone_load -->|"loads model"| node_model_loads
node_tone_load -->|"downloads tone"| node_tone_client
node_user -->|"chooses local files"| node_local_files
node_local_files -->|"provides files"| node_model_loads
node_model_loads -->|"installs model"| node_processor
node_processor -->|"processes input"| node_gate
node_processor -->|"runs chain"| node_chain
node_chain -->|"processes blocks"| node_blocks
node_blocks -->|"runs NAM"| node_nam
node_processor -->|"applies stereo stage"| node_stereo
node_processor -->|"feeds analysis"| node_spectrum
node_processor -->|"feeds pitch detection"| node_tuner
node_screens -->|"edits chain"| node_chain_state
node_chain_state -->|"persists changes"| node_chain_store
node_processor -->|"loads and saves presets"| node_presets
node_processor -->|"handles MIDI input"| node_midi
node_device -->|"provides audio I/O"| node_settings
node_settings -->|"configures I/O"| node_processor
node_processor -->|"saves standalone state"| node_autosave

click node_editor "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/NativeEditor.cpp"
click node_screens "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/views/PluginRoot.cpp"
click node_tone_browser "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/views/browser/ToneBrowser.cpp"
click node_tone_query "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/model/ToneQuery.cpp"
click node_tone_client "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/Tone3000Client.cpp"
click node_oauth "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/OAuth.cpp"
click node_loopback "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/LoopbackServer.cpp"
click node_tone_load "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/ToneLoadFlow.cpp"
click node_model_loads "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/ModelLoads.cpp"
click node_local_files "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/LocalFiles.cpp"
click node_processor "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/Processor.cpp"
click node_chain "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/ProcessorChain.cpp"
click node_nam "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/NamEngine.cpp"
click node_blocks "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/include/ChainBlock.h"
click node_gate "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/include/NoiseGate.h"
click node_stereo "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/include/Spread.h"
click node_spectrum "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/BlockSpectrum.cpp"
click node_tuner "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/TunerDetector.cpp"
click node_chain_state "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/model/ChainState.cpp"
click node_chain_store "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/ChainStore.cpp"
click node_presets "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/PresetManager.cpp"
click node_midi "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/MidiMapper.cpp"
click node_settings "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/StandaloneAudioSettings.cpp"
click node_autosave "https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/StandaloneStateAutosave.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_editor,node_screens,node_tone_browser,node_user toneBlue
class node_tone_query,node_tone_client,node_oauth,node_loopback,node_tone_load,node_model_loads,node_local_files toneAmber
class node_processor,node_chain,node_nam,node_blocks,node_gate,node_stereo,node_spectrum,node_tuner,node_catalog_api toneMint
class node_chain_state,node_chain_store,node_presets,node_midi toneRose
class node_settings,node_autosave,node_host,node_device toneIndigo
```

## Components

### Native interface

- [Plugin editor](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/NativeEditor.cpp): `plugin/ui/NativeEditor.cpp`
- [Plugin screens](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/views/PluginRoot.cpp): `plugin/ui/views/PluginRoot.cpp`
- [Tone browser](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/views/browser/ToneBrowser.cpp): `plugin/ui/views/browser/ToneBrowser.cpp`

### Tone discovery

- [Search query](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/model/ToneQuery.cpp): `plugin/ui/model/ToneQuery.cpp`
- [API client](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/Tone3000Client.cpp): `plugin/ui/services/Tone3000Client.cpp`
- [OAuth session](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/OAuth.cpp): `plugin/ui/services/OAuth.cpp`
- [OAuth callback](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/LoopbackServer.cpp): `plugin/ui/services/LoopbackServer.cpp`
- [Tone load flow](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/ToneLoadFlow.cpp): `plugin/ui/services/ToneLoadFlow.cpp`
- [Model loading](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/ModelLoads.cpp): `plugin/ui/services/ModelLoads.cpp`
- [Local file loading](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/LocalFiles.cpp): `plugin/ui/services/LocalFiles.cpp`

### Audio engine

- [Audio processor](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/Processor.cpp): `plugin/src/Processor.cpp`
- [NAM / IR chain](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/ProcessorChain.cpp): `plugin/src/ProcessorChain.cpp`
- [NAM engine](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/NamEngine.cpp): `plugin/src/NamEngine.cpp`
- [Chain blocks](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/include/ChainBlock.h): `plugin/include/ChainBlock.h`
- [Noise gate](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/include/NoiseGate.h): `plugin/include/NoiseGate.h`
- [Stereo processing](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/include/Spread.h): `plugin/include/Spread.h`
- [Spectrum analysis](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/BlockSpectrum.cpp): `plugin/src/BlockSpectrum.cpp`
- [Tuner detection](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/TunerDetector.cpp): `plugin/src/TunerDetector.cpp`

### Controls and persistence

- [Chain state](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/model/ChainState.cpp): `plugin/ui/model/ChainState.cpp`
- [Chain store](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/ui/services/ChainStore.cpp): `plugin/ui/services/ChainStore.cpp`
- [Preset manager](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/PresetManager.cpp): `plugin/src/PresetManager.cpp`
- [MIDI mapping](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/MidiMapper.cpp): `plugin/src/MidiMapper.cpp`

### Host integration

- [Audio settings](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/StandaloneAudioSettings.cpp): `plugin/src/StandaloneAudioSettings.cpp`
- [State autosave](https://github.com/tone-3000/tone3000-plugin/blob/main/plugin/src/StandaloneStateAutosave.cpp): `plugin/src/StandaloneStateAutosave.cpp`

### Other components

- **Plugin user**
- **DAW / host**
- **Audio device**
- **TONE3000 API**

## Connections

- Plugin user → Plugin editor: operates
- DAW / host → Audio processor: supplies audio
- Audio processor → DAW / host: returns audio
- Plugin editor → Plugin screens: displays
- Plugin screens → Tone browser: opens browser
- Tone browser → Search query: builds search
- Tone browser → API client: requests catalog
- API client → TONE3000 API: sends requests
- OAuth session → OAuth callback: receives redirect
- OAuth session → API client: exchanges credentials
- Tone browser → Tone load flow: selects tone
- Tone load flow → Model loading: loads model
- Tone load flow → API client: downloads tone
- Plugin user → Local file loading: chooses local files
- Local file loading → Model loading: provides files
- Model loading → Audio processor: installs model
- Audio processor → Noise gate: processes input
- Audio processor → NAM / IR chain: runs chain
- NAM / IR chain → Chain blocks: processes blocks
- Chain blocks → NAM engine: runs NAM
- Audio processor → Stereo processing: applies stereo stage
- Audio processor → Spectrum analysis: feeds analysis
- Audio processor → Tuner detection: feeds pitch detection
- Plugin screens → Chain state: edits chain
- Chain state → Chain store: persists changes
- Audio processor → Preset manager: loads and saves presets
- Audio processor → MIDI mapping: handles MIDI input
- Audio device → Audio settings: provides audio I/O
- Audio settings → Audio processor: configures I/O
- Audio processor → State autosave: saves standalone state
