💾 Archived View for nanako.mooo.com › gemlog › 2023-06-05-a.gmi captured on 2024-06-16 at 12:49:09. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-12-28)
-=-=-=-=-=-=-
I figured I'd write up a gemlog where I mention the plans I have for the next
few months. Partially because my Mastodon/Misskey accounts are probably not the
right place, and also so that *I* have something to look back on ^_^
So the first 1/3rd or so of last year was mainly spent writing CL-MeltySynth,
Haematite, and midi123. These turned out pretty well, I think, and while
CL-MeltySynth is currently a bit behind Haematite, and midi123 needs a bit of
love, all of them still in a good, working state.
The first 1/3rd or so of this year was similar in that I spent it on a new set
of projects. YunoSynth is a VGM playback library that supports most of the same
chips that VGMPlay already supports (in fact, it's based on VGMPlay, but it's
cleaned up and OOP-ified). The emulation cores are mostly from the MAME
Project. Benben, meanwhile, is my new console-based player that uses YunoSynth.
It was initially based on midi123 internally, but was largely restructured to
have a much cleaner design. Both Benben and YunoSynth are written entirely in
Crystal. The only bindings that are used (and only in Benben) are to PortAudio,
PulseAudio, and ZStandard.
The main things I want to do with CL-MeltySynth are bringing it up to speed with
Haematite, and removing some unneeded consing in the rendering loops. And for
both of those, I would like to make it so that the SoundFont isn't entirely
loaded into RAM at startup. With midi123, I basically want to restructure it so
that, internally, it's a lot closer to Benben.
I'm really happy with how all of these have turned out. Doing larger projects
like these in Crystal vastly improved my understanding of the language, and my
skill set in general. But none of these are my end goal.
For the past two (three?) weeks I've been doing a Common Lisp equivalent of
YunoSynth called SatouSynth. Right now I've only got a few chips implemented,
but it's already performing *very* well, and I've got almost all of the core
framework ported, save for the DAC streaming bit. My reason for creating it is
actually the first of my goals for the near term: create a GUI player for VGM
files using McCLIM. Doing any sort of GUI program in McCLIM is something I've
wanted to do for a while now, because holy crap is that toolkit just wacky and
totally different from everything else. Also, I haven't found any GUI toolkits
that I'm personally happy with on the Crystal side, so that's another good
excuse to use Lisp and finally work with McCLIM.
Besides, I love both languages, and I'd hate to ignore one for the other <3
I'll likely be starting the design of the McCLIM GUI player this week now that
SatouSynth supports a small handful of chips, and focus on it for the next month
or so. I might also port a few other chips that are low-hanging fruit, like the
YMZ280b and OKI MSM62xx chips.
One thing to keep in mind is that SatouSynth does **NOT** replace YunoSynth, and
the GUI player does **NOT** replace Benben. I am fully committed to supporting
YunoSynth, and extending it further with new chips and features. More
generally, I'm fully committed to Crystal just as much as I am to Common Lisp.
I just need a break from Crystal for a bit.
YunoSynth is still lacking a few chips, the big ones being the YM2612 and
SN76489 (aka, the ones the Sega Genesis use). These are looking like they'll be
a PITA to port, which is why I haven't tackled them yet. But I do want to
eventually, and I might just do that after I get the GUI player in a usable
state. So my primary longer term goal is adding more chips to YunoSynth, and
also SatouSynth.
Beyond that, I have a VGM player (soon two) and a midi player. I also have code
written that plays back FLAC and mp3 files. Why not combine them? That's one
of my more long-term goals. Whether this ends up being a command line player, a
GUI, or both is yet to be seen, but that's kind of where I want to end up with
all of this.
I'm also still wanting to port a game engine to either Crystal or Lisp. My port
of Doom for Crystal is still sitting around, and though it's not playable, it
does boot and show levels. But I'm honestly kinda burned out on Doom. I think
instead, I'll try to port another game, possibly OpenTyrian. If I do
OpenTyrian, then maybe I can also add modding features and turn it into an
actual good game, not just some euroshmup with good music :-P
In truth, I'll probably do the game port first before I tackle the all-in-one
player. For one, I don't have much need for an all-in-one player - I have emms
mode in Emacs, and that integrates with midi123 and Benben perfectly. Plus,
I'll probably want to take a break from all this audio stuff eventually.
So long-term will probably go roughly like this: more chips for YunoSynth and
SatouSynth, game port of some sort, and all-in-one player.
We'll see how it goes ^_^
--------- Page served by Aya https://nanako.mooo.com/fossil/aya/ Aya is under the GNU Affero GPLv3 license