30 May 2024
Benben v0.5.0 Now in Soft Feature Freeze, Release Date Set
WOO! Benben v0.5.0 is now basically “finished”, minus testing bug fixes. I’ve placed it into a soft feature freeze, with a hard feature freeze scheduled for 17 June 2024, and a tentative release date scheduled for 29 July 2024. The soft freeze is just in case I forgot to add something I really wanted, or deem something so easy that it’s trivial to add. So basically, it’s all testing from here on out. I’ve given myself extra time just because there’s SO MUCH to test in this release.
Final NEWS
Unless some last-minute feature gets added (highly unlikely), this is what the final NEWS will look like for v0.5.0.
- Breaking change: The config file format has changed. You are encouraged to backup your current config, then let Benben create a fresh one that you then re-edit.
- New: MP3, MP2, and MP1 support added.
- New: Module file support added via RemiXMP. The interpolation mode can be changed at runtime with the ‘i’ key.
- New: FLAC file support added via RemiAudio.
- New: Opus file support added.
- New: Ogg Vorbis file support added.
- New: MIDI file support added.
- New: Playback of WAV and Au files added.
- New: MPEG-1/Module/FLAC/Opus/Ogg files are resampled using a high quality resampler based on libsamplerate when their sample rates do not match the player’s output rate.
- New: Song-specific configs can be reloaded at run time with the ‘C’ key.
- New: theme support. If truecolor ANSI support isn’t working, and you know your terminal supports 24-bit colors, try setting the COLORTERM=truecolor environment variable before using Benben.
- New: Added the –long-version argument.
- New: More startup animations added.
- Change: The maximum sample rate is now 48KHz.
One thing that did NOT make it in was the VRC7 support in YunoSynth. This is a low priority for me, so I’ve decided to just move this to the eventual v0.6.0.
Regarding the change in maximum sample rate… well, I feel that one needs some explanation. There’s basically two reasons for it, where the first is that libxmp and Opus are both limited to a maximum of 48KHz. More specifically, libxmp (which handles its own resampling internally) has a maximum output rate of 48KHz. Meanwhile, Opus files just have a flat maximum rate of 48KHz, and so even though we handle Opus resampling ourselves, no Opus file will ever go above 48KHz. Now I could add logic to detect a desire to go above this, and then just resample to a higher sample rate. But doing so doesn’t make so much sense in libxmp’s part since it’s then being resampled twice in a row. Additionally, and this is my second reason for making the maximum 48KHz, you really don’t need to go above 48KHz for good audio. Human hearing generally goes from 20Hz to 20KHz, and so, using the Nyquist–Shannon sampling theorem, that means any audio that we want to reproduce within that range needs a sampling rate of at least 40KHz. CDs go over this a bit with a 44.1KHz sample rate, and 48KHz gives even more padding room. While there are some arguments that things like harmonic distortion and whatnot at even higher frequencies interact with lower frequencies, it’s so minor that it’s imperceptible. Basically, anything above 48KHz is effectively pointless for audio. In fact, during my audio engineering days, I quickly learned that sampling rates above 48KHz were a useless waste of resources, and that the recommendation was to master at 48Khz, and past that, increasing the bit depth was the proper way to raise quality instead (48Khz 32-bit float was what I learned to use when mastering, and to never go below 48KHz 24-bit signed integer audio1). Given all of this, I’ve decided to limit the output rate to 48KHz, as it’s a good reasonable upper limit for high quality audio. Benben already uses 32-bit float when playing (64-bit when rendering), so that doesn’t need changing.
Anyway, with this release, Benben becomes an all-purpose music player. VGM support is still in it, is still a first class citizen (and still done entirely in Crystal), and will never be removed. It’s just a much more fleshed out program now.
Oh, and there’s a FAQ page for Benben on the wiki now.
Themes!
So yeah, Benben v0.5.0 comes with theme support! You can read about the format, as well as where themes are stored, here in the wiki:
The format is not 100% set in stone yet, but I can already assure you that nothing will be removed from it before v0.5.0 comes out. Currently themes mainly change text colors, and also are where the VU meter gets customized. I may add a dash of color to the progress bar before release as well (cough “soft feature freeze”), but that’s it.
The theme format has a version
field so that I can (hopefully) not break
themes in the future should I modify the format, like what’s happened with the
configuration format.
Future Plans
I already have a few milestones for v0.6.0 and the eventual v1.0.0 listed in the wiki. Basically the plan from here on out is just to make Benben more awesome by polishing the user experience, adding formats (or porting them to native Crystal), and making it look more flashy. I have no idea when I’ll get around to v0.6.0, let alone v1.0, but it’ll probably be before the end of the year. Heck, I dunno how many more v0.x releases between now and v1.0.0 there will be, but it feels like that’s something that’s now visible in the horizon.
I also kinda sorta want to play around with an alternate UI (Nuklear? imgui? Dunno) before v1.0.0, but don’t hold your breath on that one, as it may not ever happen. I prefer TUI stuff in general anyway, it’s just a cool thought that it could potentially also be graphical.
So yeah… I kinda feel like v0.5.0 is the point where Benben is no longer just a fun toy, but a real tool that people can use everyday. Basically, v0.5.0 is the “big one” that forever changed Benben. I’m stoked as heck for it.
Footnotes
- 1: I learned this from a mastering course from Steinberg, and have seen it repeated in multiple places since then. Unfortunately I cannot remember the course’s original name.