# isaacisaraloone/proyecto-2-reproductor-mp3 architecture

> Architecture diagram of the GitHub repository isaacisaraloone/proyecto-2-reproductor-mp3, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-12). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/isaacisaraloone/proyecto-2-reproductor-mp3
- Repository: https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3

## Overview

This is a desktop MP3 library and player. The main workflow presents a searchable track library, lets users select a track for playback or edit its metadata, and supports importing MP3 directories by reading tags and storing tracks. The graph separates UI orchestration, mining, playback, and catalog persistence. Some named modules were not excerpted; their capabilities and connections are included only where the supplied index or excerpts support them.

Main entry points: [`src/main/kotlin/interfaz/Controlador.kt`](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Controlador.kt) (UI controller), [`src/main/kotlin/interfaz/Main.kt`](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Main.kt) (Application startup), [`src/main/kotlin/reproductor/Reproductor.kt`](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/reproductor/Reproductor.kt) (Audio engine), [`src/main/kotlin/nucleo/AlmacenMusica.kt`](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/nucleo/AlmacenMusica.kt) (Music repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Desktop interface"]
  node_app["Application startup<br/>[Main.kt]"]
  node_controller["UI controller<br/>[Controlador.kt]"]
  node_view["Library view<br/>[Vista.kt]"]
  node_trackrow["Track row model<br/>[FilaRola.kt]"]
end

subgraph group_mining["Library mining"]
  node_miner["Directory miner<br/>[Audio.kt]"]
  node_analyzer["Tag analyzer<br/>[Analizador.kt]"]
  node_extractor["Metadata record<br/>[Extractor.kt]"]
end

subgraph group_catalog["Music catalog"]
  node_catalog["Music repository<br/>[AlmacenMusica.kt]"]
  node_dbmanager["Database manager<br/>[GestorBaseDatos.kt]"]
  node_sqlite[("SQLite catalog")]
  node_entities["Catalog entities<br/>[Entidades.kt]"]
end

subgraph group_playback["Audio playback"]
  node_player["Audio engine<br/>[Reproductor.kt]"]
  node_listener["Playback listener API"]
end

node_user(("Listener"))

node_user -->|"uses"| node_view
node_app -->|"initializes"| node_dbmanager
node_app -->|"creates"| node_catalog
node_app -->|"creates"| node_view
node_app -->|"creates"| node_player
node_app -->|"wires"| node_controller
node_controller -->|"handles events"| node_view
node_controller -->|"maps tracks"| node_trackrow
node_controller -->|"queries and edits"| node_catalog
node_controller -->|"starts import"| node_miner
node_controller -->|"controls playback"| node_player
node_player -->|"notifies events"| node_controller
node_miner -->|"analyzes files"| node_analyzer
node_analyzer -->|"returns metadata"| node_extractor
node_miner -->|"stores tracks"| node_catalog
node_catalog -->|"reads and writes"| node_sqlite
node_dbmanager -->|"opens and schemas"| node_sqlite
node_app -->|"closes"| node_dbmanager
node_player -->|"implements callbacks"| node_listener

click node_app "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Main.kt"
click node_controller "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Controlador.kt"
click node_view "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Vista.kt"
click node_trackrow "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/FilaRola.kt"
click node_miner "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/minero/Audio.kt"
click node_analyzer "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/minero/Analizador.kt"
click node_extractor "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/minero/Extractor.kt"
click node_catalog "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/nucleo/AlmacenMusica.kt"
click node_dbmanager "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/nucleo/GestorBaseDatos.kt"
click node_entities "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/nucleo/Entidades.kt"
click node_player "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/reproductor/Reproductor.kt"
click node_listener "https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/reproductor/OyenteMotorAudio.kt"

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_app,node_controller,node_view,node_trackrow toneBlue
class node_miner,node_analyzer,node_extractor toneAmber
class node_catalog,node_dbmanager,node_sqlite,node_entities toneMint
class node_player,node_listener toneRose
class node_user toneIndigo
```

## Components

### Desktop interface

- [Application startup](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Main.kt): `src/main/kotlin/interfaz/Main.kt`
- [UI controller](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Controlador.kt): `src/main/kotlin/interfaz/Controlador.kt`
- [Library view](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/Vista.kt): `src/main/kotlin/interfaz/Vista.kt`
- [Track row model](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/interfaz/FilaRola.kt): `src/main/kotlin/interfaz/FilaRola.kt`

### Library mining

- [Directory miner](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/minero/Audio.kt): `src/main/kotlin/minero/Audio.kt`
- [Tag analyzer](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/minero/Analizador.kt): `src/main/kotlin/minero/Analizador.kt`
- [Metadata record](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/minero/Extractor.kt): `src/main/kotlin/minero/Extractor.kt`

### Music catalog

- [Music repository](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/nucleo/AlmacenMusica.kt): `src/main/kotlin/nucleo/AlmacenMusica.kt`
- [Database manager](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/nucleo/GestorBaseDatos.kt): `src/main/kotlin/nucleo/GestorBaseDatos.kt`
- **SQLite catalog**
- [Catalog entities](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/nucleo/Entidades.kt): `src/main/kotlin/nucleo/Entidades.kt`

### Audio playback

- [Audio engine](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/reproductor/Reproductor.kt): `src/main/kotlin/reproductor/Reproductor.kt`
- [Playback listener API](https://github.com/isaacisaraloone/proyecto-2-reproductor-mp3/blob/main/src/main/kotlin/reproductor/OyenteMotorAudio.kt): `src/main/kotlin/reproductor/OyenteMotorAudio.kt`

### Other components

- **Listener**

## Connections

- Listener → Library view: uses (evidence: `src/main/kotlin/interfaz/Vista.kt`)
- Application startup → Database manager: initializes (evidence: `src/main/kotlin/interfaz/Main.kt`)
- Application startup → Music repository: creates (evidence: `src/main/kotlin/interfaz/Main.kt`)
- Application startup → Library view: creates (evidence: `src/main/kotlin/interfaz/Main.kt`)
- Application startup → Audio engine: creates (evidence: `src/main/kotlin/interfaz/Main.kt`)
- Application startup → UI controller: wires (evidence: `src/main/kotlin/interfaz/Main.kt`)
- UI controller → Library view: handles events (evidence: `src/main/kotlin/interfaz/Controlador.kt`)
- UI controller → Track row model: maps tracks (evidence: `src/main/kotlin/interfaz/Controlador.kt`)
- UI controller → Music repository: queries and edits (evidence: `src/main/kotlin/interfaz/Controlador.kt`)
- UI controller → Directory miner: starts import (evidence: `src/main/kotlin/interfaz/Controlador.kt`)
- UI controller → Audio engine: controls playback (evidence: `src/main/kotlin/interfaz/Controlador.kt`)
- Audio engine → UI controller: notifies events (evidence: `src/main/kotlin/interfaz/Controlador.kt`)
- Directory miner → Tag analyzer: analyzes files (evidence: `src/main/kotlin/minero/Audio.kt`)
- Tag analyzer → Metadata record: returns metadata (evidence: `src/main/kotlin/minero/Analizador.kt`)
- Directory miner → Music repository: stores tracks (evidence: `src/main/kotlin/minero/Audio.kt`)
- Music repository → SQLite catalog: reads and writes (evidence: `src/main/kotlin/nucleo/AlmacenMusica.kt`)
- Database manager → SQLite catalog: opens and schemas (evidence: `src/main/kotlin/nucleo/GestorBaseDatos.kt`)
- Application startup → Database manager: closes (evidence: `src/main/kotlin/interfaz/Main.kt`)
- Audio engine → Playback listener API: implements callbacks (evidence: `src/main/kotlin/reproductor/Reproductor.kt`)
