| Crates.io | jolteon |
| lib.rs | jolteon |
| version | 0.1.0 |
| created_at | 2024-12-13 16:46:24.704511+00 |
| updated_at | 2024-12-13 16:46:24.704511+00 |
| description | The best music player. |
| homepage | |
| repository | https://github.com/lautarodragan/jolteon |
| max_upload_size | |
| id | 1482344 |
| size | 1,702,621 |
The best music player.
Tested only on Linux
Binaries are automatically built and published here, in the GitHub repo, built for Linux and Mac, for every new commit to main.
π§ They are currently being published as zipped artifacts uploaded to workflow runs, but not yet as releases. They will be automatically published as releases in the future. For now, the only way to get the releases it to navigate to the CD workflow, select the most recent one, and download one of the files listed in the Artifacts section in the lower part of that page.
See Developing down below.
1 through 5 select the different screens. The top bar shows the available screens and highlights the active one.Tab cycles through focusable elements in the screen.Ctrl+Space toggles play/pause.PAUSED indicator is displayed in the lower-right corner on the screen.Esc to exit filtering. Pressing Enter to play a song will also exit filtering mode.Enter will add the selected song or playlist to the queue. Alt+Enter will play it immediately.j to add the selected file or folder to the Libraryy to add the selected file or folder to the QueueEnter to play the selected filej or y on it instead..cue sheet file support
.cue file will be grabbed from the media file itself.jolt files to override audio metadata non-destructively
artist, album and disc_number. Entries in the .jolt file take priority over metadata
in media files and cue sheet.unwrap. Only true bugs in the application should crash Jolteon. Any external source of indeterministic should be
handled accordingly.assets/actions.kv, but 90% the code
is already there, and this feature will be fully implemented soon.assets/theme.toml. 90% of the code allowing customization and multiple
out-of-the-box themes is already done, so this feature is likely to come soon.Displaying music by artist, album, track number and song title is generally more desirable than navigating the file system, but, sometimes, being able to manually structure and organize music beyond its metadata is convenient.
Personally, I prefer having all soundtracks under an OST folder, rather than mixed with bands. Same goes for "classic" music, or interpreted music in general (as opposed to original compositions).
There's no real reason not to support both approaches at once, by organizing music files by metadata but allowing grouping by virtual directories, which would enable things like:
Kitty supports full-resolution, full-color images. It shouldn't be particularly hard to add this feature.
I'll have to figure out the best UI and UX for this, and probably make it optional/configurable.
The following formats should work: aac, flac, mp3, mp4, m4a, ogg, wav.
Jolteon uses Rodeo to play music, with the symphonia backend.
I mainly use flac files, and some mp3. Other formats aren't usually tested.
So far, I've only found one issue with one flac file, which fails to perform seeks, and, after a few seconds of playback, causes the cpal thread to panic, crashing Jolteon.
This same file does run well with mpv. It does report errors reading it, but it still recovers well from them, and is able to seek without issues.
I tried switching the flac backend, but got even worse results. I looked into using libmpv and libavcodec, which, in my mind, are pretty much guaranteed to be more stable, but switching to them is far from trivial.
Figuring out the specific bug in the flac codes built in pure Rust is probably an easier and more reasonable path forward.
And Jolteon shouldn't crash if the audio playback crashes, but that's a story for another day.
I don't bench-mark Jolteon, but I do use it many hours, every day, and the release build always stays at .5-2% of my CPU, and usually 0% RAM (yes, that's a zero).
I manually compare this to mpv and the numbers seem to match, and my machine is 6+ years old, so I'm happy with it.
Specially considering RustRover and Chrome consume orders of magnitude more, permanently.
I haven't experienced any issues with the audio performance itself, but this is handled by symphonia and cpal, so there isn't a lot Jolteon can do to break it. Same goes for the UI, which is managed by Ratatui.
If you do experience any sort of performance issues β be it choppy UI, keyboard input response, choppy audio, or significantly higher CPU/RAM usage than mpv or any other well-known media player
for the same file, please open an issue reporting it. Being able to reproduce this with an audio file available in the public domain, or with a license that permits sharing it, would be ideal,
even if hard or very unlikely.
cmuschmod a+x and run.See HISTORY.md.
Rust is very friendly language βeven to newcomersβ, and has a very friendly community.
If you're new to Rust, I encourage you to give it a try. The Rust Book is pretty awesome, rust-lang.org/learn is generally a great starting point, and, for slightly more advanced topics, Mara Bos's Rust Atomics and Locks and Jon Gjengset's Crust of Rust series are great resources.
To install Rust and Cargo, see rust-lang.org/tools/install or rust-lang.org/cargo/getting-started.
To get started with Jolteon, just clone the repo and then run the project:
git clone --depth=1 https://github.com/lautarodragan/jolteon.git
cd jolteon
cargo run
You may need to install libasound2-dev:
sudo apt-get update && sudo apt-get install libasound2-dev
Check out the GitHub workflows for CI/CD for more details on what to do to get Jolteon to run and build.
Regarding the code: I try to keep the source code as clean and intuitive as I can, so modifying it should be (hopefully) relatively easy. I'll add an ARCHITECTURE.md soon-ish, which should make the source code friendlier to navigate.
Keep in mind I'm using my own fork of cpal right now. I have an open PR for cpal, with a small bugfix, that hasn't been merged yet.
See BUGS.md.