# payal0908/otodecks-dj-application architecture

> Architecture diagram of the GitHub repository payal0908/otodecks-dj-application, 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/payal0908/otodecks-dj-application
- Repository: https://github.com/payal0908/otodecks-dj-application

## Overview

OtoDecks is a JUCE desktop DJ application. A user imports tracks into a searchable, persistent playlist, selects a track for either deck, then controls playback, volume, speed, position, and reverb while viewing the waveform. The graph separates playlist management and persistence from deck controls and audio processing. The README documents the product capabilities; sampled source confirms playlist-to-deck loading and control-to-player calls. MainComponent’s audio routing beyond its declared members is not shown, so no mixer-routing edges are asserted.

Main entry points: [`Source/PlaylistComponent.cpp`](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/PlaylistComponent.cpp) (Playlist UI), [`Source/MainComponent.h`](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/MainComponent.h) (Main component), [`Source/DeckGUI.cpp`](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/DeckGUI.cpp) (Deck controls), [`Source/DJAudioPlayer.cpp`](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/DJAudioPlayer.cpp) (Deck audio player)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_startup["App startup<br/>[Main.cpp]"]
  node_main["Main component<br/>[MainComponent.h]"]
end

subgraph group_library["Playlist Library"]
  node_playlist["Playlist UI"]
  node_entries["Track entries<br/>[PlaylistEntry.cpp]"]
  node_persistence[("Playlist persistence")]
  node_file_reader["Playlist file parser<br/>[FileReader.cpp]"]
end

subgraph group_decks["Deck Playback"]
  node_deck_gui["Deck controls<br/>[DeckGUI.cpp]"]
  node_waveform["Waveform display"]
end

subgraph group_audio["Audio Processing"]
  node_player["Deck audio player<br/>[DJAudioPlayer.cpp]"]
  node_juce["JUCE audio framework<br/>[JuceHeader.h]"]
end

node_user(("DJ user"))

node_user -->|"launches"| node_startup
node_startup -->|"creates"| node_main
node_main -->|"owns"| node_playlist
node_main -->|"owns"| node_deck_gui
node_main -->|"owns"| node_player
node_user -->|"imports tracks"| node_playlist
node_playlist -->|"creates entries"| node_entries
node_playlist -->|"reads and writes"| node_persistence
node_playlist -->|"parses saved rows"| node_file_reader
node_user -->|"selects track"| node_playlist
node_playlist -->|"loads selected track"| node_deck_gui
node_deck_gui -->|"controls playback"| node_player
node_deck_gui -->|"loads and updates"| node_waveform
node_player -->|"uses audio sources"| node_juce

click node_startup "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/Main.cpp"
click node_main "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/MainComponent.h"
click node_playlist "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/PlaylistComponent.cpp"
click node_entries "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/PlaylistEntry.cpp"
click node_persistence "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/PlaylistComponent.cpp"
click node_file_reader "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/FileReader.cpp"
click node_deck_gui "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/DeckGUI.cpp"
click node_waveform "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/WaveformDisplay.cpp"
click node_player "https://github.com/payal0908/otodecks-dj-application/blob/master/Source/DJAudioPlayer.cpp"
click node_juce "https://github.com/payal0908/otodecks-dj-application/blob/master/JuceLibraryCode/JuceHeader.h"

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_startup,node_main,node_user toneBlue
class node_playlist,node_entries,node_persistence,node_file_reader toneAmber
class node_deck_gui,node_waveform toneMint
class node_player,node_juce toneRose
```

## Components

### Application

- [App startup](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/Main.cpp): `Source/Main.cpp`
- [Main component](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/MainComponent.h): `Source/MainComponent.h`

### Playlist Library

- [Playlist UI](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/PlaylistComponent.cpp): `Source/PlaylistComponent.cpp`
- [Track entries](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/PlaylistEntry.cpp): `Source/PlaylistEntry.cpp`
- [Playlist persistence](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/PlaylistComponent.cpp): `Source/PlaylistComponent.cpp`
- [Playlist file parser](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/FileReader.cpp): `Source/FileReader.cpp`

### Deck Playback

- [Deck controls](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/DeckGUI.cpp): `Source/DeckGUI.cpp`
- [Waveform display](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/WaveformDisplay.cpp): `Source/WaveformDisplay.cpp`

### Audio Processing

- [Deck audio player](https://github.com/payal0908/otodecks-dj-application/blob/master/Source/DJAudioPlayer.cpp): `Source/DJAudioPlayer.cpp`
- [JUCE audio framework](https://github.com/payal0908/otodecks-dj-application/blob/master/JuceLibraryCode/JuceHeader.h): `JuceLibraryCode/JuceHeader.h`

### Other components

- **DJ user**

## Connections

- DJ user → App startup: launches (evidence: `Source/Main.cpp`)
- App startup → Main component: creates (evidence: `Source/Main.cpp`)
- Main component → Playlist UI: owns (evidence: `Source/MainComponent.h`)
- Main component → Deck controls: owns (evidence: `Source/MainComponent.h`)
- Main component → Deck audio player: owns (evidence: `Source/MainComponent.h`)
- DJ user → Playlist UI: imports tracks (evidence: `Source/PlaylistComponent.cpp`)
- Playlist UI → Track entries: creates entries (evidence: `Source/PlaylistComponent.cpp`)
- Playlist UI → Playlist persistence: reads and writes (evidence: `Source/PlaylistComponent.cpp`)
- Playlist UI → Playlist file parser: parses saved rows (evidence: `Source/PlaylistComponent.cpp`)
- DJ user → Playlist UI: selects track (evidence: `Source/PlaylistComponent.cpp`)
- Playlist UI → Deck controls: loads selected track (evidence: `Source/PlaylistComponent.cpp`)
- Deck controls → Deck audio player: controls playback (evidence: `Source/DeckGUI.cpp`)
- Deck controls → Waveform display: loads and updates (evidence: `Source/DeckGUI.cpp`)
- Deck audio player → JUCE audio framework: uses audio sources (evidence: `Source/DJAudioPlayer.cpp`)
