top | item 13526149

Libfmsynth: a C library which implements an FM synthesizer

84 points| vmorgulis | 9 years ago |github.com

19 comments

order
[+] exDM69|9 years ago|reply
Just as a point of comparison, here's an FM/AM modulated synth I wrote some years ago [0]. The version linked here is written in 250 lines of plain old C code with floating point arithmetic and not a single thought has given to performance (but it runs fast enough).

Originally, this synth was designed for a demoscene 4k intro, which was never finished. It was originally implemented with 16.16 fixed point arithmetic using legacy x86 assembly abusing one byte instruction encodings (e.g. using the AX part of RAX as the .16 fractional part). Some of the design decisions of the size-optimized hand-written assembly synth are still visible in the original code.

The original assembly implementation is buried somewhere deep in my hard disk.

[0] https://github.com/rikusalminen/jamtoysynth/blob/master/src/...

[+] thedjinn|9 years ago|reply
Always interesting to see this. Looks a lot like a 4k synth I did myself many years ago. It also amuses me to see that almost everybody was using those RBJ biquad filters.
[+] w0utert|9 years ago|reply
Pretty awesome, I've always wanted to make something like this myself, but listening to the demo on SoundCloud I don't think I would never even get close to this :-)

One question I have is how difficult it would be to adapt a soft synth like this to also be able to produce the kinds of sounds you would get from a SID (from the C64 etc). My understanding of waveform synth is very limited, but it has always struck me how different all synthesizers (hardware and software) always sounded so different from SID chiptunes. Probably there's some analog effects going on there that are hard to reproduce mathematically?

[+] exDM69|9 years ago|reply
> Probably there's some analog effects going on there that are hard to reproduce mathematically?

Yes, exactly. The SID chip is a pretty complex analog synthesizer and it was made using less-than-perfect manufacturing processes, making some chips sound better than others. The SID has very nice analog filters that are not trivial to emulate with digital signal processing. Additionally, there were lots of ugly tricks that abused the SID chip, such as making sounds by emitting a "all ones" full-blast signal and then cranking the volume of the mixer circuit up and down to produce a fake pcm sound.

My best understanding is that a "normal" audio synthesizer (such as this one I believe) is doing computation at the same rate as audio output rate (typically 44 or 48 kHz). SID software emulators run internally at a much higher sample rate (hundreds of kHz) in order to emulate the analog circuitry.

[+] posterboy|9 years ago|reply
The Paula (amiga chip) e.g. cannot reproduce a classical scale, because of limited bit precission [1], producing chracteristic harmonies.

For the SID, there's probably just not enough engineering going into emulation, as enthusiast prefer the original experience anyway.

[1] you might enjoy the talk Elements of chip music by Linus Akesson: <https://www.linusakesson.net/music/elements/index.php>

[+] paleite|9 years ago|reply
The SID chip uses subtractive synthesis, whereas this synth uses frequency modulation. They are very different and as such it's very hard to get the FM synth to sound close to the SID chip.
[+] posterboy|9 years ago|reply
Even if I could build a synth, I couldn't properly program it, so I wouldn't know what features to have built to begin with.
[+] tunesmith|9 years ago|reply
Interesting, does anyone have an idea how to start where the instructions leave off, and actually hook it up to a midi controller? What do you have to do to get it working?
[+] wingless|9 years ago|reply
If LV2 plugins are anything like VSTs, you'll need to load the plugin in your audio application and route your MIDI input through that plugin. In most DAWs this is done by creating a track then assigning MIDI input and the VSTi to the track.
[+] seertaak|9 years ago|reply
This is really impressive. Thanks for sharing.