|
|
||
|---|---|---|
| .forgejo/workflows | ||
| application-forms | ||
| application-headers | ||
| application-src | ||
| application-styling | ||
| build-assets/AppDir/usr/share | ||
| documentation | ||
| libraries | ||
| screenshots | ||
| .gitignore | ||
| license.txt | ||
| readme.md | ||
| RhythmboxReloaded.pro | ||
| RhythmboxReloaded.pro.user | ||
A cross platform offline music player.
Built with two criteria in mind:
- playback completion recording
- clean uncluttered interface
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.






