A Qt C++ library intended for desktop music players. API documentation is available.
- Can play any audio ffmpeg decodes (~everything)
- Plugin system for audio output, with support for:
- PipeWire
- PulseAudio
- SDL
- Calculates FFTs for audio visualizations
- Can play music over KDE's KIO system
- Can play audio CDs and provide basic audio CD track information
- Supports ICY metadata for radio streams
- Volume API keeps in sync with Linux desktop application volume
- A QWidget-based desktop example app and a QML-based Android example app
Building the library requires the following:
- A C++23-capable compiler (GCC >= 13)
- CMake >= 3.25
- pkg-config
- Qt >= 6.8
- QCoro 6*
- FFmpeg
- kissfft*
- SDL3*
- KDE Framework libraries:
- Extra CMake Modules
- KIO
- KCoreAddons
- KI18n
And the optional but recommended audio sinks:
- PipeWire
- PulseAudio
And for CD playing support:
- GNU libcdio*
[*] Fetched automatically by CMake if not found on the system, with the -DFetch=ON option.
Its tech stack relies on Qt, modern C++ jthreads and ffmpeg for decoding audio files. It primarily targets the Linux desktop with PulseAudio and PipeWire audio sinks, but it also has SDL support. Since SDL has audio sinks on ~everything, and the rest of the tech stack is cross-platform, probably it can run on anything.
Decoding and FFT calculations are done on their own threads; audio data transfers are via lockless queue pipes.
Dragon Media Backend implements a rather simple pipeline of input -> decoding -> sink (+FFT). The sink drives the pipeline so we don't have to.
The plan is to keep simple; more complicated DSP features will be implemented via PipeWire and perhaps exclusive to it.
This library is use-case oriented, currently that means just music players. It differs from Qt Multimedia and Phonon in that rather than provide raw PCM output/input, direct graph manipulation etc it would provide an API to accomplish the operation itself.
More specific plans available in the todo file.