A modular music player composed of a background daemon and multiple frontends.
The architecture separates playback logic from user interfaces:
- Daemon — written in C/C++, communicates with GStreamer and manages playback.
- GUI — written in Rust.
- TUI — planned but not implemented yet.
The goal is to keep the playback engine independent so that multiple clients (GUI, TUI, scripts) can interact with the same daemon.
listen-listen
│
├── src/
│ ├── daemon/ # Playback daemon (C)
│ ├── common/ # Shared logic used by daemon/tests (C/C++)
│ ├── gui/ # Rust GUI client
│ └── tui/ # Future TUI client
│
├── build/ # Generated build output
└── Makefile
Daemon
- Handles playback
- Communicates with GStreamer
- Will manage queue, playlists, and library scanning
GUI
- Rust-based graphical interface
- Communicates with the daemon
TUI (planned)
- Terminal interface
- Not implemented yet
Required for building the daemon:
- gcc
- g++
- pkg-config
- gstreamer-1.0
- taglib
Example (Arch Linux):
sudo pacman -S gcc pkgconf gstreamer taglibExample (Ubuntu/Debian):
sudo apt install build-essential pkg-config libgstreamer1.0-dev libtag1-devThe GUI is built using Rust, so you also need:
- rust
- cargo
Install with:
curl https://sh.rustup.rs -sSf | shClone the repository:
git clone --recursive https://github.com/Shreyaskr1409/listen-listen
cd listen-listenThe project uses a simple Makefile to orchestrate builds.
makeThis builds:
build/listen-gui
build/listen-daemon
make debugBuilds:
build/listen-gui
build/listen-daemon
build/test-common
test-common is useful for testing code in src/common.
make debug-guimake debug-daemonAll compiled binaries are placed in:
build/
Example:
build/
├── listen-daemon
├── listen-gui
└── test-common
Object files are stored under:
build/obj/
make cleanRemoves the entire build/ directory.
The project is still in an early stage.
Working:
- Basic daemon build
- GStreamer integration
- Rust GUI build pipeline
Planned next steps:
- Folder scanning
- Queue system
- Playlist management
- Gapless playback
- HTTP/stream URI support
- TUI client
- Improved daemon-client protocol