A small headless audio player for clojure powered by vlc
Vinyl is nice bit of clojure suger on top of the vlcj, the java native language bindings for libvlc (version 3.x) with a focus on being the audio engine for an audio player. It was developed to support the fairybox project.
The feature list includes:
- playback of any audio format vlc supports
- playback of media files, or folders, or playlist files with recursive scanning
- modern playback queue management features ("append", "add next with priority", move x to y, etc)
- expected playback and mixer controls: play, pause, volume↑↓, repeat, shuffle etc
From a software architecture standpoint the goals are:
- headless, bring your own controls and user interface (see fairybox)
- strict command query responsibility segregation (cqrs)
- an event-first architecture
- proper management of native resources to avoid jvm crashes
Explicitly out of scope are:
- becoming a generic "wrapper" around vlcj
- video
Limitations:
- libvlc 3.x does not support gapless playback (might change with 4.x)
- libvlc 4.x has nice support for replaygain and EBU R128, but it's not exposed yet via vlcj
Copyright © 2025 Casey Link [email protected] Distributed under the EUPL-1.2.