16 May 2024
Benben v0.5.0 Progress Update
Whew, progress on Benben v0.5.0 is going a lot faster than I expected 😅 But that’s a good thing! The trunk currently has all of the new formats implemented except for MIDI as far as playback goes (rendering Vorbis/Opus/MPEG-1/MIDI isn’t done yet), and has had high quality resampling added. The high quality rendering is especially cool to me personally since I basically hand-ported libsamplerate v0.2.2 from C to Crystal to implement it. This actually improved performance slightly since some of the things that happen in libsamplerate could be elided by moving to an OOP model. So Benben can now resample anything, and it’s going to be high quality throughout.
A few more minor improvements are also finished, including tag information that scrolls (instead of just cutting off), tag fields that adjusts themselves according to the format, and files are now checked in parallel for faster startup times.
A lot of internal changes and refactoring have happened as well, including the planned changes to how the loaded configuration is handled. Because of how much has already changed internally since v0.4.1, I’ve decided to take a week or so off from heavy development and just heavily use/dogfood Benben as a normal user to see how it works. Though to be honest, that’s basically what I do anyway XD One reason Benben was started, after all, was because I wanted a player to behave in a way that I wanted, not how others wanted. But yeah, about 55-60% of the milestone checkboxes are filled in, so now seems like a good time for a short “let’s see how this is working so far” period.
Direct link to the above video
What Still Has to Be Done
The hard parts are finished, so it’s actually probably closer to 70% done than 55-60%. Here’s what’s left for v0.5.0 as far as actual milestones go:
- MIDI playback
- MIDI rendering to WAV/Au
- Ogg Vorbis rendering to WAV/Au
- Opus rendering to WAV/Au
- MPEG-1 rendering to WAV/Au
- Configuration updates for MIDI
- Initial theme support
- Some UI flashiness
- Refactor the FileManager to do file type checking only once
- A “remove from play queue” function at runtime
- VRC7 support in YunoSynth
And also a few to-dos that I have written down:
- Revisit compressed module loading (this is a libxmp thing). These probably won’t be “officially” supported for v0.5.0, and more of a “hey if it works for you, awesome” thing.
- Test that “Frankenstein” MPEG-1 files work fine. It’s highly unlikely a user will ever encounter one, but it’s something I want to make sure works.
- Fix auto-directories for non-VGM formats when rendering. You know, the
-o '%{game}/%{artist}/'
formatting thing you can do when rendering. - Ensure CUE files are being generated correctly. They probably are, I just want to double-check since it’s not a feature I use very often.
You can follow the milestone progress on the associated wiki page, and the status of the trunk code here.