A cross platform, local music player.
Find a file
kistu ca67aeeb2d
Some checks failed
/ linux-build (push) Has been cancelled
build(pipeline): include build-pipeline branch to run on push
2026-03-03 08:06:25 +02:00
.forgejo/workflows build(pipeline): include build-pipeline branch to run on push 2026-03-03 08:06:25 +02:00
application-forms ui(minified): bottom bar shortcut to track view 2025-10-18 12:24:07 +02:00
application-headers build(ma/vlc): flags to selectively compile for miniaudio/libvlc 2026-03-02 08:27:20 +02:00
application-src build(ma/vlc): flags to selectively compile for miniaudio/libvlc 2026-03-02 08:27:20 +02:00
application-styling dev: initial release 2025-10-11 20:19:41 +02:00
build-assets/AppDir/usr/share build: AppImage template 2025-11-25 15:10:46 +00:00
documentation dev: initial release 2025-10-11 20:19:41 +02:00
libraries lib: libvlc bindings for c++ 2026-01-25 23:24:47 +02:00
screenshots docs: screenshots of minified view 2025-10-18 12:38:35 +02:00
.gitignore feature: libvlc for audio 2026-01-25 23:30:02 +02:00
license.txt license: licensed under GPLv2 only 2025-10-19 22:30:16 +02:00
readme.md docs(readme): libvlc/miniaudio builds 2026-03-02 08:36:23 +02:00
RhythmboxReloaded.pro build(ma/vlc): flags to selectively compile for miniaudio/libvlc 2026-03-02 08:27:20 +02:00
RhythmboxReloaded.pro.user build(ma/vlc): flags to selectively compile for miniaudio/libvlc 2026-03-02 08:27:20 +02:00

A cross platform offline music player.

Built with two criteria in mind:

  • playback completion recording
  • clean uncluttered interface

minified-playlists-view minified-playlist-view minified-track-view minified-track-private-view

playlists-view playlist-track-view

spectrogram-view

Installation

To use this application, simply download and run the executable for your platform from releases.

Platform File
Linux RhythmboxReloaded.AppImage
Window -
Mac -

The recommended approach for creating executables is building the application on that platform. Building for Windows and Mac requires some extra work that will be completed once the application is stable on Linux. If you would like to use it on those platforms or would like to build the application from source, follow the section on development.

Creating executables targetting different linux distributions was more complex than anticipated. The final application requires certain libraries which - depending on the system - may or may not be present in different locations. This means an executable created on Alpine Linux, for example, will not run on Arch Linux. The solution is to include the libraries with the executable, or embed it in the executable itself.

The provided AppImage was build using linuxdeployqt on Ubuntu 22.04 (the oldest standard support release). It should work on newer distributions, but probably will not work on older ones. It has been tested on Arch Linux. If it does not work on your operating system, you will need to build it manually.

Testing

This application is unstable. It has only been tested on Linux and fulfills the minimum feature requirements, but there may be some unexpected behaviour.

Backup your data frequently - all files in the application storage are important, with the exception of the spectrals directory.

Development

This application was developed using the QtCreator IDE. It uses qmake as part of the build process.

Build using QtCreator

Clone this repository using git or download the source as a ZIP file. Import it into QtCreator by clicking 'File' -> 'Open Existing File or Project' and selecting RhythmboxReloaded.pro file. Have a look at the design section if you are intrested in modifying the source code.

To build the application, click on the 'Build' icon at the bottom left of the QtCreator IDE. If everything goes well, this should create an executable under the build/Desktop-Debug folder.

Build Manually

Ensure you have qmake6, make and g++ installed. Create a build directory and use qmake6 to generate the Makefile, then run it:

mkdir build
cd build
qmake6 ../RhythmboxReloaded.pro
make

This will copy the source and header files to the build directory, create object files and generate the executable.

By default, the application will compile for miniaudio. To compile for libvlc use:

qmake6 CONFIG+=USE_VLC ../RhythmboxReloaded.pro
make

Refer to the [audio engine][#audio-engine] section for the difference between miniaudio and libvlc.

Packaging

AppImage

Use the provided AppDir as a template when creating an AppImage. Copy the executable for your platform to AppDir/usr/bin/ and edit the desktop file under AppDir/usr/share/applications/ as necessary.

To create the AppImage using linuxdeployqt:

./linuxdeploy.AppImage AppDir/usr/share/applications/rhythmbox-reloaded.desktop -appimage -qmake=/usr/bin/qmake6 qmldir=application-styling/ -qmldir-importscanner=/usr/lib/qt6/libexec/qmlimportscanner

Replace the qmake and qmldir-importscanner locations with where those binaries are located on your system.

Design

Source Code

The application source code is divided as follows:

.
├── application-forms (user interface for main window and reusable elements)
├── application-headers (declarations)
├── application-src (definitions)
├── application-styling (css and svg resources)
├── documentation (using Doxygen)
├── libraries (external libraries)
└── RhythmboxReloaded.pro

Audio Engine

miniaudio is used as the audio library and only supports playback of mp3, flac and wav files.

libvlc supports a extensive list of formats. It is not bundled with this application and must be installed manually. Note that libvlc is required, which may not be provided when installing VLC by some sources (like Snaps, AppImages and FlatPaks) - using the default package manager is preferred. Ensure that vlc is in the system path; if it cannot be detected, rather use the miniaudio build.

Data Storage

Application Data

The Qt application directory (AppDataLocation) for different plaforms as listed in the documentation for QStandardPaths:

Platform Location
Linux "~/.local/share", "/usr/share", "/usr/local/share"
Windows "C:/Users/<USER>/AppData/Local", "C:/ProgramData", "<APPDIR>/data"
Mac "~/Library/Application Support", "/Library/Application Support", "<APPDIR/../Resources>"

<APPDIR> is the location your application was installed/extracted to.

Application Directory Structure

.
├── playlists
│   ├── playlist1.xml
│   └── playlist2.xml
├── playlists.xml
├── recorder
│   ├── playlist1
│   │   ├── track1.xml
│   │   ├── track2.xml
│   └── playlist2
│       └── track6.xml
└── spectrals
    └── playlist1
        ├── track1.png
        └── track2.png

The list of all playlists are stored in playlists.xml. A playlist is defined by xml files in the playlist directory that store the title, artist and file path of audio files.

The recorder directory records track completions. Each track has a corresponding xml file with a series of timestamps.

The spectral directory stores the generated spectrals. Spectrals are generated as required, and may take up a significant amount of storage. It is safe to delete this directory - spectrals will simply be regenerated when required.

Audio Files

Audio files are never modified - adding tracks to a playlist simply stores the file path. This can be (and most probably is) in different external folders.

If a file is renamed or moved, the playlist must be updated to reflect the change. This can be done graphically by chosing a new location for an existing track, or manually by editing the corresponding playlist file in the playlists directory.

Limitations and Future Development

Play queues are expected to be implemented soon.

Better metadata handling is required - the current solution is quite restrictive. More research is needed to find and integrate a robust metadata library for the supported file formats.

Album art support was initially implemented in the playlist view, but severely degraded performance. A more optimised approach is required.

There is no graphical means of rearranging the order of tracks in a playlist. The xml file needs to be edited manually - see the section on data storage for the location of the file.

Visualizations for viewing playback records are planned, but this may be implemented as a seperate tool if it does not integrate well with this application.