- C 83.5%
- C++ 7.5%
- Zig 3.5%
- Objective-C 1.9%
- Jupyter Notebook 1.8%
- Other 1.5%
|
|
||
|---|---|---|
| lib | ||
| src | ||
| zig-pkg | ||
| .gitignore | ||
| .ignore | ||
| build.zig | ||
| build.zig.zon | ||
| imgui.ini | ||
| login.cfg.example | ||
| README.md | ||
Sencha
Fast, lightweight, & reliable music player.
Sencha is the music player I wish I've had those two or so years ago when I'd set up my Navidrome server for the first time.
Since then, I've been on the lookout for Navidrome-supporting music players that aren't complete garbage, only to find that basically only Feishin works, and not very well at that. Like, I don't really like being a hater, but. C'mon. Get your frickin' playback working reliably before you think about making the app pretty.
So, the goal of Sencha is the total opposite: its UI is written hastily and lazily in ImGui, but it is really frickin' reliable and predictable.
It's also an album-oriented music player: if you're not an album listener, this is probably not the player for you. I've always wanted a player that had a queue and a shuffle that's actually aware of albums, rather than being programmed to work with single songs only.
So, Sencha is that. My dream music player.
It's still very much a prototype though, so don't expect too much.
Questionable design decisions
-
96kbps Opus is a pretty good quality-file size tradeoff, so that's the only format it supports. I can't hear any improvements in quality at higher bitrates, and fast internet is not an excuse to waste your bandwidth on FLAC files, because one day your ISP will have an outage and you'll be left streaming music over USB tethering from your phone. Configure your Navidrome accordingly to support transcoding.
-
Every song you've ever listened to is cached on disk, because you really shouldn't be wasting bandwidth for fetching it again, and it's nice to still have some music if you go temporarily offline. Maybe I'll add a purge option at some point to prevent it from growing indefinitely, though.
-
The UI is made with Dear ImGui, because I really could not be bothered with a different UI framework at this point.
-
It's written in Zig, because Zig is fun. The code will probably break a few times, but hey, maybe Zig will get a 1.0 release in the next 5 years or so and will work.
-
The dependencies are vendored aggresively. The Zig ecosystem is still young and some dependencies are of... questionable quality, so I have to patch them myself. Most of them are C bindings which are not very difficult to maintain. And I'm not gonna update ImGui, I can't be bothered.
-
THERE'S GAPLESS PLAYBACK!!!
Trying it out
There is no configuration interface.
Copy login.cfg.example into login.cfg and fill out your login credentials and stuff.
Then, build the thing and start it:
zig build -Doptimize=ReleaseSafe
./zig-out/bin/sencha