Hacker News new | more | comments | ask | show | jobs | submit login
FatBoy SoundFont (fatboy.site)
318 points by rocky1138 40 days ago | hide | past | web | favorite | 63 comments

Love it!

I had to go back and listen to one of my favorite midi tracks - the Ultima online Buccaneer's Den theme.

Using this sound font there are some really major improvements. Not that the original instrumentation that shipped with machines of the day didn't have its charm.

I love the fact that we used to literally ship midi files around for game music - it's such a technically elegant approach and because it could be thought of as just 'musical markup' it was even trivial to add compositions to websites - when we had severe bandwidth limitations.

While there's no question that the addition of a mastering step and the ability to ship perfectly 'rasterized' music (to mix metaphors) has meant we have a perfect rendition of the composer's intent and is vital for a lot of musical expression, there was always something fun about the idea that music directors were practically composing symphonies to be played by individual orchestras on each user's machine.

> there was always something fun about the idea that music directors were practically composing symphonies to be played by individual orchestras on each user's machine

I like this way of looking at it. And with different sound fonts like the original vs the FatBoy sample posted on the site and ITT



it’s kind of like we get to listen to new interpretations of the music, where the sheet music remains the same but the conductor has told the orchestra to perform it different in terms of instruments used. I think.

Someone who knows about orchestra music and performance correct me if you think what I said was off base. I don’t know whether it is actually the role of the conductor to pick instruments. Wikipedia says:

> The primary duties of the conductor are to interpret the score in a way which reflects the specific indications in that score, set the tempo, ensure correct entries by ensemble members, and "shape" the phrasing where appropriate.


So I don’t know who actually picks the instruments that the orchestra will use.

A composer specifies which instruments play what, as a general rule.

We call it an ‘arrangement’ when a piece of music is reinterpreted with different instruments.

It also showcases the fundamental problem with MIDI/SoundFonts - it makes your music sound orchestry/jazzy. I know there are electronic/modern sounding SoundFonts out there, but unless they were specifically made for your song, they only partially mitigate the problem.

I've also found it hilarious to listen to the MIDI version of popular songs. They always sound like kids music.

I agree, shipping full audio tracks is somehow too "easy". Also really love C64 SID music and Amiga tracker music.

I pretty much only have old C64 music running non-stop in my headphones at work. If it was remastered to not sound like a SID-chip I wouldn't get my fix.

You should listen Machinae Supremacy. They are using actual SID hardware while composing their music.

I would be eternally in your debt if you uploaded that FatBoy UO track :) I had to go listen to the original after reading your comment and I can't believe how great it still is after all these years.

I rendered the MIDI with VLC & FatBoy. You can get it from here: https://cl.ly/13d40e7155a5

There should be download button at the top bar.

To continue that thought, in an interactive setting, shipping music in source form seems like it would offer some creative possibilities (thinking of things like iMUSE here).

> ... there was always something fun about the idea that music directors were practically composing symphonies to be played by individual orchestras on each user's machine.

And this is part of the problem - the latter part never developed. Sample playback is a lousy form of musical expression.

I want a pianist AI that plays Beethoven the way I like.

Unfortunately, there's little public R&D in this stuff - at one point I looked into the research for just synthesizing the sound from a MIDI recorded by a real pianist, and while some of the commercial actors have something that is okayish (Roland and Pianoteq), the public research just isn't there.

Nice work! I am working to improve the MIDI playback quality on my MIDI archive website, BitMidi (https://bitmidi.com), and I think this might help.

The main difficulty with a web-based MIDI player like BitMidi is that it's not feasible to force the user to wait for a 300+ MB SoundFont to download before starting in-browser playback. The current format I use ("patch" files) has a separate file for each instrument, so I can lazily load only the necessary instruments needed to play a single song. You can see the approach I use here: https://github.com/feross/timidity

Anyway, excellent work on this SoundFont!

Ideally for a web midi player if you are able to generate all the general midi sounds using fm synthesis like the old 80s midi boxes you could have a really tiny download size but it would still sound really cool.

Yeah, I'd love to be able to do this, but I'm not sure my audio abilities are up to it. Do you know of any existing JS projects that do this? Or good pointers to any information about the basics of synthesis?

Can't browsers just play midi files? I know we could in the 90s and 00s.

Sadly, browsers cannot play MIDI natively. Old version of IE used to be able to via the <bgsound> HTML tag but that's removed in modern versions and no other browsers support it.

For fun, I actually rebuilt <bgsound> for the modern web using a Web Component. https://github.com/feross/bg-sound

They can't play MIDI files directly but modern browsers can communicate with MIDI controllers which is quite cool.

Not directly. This was usually done through a plug-in such as QuickTime.

... QuickTime which itself can't play midi anymore.

Just spitballing some ideas:

* Create some kind of soundfont variant that uses 32kbit Opus for each instrument - yes, 32kbit is enough for good quality sound

* Offer a paid tier that renders the midi through something for playback, and/or hit up some companies for hosting

Without commenting on the design, I just want to say that I appreciate how well the information on the home page is laid out.

You addressed all of my questions in order and in a compelling way. Very solid melding of marketing and education.

Maybe I missed something while reading the page but the whole time I my biggest question was what it actually sounds like. At the very bottom is a "hear demo" link, that leads to a Youtube channel with one song. But there isn't a link to the original version, so I can't compare how much it improved.

Wonderful samples. None of the instruments are neglected; the standard is consistently high. And I'm happy to have clarity on the terms of use. So many (for example, Shan's Soundfont) have no stated license or provenance.

I'll be loading this into juicysfplugin[0] (my free, cross-platform soundfont synth) for a play.

[0] https://github.com/Birch-san/juicysfplugin

I realize it's somewhat ironic that I'm the one who posted the link but I myself am not a huge fan of the font itself. The site is cool, though. My main problem with the SoundFont is the same that many of them have: they, for some reason, mute the chirping sound in Duke3d's storm.mid. It totally changes the song and I just find myself getting frustrated when it's missing.

The changelog shows the font is still being tweaked based on real-life feedback:


And if you scroll down, there's an email address:


So you could try contacting the author about this issue

Thanks. I've sent them a message and included the MIDI file.

Excellent work!

My only complaint would be the too low snare volume.

I almost stopped making any music after I switched to a laptop and lost daily access to an old SoundBlaster card which only supported some obscure sound font format. One of the fonts supplied with the driver CD was named "eapci8m.ecw" and had some of the best sounding instruments I ever heard - and all that squeezed into an 8MB file!

Regarding the snare: here's a piece I did for my friend's acting-school-entry-exam-dance-routine back in 2007:

With Fatboy:


Original(caution: much louder):


The soundtrack of Descent 1 was composed on a Roland SC-88 (or a sister model), which was the "gold standard" Midi hardware module of the era. (Its samples formed the basis of the wavetable synth shipped with Windows 95.) I rendered here the Descent 1 title theme using FatBoy via FluidSynth: https://chris.pacejo.net/temp/descent/D1.ogg

It's good, but compare to a rendering from an actual SC-88: https://www.youtube.com/watch?v=xqrvsy7AeGw (not my rendering, though I do own an SC-88)

There are definitely nuances missing; e.g. 40 s in, when there's just the bass vamp, the SC-88 rendering is far superior in my opinion. At 60 s in, the synth that enters is too loud in the FatBoy rendering.

It's possible – maybe even likely – that these differences are more due to FluidSynth not interpreting all controls and RPNs identically to the SC-88.

Same comparison, only for Descent 2: https://chris.pacejo.net/temp/descent/D2-Title.ogg (FatBoy/FluidSynth) vs. https://www.youtube.com/watch?v=o9_uUCBCuUs (SC-55 II) I think the difference here is stark. Though clearly FluidSynth is partly to blame, as the beginning notes aren't even in tune with each other in that rendering.

> controls and RPNs

Out of curiosity: could you elaborate on what those are? My first guess would be it's something like font hinting but for MIDI

Sort of. They control things like volume, panning, reverb, pitch bend sensitivity, tuning, synthesizer parameters, etc. Most controls have a defined meaning, though some (named things like "General Purpose" and "Effect 1 Depth") do not, and control different things on different synthesizers. (For example, "Effect 1 Depth" is usually reverb, but not always.) But even those things with a defined meaning are "defined" in the loosest sense of the word. E.g. one synthesizer may implement "Modulation" as tremolo, while another may implement it as vibrato (two similar, but noticeably different, musical effects). So any MIDI recording which ventures even slightly outside of the most common and obvious controls or RPNs risks losing important nuances upon being played by a different synthesizer.

(The difference between controls and RPNs is that RPNs are – in theory – extensible, registered with a centralized authority, so that new ones may be developed. In practice, there are a small fixed number, fewer even than controls.)

Further there are NRPNs, which are like RPNs but are not registered with any authority. So these completely vary by manufacturer. The SC-88 has a bunch of these, things like "Vibrato Rate", which, if ignored by another synthesizer, sometimes make no difference, or sometimes are very noticeable, depending on the degree to which the composer is relying on that functionality.

Often the bigger difference which I neglected to mention is banks. There are 128 MIDI "patches" – sounds – but of course there are many more than 128 instruments in the world. So there is also a system of patch variations called "banks". Usually these variations are true variations (e.g. concert grand vs. baby grand piano), but sometimes they are completely different (Moog synthesizer vs. square wave). And like controls, they are variably ill-defined or not standardized, and thus not implemented identically on all synthesizers.

(The reason for this mess is because MIDI is really an evolved creature. The original MIDI standard specified very little, so General MIDI (GM) was born, which is what most people know as "MIDI", but that was insufficient, so manufacturers authored their own extensions: Roland created GS; Yamaha created XG; and of course they are incompatible with each other.)

That was very interesting and educational, thank you!

I remember my younger days. Games today depend on graphics card for quality, so you can brag to have better graphics with your friends if you have a better card.

In the old days, the card was important of course (it's more to whether it's software or hardware, essentially jagged vs "smooth" picture), but having a good MIDI sound card is like heaven and earth for the ear. I literally spent hours just justening to MIDI files downloaded from the internet when I got a Sound Blaster (forgot the model).

Me too. And of course the Sound Blaster was an entry-level MIDI device; even while I was enjoying my SB card I was jealous of people who could afford a Roland MT-32!

I remember saving my money for an entire summer so I could play Doom with a Gravis Ultrasound Pro. In retrospect, it was a huge waste of money as the card was rarely supported in mainstream games of that era.

Here’s the Link to the sample:


Sounds pretty good!

Here's the original for comparison. It's quite an improvement!


Are you sure this was a Roland SC? This sounded pretty close to just plain old Adlib. Of course any sound font would sound better than fm synth. What would be helpful is to have the track played on an MT32 or a Sound Canvas to do a proper comparison.

That's the thing about these old games: they were totally made for how the MT32 and later the Sound Canvas sounded to the point where they would even chose an instrument that would otherwise not be fitting, but which sounded good on the original device.

Unfortunately for me, all of this happened way before I had money on my own or could convince my parents to shell out the considerable sum these devices would have cost, so I really don't know how these games were intended to sound.

Which makes me really sad as a huge video game music fan/nerd.

https://www.youtube.com/watch?v=_HjPqvCp_aQ here is an actual mt32 recording, without voice over, that should make the comparison more clear

Make sure you get to the bottom of the page and hear the linked samples.

The "King's Quest V - Oasis Theme" was so immersive I couldn't help clicking on the static image to try and play it.

I recently replayed through KQ5 (and for the first time ever, finally completed it). The provided youtube recording of the oasis theme MIDI is way way WAAAAYYYY nicer quality than the original game. Is this deliberate? Is this what we're trying to showcase?

Side-note: It was really nice hearing the theme music when encountering the princess near the end of KQ5, as it was very clearly the progenitor of the "Girl in the Tower" song that was to be the main theme of KQ6, which is my favourite by a long way. It was an unexpected nostalgia hit, was quite well done and I'm glad they carried the tune between the games.

That's really cool to hear about. IMO you can't have enough SoundFonts... :-) Back when I used Reason a lot, I would load these into the sampler and see which sounds I liked better between the different collectoins. Spending more time in Linux these days, we are lucky to be able to open FOSS like LMMS(.io) and there's an SF2 Player instrument you can use for auditioning the various banks and patches within the SoundFont.


Duke3D and Bermuda Syndrome nostalgia time.

I used to love listening to midis back in the day, I think the soundfonts that came with my Sound blaster vibra 128 were top notch at the time.

Any chance someone with this already setup could share a sample of DOOM E1M1?? Man, I loved that song.


https://clyp.it/zbkee0uy (better quality)

thank you! sounds AWESOME!

Strongly inspired by Metallica's No Remorse and/or Master of Puppets.

They also borrowed very heavily from Pantera and Slayer, amongst others: https://www.youtube.com/watch?v=IGQbLSLAK2o

Just in case someone has this, I'd love to hear the Loom theme on this soundfont. This game was one of my favs back in the day: https://www.youtube.com/watch?v=zQJVM-R3PxY

Thank you, very much Pezz.

If you're on Windows, all you need is VirtualMidiSynth, it installs itself as a MIDI driver. Load the bank and play the MIDI files using Windows Media Player o any other you have already on the system.

For Timidity in Linux, though, I find myself relying on eawpats ( https://www.doomworld.com/idgames/sounds/eawpats ). It doesn't require that the simple Timidity support in things like SDL_mixer understand soundfonts, and I like the old GUS sound more.

This was very eye-opening, not being very familiar with the time I thought MIDI was just a designation we had for music in older games, I never thought it worked like that, sounds like it could have a lot of potential!

There's an extension for MIDI to control things like lighting and pyrotechnics:


Well, this inspired me to install ScummVM, install this pack, and finally beat Kings Quest VII Chapter 1. It was the first game I ever had as a kid, and I never was able to get past one of the puzzles. The audio sounds great!

Informative. Never had any idea that these MIDI things allowed people to use different music to reproduce it. I mean I always thought that MIDI was something about connecting real instruments to computers or something, never really saw a use for it. Reading from the comments it seems people used to share and play these on a previous era. Interesting. The video of the game sounds interesting I guess.

I worked at Babbages in the early to mid 90's. It was very sad to watch the "Multimedia" revolution happen before my eyes... I wasn't impressed then and the multimedia titles didn't age well, imo. Midi in games had so much more potential that I don't believe was ever fully realized.

Also relevant is GXSCC, a midi player that turns the music into chiptunes!


I was using Creative SoundBlaster's 8MBGMSFX with Terra Nova: Strike Force Centauri and I found some samples to be way too loud. Popped in FatBoy and the title music sounds fantastic.

Oh boy,this thing will make me dig my DOS game archive and oldies trove when I get home.

Is it hard to make the soundfont as wave tables instead? Samples are so large!

The SF2 spec implicitly expects the sample data to be one very large sample buffer, which are subsequently resampled and looped on each new note. So it's possible to reuse the same set of single-cycle waveforms in various combinations and have a very small file(and I've seen a few floating around that are like this) - but a lot of playback routines do not implement this use-case correctly.

At the very least, it would be good to release an sf3 version; sf3 uses ogg compression (as opposed to mp3). This can be 10x smaller for comparable quality.

Though I found that (fluidsynth, at least) is very slow at loading sf3. Takes a few seconds.

I wonder how hard it would be to write a non-compliant SoundFont that uses Opus - Ogg Vorbis is very old at this point and not as good as newer codecs.

Edit: that was a fun rabbit hole

SF2.04, owned by Creative. http://freepats.zenvoid.org/sf2/sfspec24.pdf

SF3 is "just" Ogg compressed SF2, but there's no spec and it seems like it's only implemented in http://www.fluidsynth.org/

Edit edit: in the SF2.04 spec - "hydra - A. A nine-headed mythical beast. B. The nine “pdta” sub-chunks which make up the SoundFont articulation data."

Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact