Posted May 29, 2023 by stgiga
#non-lossy #design process #efficient engineering #success story #non-destructive optimization #clever design #asset creation #improvement #music #what went right #soundfont #jummbox #tricks of the trade #masterful design #non-destructive optimization gone right #miraculous design #how it was done #lossless optimization #truly-lossless optimization #deliberate compatibility in a good way #labor of love #luckiness #libre #dejunking #junk removal #getting rid of junk non-destructively #long project #refinement
When designing this SoundFont, I had to make it fit under 1 gigabyte in order to fit in Directwave (part of FL Studio), since one of my most formative co-authors on this project (Micasddsa) used it, but ironically his version was over 1 gigabyte and did not work in his software of choice (Directwave). The JummBox patches by Micasddsa had not been implemented yet into the bank (back then it was BeepBox, and this was in very late 2020). Yet I was supposed to get everything down to fit under 1GiB. Here’s how I did it:
Firstly, Micasddsa had included the broken and incomplete drumkit that BeepBox (and JummBox) have. Note that he had sampled ALL samples in the bank (including the drumkit) at 32 seconds in length to help work around a bug in Polyphone (a SoundFont editor). Now, the drumkit in addition to being broken and incomplete sounded terrible (as did the rest of the bank before my involvement. The pitch was far too high. For a month I had written off the bank as an unfixable loss. In December 2020, I decided to attempt using Polyphone’s “Automatically Determine Root Key” button, something I had fruitlessly tried using on other SoundFonts lacking tuning. Against all odds, it worked like a charm and saved the whole thing.) I removed it and replaced it with Zandro Reveille’s libre OPL-3 drumkit at first (took me a day to find out that Zandro’s bank was the key), and over time I made said drumkit more compatible using the OPL2 version of that SoundFont (also libre), whose drumkit provided stuff below the OPL-3 one (and modulators), as well as the drumkit from William B. Santos’s libre YM2612 GM SoundFont, which covered the drum notes above the OPL-3 drumkit. For Drum Note 22 (Low Beep), I used the “Low Beep” from William B. Santos’s Piconica GM SoundFont (which is also libre). For the Roland SC-8850 kick and snares that reside at the very beginning and very end of the drum note ranges, I used little-scale and drunkenjesus’s YM2413 FM SoundFont’s drumkit (the SoundFont is also libre), which has kicks in the place that Roland has at the very bottom of the range, as well as what Roland has at the top of its range, except in FM. The end result is a libre retro drumkit that covers the entire Roland SC-8850 Standard Drumkit range, except it’s in FM. The file size issue of the old drumkit that pushed the original bank over 1GiB disappeared when the original Zandro kit was put in all those years ago before the addition of JummBox patches.
Fast forward to the day when the JummBox patches were added after receiving them from Micasddsa (who I first contacted via SoundCloud), and I went slightly over. After that, there were other things that needed to be done to get the bank under 1GiB.
The first thing done is that Micasddsa had accidentally completely duplicated an instrument (one of the synth vox patches), so I got rid of that duplicate. Secondly, I removed the short Seashore, but that left me the equivalent of one patch over the limit, so at that point I got rid of Chip Noise (originally mapped to a second drumkit in the Micasddsa version, in my BeepBox version I had mapped it to Roland SC-88Pro+Roland SC-8850 White Noise, which if a MIDI containing it is played on a General MIDI device or Roland SC-55 GS device, as well as GS compatibility modes on Yamaha XG synthesizers as well as GS compatibility modes on fancy modern-era Roland synths such as the Integra-7, will play as Seashore) because Roland SC-88Pro and SC-8850 MIDIs would play Seashore instead, which was done as filtered noise. This turned out to be a problem with rarer Japanese SC-88Pro MIDI files. See, I had mapped the patches outside of General MIDI to Roland SC-8850 GS patches, finding equivalents for ALL of them . So I went to play certain Japanese Roland SC-88Pro MIDIs that used Sine Wave (Triangle Wave in the SoundFont, which is closer to NES than Sine), White Noise (Chip Noise is closer to NES noise than conventional/SC-88Pro/SC-8850 white noise), and Square Wave (which is cleaner in my SoundFont) to simulate Nintendo Entertainment System music. The Seashore as White Noise turned out to ruin this. But I did not have room at the time. Fast forward to August 2022: A user known as Retro Player makes a clone of my SoundFont that features a shorter-but-mono Seashore that freed up enough space to allow me to fit the Chip Noise back in. However it being mono meant I had to give users a choice between Chip Noise (a patch that is not strictly White Noise, instead opting to replicate the LFSR/Linear Feedback Shift Register noise in many retro sound chips), or a stereo Seashore with no retro noise. Fast forward to late February 2023, and Retro Player makes another clone, in which the Seashore is stereo again, has the same quality, and does not push the bank over 1GiB, require removal of Chip Noise or ruin libre status. It, like everything in my bank, is single-layer, even though other stuff in that Retro Player bank isn’t. I got very lucky, and thus the bank ended up unabridged and under the limit. It also fixed some MIDIs that had never previously worked.
So by getting rid of junk, and by utilizing what my imitator made (which was also libre), I was able to fit the bank unabridged into just under 1GiB. It’s 1020.90 MiB. I didn’t reduce quality, nor did I make the bank mono or cut samples. I managed to adapt ALL source material I was given into something able to work on even the pickiest environments that ignore that the SoundFont standard has a limit of 4GiB, instead cutting you off at 1GiB (FluidSynth 1.x, Timidity, DLSMusicDevice, Fruity SoundFont Player, Directwave, GarageBand, Logic Pro, Logic Pro X, Pro Tools, and many other players.)
In addition, the bank is FULLY compatible with OpenMPT due to being single-layer (this also means that when playing complex songs on SoundFont players with low polyphony, you won’t have a problem.) Even the stereo works, which OpenMPT is picky about. Also, its size of being just on the verge of 1GiB means it can fit nicely and snugly on a 1GiB NAND chip using the Silicon SoundFonts feature from Section 11 of the SoundFont specification.
Additionally, the bank remains completely libre, even after ALL my additions and edits. It is usable in both commercial and indie games without problems.
I spent 3 calendar years making this, and the fact that it is libre and fits into a size that even picky noncompliant players will be happy with is honestly amazing, and the way I did it is clever. Also, its 7-Zip archive (done with ALL LZMA2 maximum settings) is 198MiB. So your game can just have it in 7z or xz to save on download time. Basically, this bank was masterfully-crafted over 3 calendar years in a way that I feel harks back to how Resident Evil 2 was made to fit on the Nintendo 64 without problems. I was 18 when I first got involved with this project, and I turn 21 tomorrow.
This 3-year project is something I intended for game developers, composers, and more to use in their projects as an asset, but it also is good for listening to MIDI music with. Its OpenMPT compatibility allows one to make JummBox songs into self-contained MPTM modules, which can be played on MS-DOS with OpenMPT123 on a 386 (assuming 387 FPU too) DOS PC from 1985 for people who care about real hardware, as well as being handy for so many other purposes. It’s a project that is a labor of love, and I hope you enjoy it! I hope this story about how it was cleverly, masterfully, and faithfully crafted to fit in a compatible size was an enlightening story as to how one can make their content fit into a size where everybody wins, without being lossy!
Best Wishes,
stgiga