YunoSynth is a high-performance VGM playback library written entirely in Crystal. VGM files are sample-accurate music files ripped from video games. Rather than containing audio data like an MP3 or WAV file, they contain a log of the instructions that are sent to sound chips in these old game consoles and machines. This makes them much smaller (38 KB for the song below, versus what would be a 5.3 MB 192kbit MP3). YunoSynth is made up of a playback core that sends VGM instructions to various sound chip emulators that then produce PCM output.
The initial 0.1.0 release supports a large number of chips, but it’s still lacking a few chips supported by the VGM specification. My plan is to continue adding additional chips as time goes on until they are all supported. If you download any VGM files, just check the YunoSynth page to see if its chips are supported. Currently, you can play music from many arcade games, the PC Engine/TurboGrafx-16, NeoGeo, GameBoy, PC-88 and PC-98 computers, MSX2 computer, and Sharp X68000 computer.
Benben, meanwhile, is a command line player that uses YunoSynth. The program itself is written entirely in Crystal as well, though it does use bindings to PulseAudio and PortAudio to connect to your audio system. It can be used as a standalone player, and has optional effects that you can enable at will, such as a parametric EQ with unlimited bands, a configurable reverb effect, and stereo enhancement (these are also all pure Crystal lol).
Aside from playback, it’s also capable of rendering VGM files to both WAV and Au format. This is done in parallel, so the more cores you have, the faster it’ll work.
Here’s an example video where Benben is playing a song from a game called Rusty. This game is from an old Japanese computer system called the PC-98, and uses a Yamaha YM2608 for FM synthesis and ADPCM sample playback. There are more sample videos listed in the readme.
A pre-compiled x86-64 Linux binary in the form of an AppImage is available in the repo: Download v0.1.0
EDIT: v0.4.0 released: Benben v0.6.0 has been released - #4 by MistressRemilia
EDIT: v0.5.0 release candidates are now available: Benben v0.6.0 has been released - #5 by MistressRemilia