# sweetorange1/y2kmeter architecture

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

## Overview

Y2Kmeter is a JUCE audio analyzer and visualizer delivered as VST3/AU and as a standalone app. Audio enters through a plugin host or standalone device, is analyzed by the processor’s AnalyserHub, and is presented through a configurable editor workspace of meter, spectrum, waveform, EQ, Milkdrop, and VirtuPet modules. The README documents these major features; the sampled excerpts support the hub’s frame dispatch, workspace behavior, standalone setup, and Milkdrop integration, but do not expose the full processor-to-analyzer wiring. Optional update and telemetry services are kept separate.

Main entry points: [`source/analysis/AnalyserHub.cpp`](https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/AnalyserHub.cpp) (Analysis hub), [`source/ui/ModuleWorkspace.cpp`](https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/ModuleWorkspace.cpp) (Module workspace), [`source/standalone/Y2KStandaloneApp.cpp`](https://github.com/sweetorange1/y2kmeter/blob/main/source/standalone/Y2KStandaloneApp.cpp) (Standalone app), [`PluginProcessor.cpp`](https://github.com/sweetorange1/y2kmeter/blob/main/PluginProcessor.cpp) (Audio processor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_audio["Audio analysis"]
  node_processor["Audio processor"]
  node_hub["Analysis hub<br/>[AnalyserHub.cpp]"]
  node_meters["Level and loudness<br/>[AnalyserHub.cpp]"]
  node_phase["Phase analysis"]
  node_dynamics["Dynamic range"]
end

subgraph group_interface["Editor and modules"]
  node_editor["Plugin editor<br/>[PluginEditor.cpp]"]
  node_workspace["Module workspace"]
  node_visuals["Analysis modules<br/>[SpectrumModule.cpp]"]
  node_milkdrop["Milkdrop renderer<br/>[MilkdropModule.cpp]"]
  node_style["Pink XP theme<br/>[PinkXPStyle.cpp]"]
  node_pet["VirtuPet<br/>[VirtuPetModule.cpp]"]
end

subgraph group_standalone["Standalone runtime"]
  node_standalone["Standalone app"]
  node_loopback["Loopback capture"]
  node_recorder["Audio dump recorder"]
end

subgraph group_services["Network services"]
  node_update["Update checker<br/>[UpdateChecker.cpp]"]
  node_telemetry["Telemetry client"]
end

node_host(("Plugin host"))
node_devices(("Audio devices"))
node_projectm["libprojectM"]
node_update_service["Update service"]

node_host -->|"supplies audio"| node_processor
node_devices -->|"provides input"| node_standalone
node_standalone -->|"hosts"| node_processor
node_processor -->|"analyzes audio"| node_hub
node_hub -->|"computes metrics"| node_meters
node_hub -->|"updates analysis"| node_phase
node_hub -->|"updates analysis"| node_dynamics
node_processor -->|"creates editor"| node_editor
node_editor -->|"manages modules"| node_workspace
node_workspace -->|"hosts modules"| node_visuals
node_workspace -->|"hosts module"| node_milkdrop
node_workspace -->|"hosts module"| node_pet
node_hub -->|"publishes frames"| node_visuals
node_milkdrop -.->|"renders with"| node_projectm
node_editor -->|"uses theme"| node_style
node_standalone -.->|"captures loopback"| node_loopback
node_standalone -.->|"records audio"| node_recorder
node_update -.->|"checks version"| node_update_service
node_telemetry -.->|"sends telemetry"| node_update_service

click node_processor "https://github.com/sweetorange1/y2kmeter/blob/main/PluginProcessor.cpp"
click node_hub "https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/AnalyserHub.cpp"
click node_meters "https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/AnalyserHub.cpp"
click node_phase "https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/PhaseCorrelator.cpp"
click node_dynamics "https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/DynamicRangeMeter.cpp"
click node_editor "https://github.com/sweetorange1/y2kmeter/blob/main/PluginEditor.cpp"
click node_workspace "https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/ModuleWorkspace.cpp"
click node_visuals "https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/modules/SpectrumModule.cpp"
click node_milkdrop "https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/modules/MilkdropModule.cpp"
click node_style "https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/PinkXPStyle.cpp"
click node_pet "https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/modules/VirtuPetModule.cpp"
click node_standalone "https://github.com/sweetorange1/y2kmeter/blob/main/source/standalone/Y2KStandaloneApp.cpp"
click node_loopback "https://github.com/sweetorange1/y2kmeter/blob/main/source/standalone/WasapiLoopbackCapture.cpp"
click node_recorder "https://github.com/sweetorange1/y2kmeter/blob/main/source/standalone/AudioDumpRecorder.cpp"
click node_update "https://github.com/sweetorange1/y2kmeter/blob/main/source/network/UpdateChecker.cpp"
click node_telemetry "https://github.com/sweetorange1/y2kmeter/blob/main/source/network/TelemetryClient.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_processor,node_hub,node_meters,node_phase,node_dynamics toneBlue
class node_editor,node_workspace,node_visuals,node_milkdrop,node_style,node_pet toneAmber
class node_standalone,node_loopback,node_recorder toneMint
class node_update,node_telemetry toneRose
class node_host,node_devices,node_projectm,node_update_service toneIndigo
```

## Components

### Audio analysis

- [Audio processor](https://github.com/sweetorange1/y2kmeter/blob/main/PluginProcessor.cpp): `PluginProcessor.cpp`
- [Analysis hub](https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/AnalyserHub.cpp): `source/analysis/AnalyserHub.cpp`
- [Level and loudness](https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/AnalyserHub.cpp): `source/analysis/AnalyserHub.cpp`
- [Phase analysis](https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/PhaseCorrelator.cpp): `source/analysis/PhaseCorrelator.cpp`
- [Dynamic range](https://github.com/sweetorange1/y2kmeter/blob/main/source/analysis/DynamicRangeMeter.cpp): `source/analysis/DynamicRangeMeter.cpp`

### Editor and modules

- [Plugin editor](https://github.com/sweetorange1/y2kmeter/blob/main/PluginEditor.cpp): `PluginEditor.cpp`
- [Module workspace](https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/ModuleWorkspace.cpp): `source/ui/ModuleWorkspace.cpp`
- [Analysis modules](https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/modules/SpectrumModule.cpp): `source/ui/modules/SpectrumModule.cpp`
- [Milkdrop renderer](https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/modules/MilkdropModule.cpp): `source/ui/modules/MilkdropModule.cpp`
- [Pink XP theme](https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/PinkXPStyle.cpp): `source/ui/PinkXPStyle.cpp`
- [VirtuPet](https://github.com/sweetorange1/y2kmeter/blob/main/source/ui/modules/VirtuPetModule.cpp): `source/ui/modules/VirtuPetModule.cpp`

### Standalone runtime

- [Standalone app](https://github.com/sweetorange1/y2kmeter/blob/main/source/standalone/Y2KStandaloneApp.cpp): `source/standalone/Y2KStandaloneApp.cpp`
- [Loopback capture](https://github.com/sweetorange1/y2kmeter/blob/main/source/standalone/WasapiLoopbackCapture.cpp): `source/standalone/WasapiLoopbackCapture.cpp`
- [Audio dump recorder](https://github.com/sweetorange1/y2kmeter/blob/main/source/standalone/AudioDumpRecorder.cpp): `source/standalone/AudioDumpRecorder.cpp`

### Network services

- [Update checker](https://github.com/sweetorange1/y2kmeter/blob/main/source/network/UpdateChecker.cpp): `source/network/UpdateChecker.cpp`
- [Telemetry client](https://github.com/sweetorange1/y2kmeter/blob/main/source/network/TelemetryClient.cpp): `source/network/TelemetryClient.cpp`

### Other components

- **Plugin host**
- **Audio devices**
- **libprojectM**
- **Update service**

## Connections

- Plugin host → Audio processor: supplies audio
- Audio devices → Standalone app: provides input
- Standalone app → Audio processor: hosts
- Audio processor → Analysis hub: analyzes audio
- Analysis hub → Level and loudness: computes metrics
- Analysis hub → Phase analysis: updates analysis
- Analysis hub → Dynamic range: updates analysis
- Audio processor → Plugin editor: creates editor
- Plugin editor → Module workspace: manages modules
- Module workspace → Analysis modules: hosts modules
- Module workspace → Milkdrop renderer: hosts module
- Module workspace → VirtuPet: hosts module
- Analysis hub → Analysis modules: publishes frames
- Milkdrop renderer → libprojectM: renders with
- Plugin editor → Pink XP theme: uses theme
- Standalone app → Loopback capture: captures loopback
- Standalone app → Audio dump recorder: records audio
- Update checker → Update service: checks version
- Telemetry client → Update service: sends telemetry
