6 ms·
Synthesis Methods Explained: What Is FM Synthesis?
- CrypticShift 3y agoFM synth programming can feel like a dark art for starters. It's much less straightforward to dial in a specific sound compared to, say, subtractive synths. Now imagine a synth that reverse-engineers audio sounds you feed it, adjusting its parameters to match. This would be a game-changer for learning. This recently released FM synth is trying to do just that with AI : https://www.youtube.com/watch?v=3gTYlYG6-R8 https://www.youtube.com/watch?v=3gTYlYG6-R8
- unleaded 3y agoThat's been around for at least 30 years[1] although there is a strange lack of tools using it, I looked into it a while ago. There's a tool for generating OPN2 patches[2] (sound chip used in Sega Mega Drive) which is what I'm most interested in this technology for but I couldn't get it running right. And a modern method that uses neural networks instead of genetic algorithms but I haven't found any applications of it [3]. [1] https://www.jstor.org/stable/3680541 https://www.jstor.org/stable/3680541 [2] https://github.com/jpcima/fmprog https://github.com/jpcima/fmprog [3] http://kth.diva-portal.org/smash/get/diva2:1334639/FULLTEXT01.pdf http://kth.diva-portal.org/smash/get/diva2:1334639/FULLTEXT0... p.s. does anyone know why do so many papers on new technologies like this never even provide code samples? what's the point?
- SeanLuke 3y agoUsing genetic algorithms or other evolutionary computation methods for this purpose is pretty old. There are two versions. First, there is evolutionary resynthesis, where the system is trying to optimize a synth program to match an existing sound. This can be done automatically: try a bunch of sounds, have some automatic comparator compare them to the target sound, assess them, mix-and-match, try again. Then there is interactive evolution, where the system is trying to come up with sounds interesting to the musician. Here the system proposes and auditions synth patches, and the musician responds with what he thinks are the better ones, and using that information the system mixes and matches and tries again. Evolutionary resynthesis has been around since at least 1996 (Horner). Aphex Twin was enamored with it for a while. I don't think it's particularly interesting: if you already have a target sound, why are you trying to come up with a program to match it? Why not use the sound itself? But interactive evolution is both useful, more difficult, and interesting, as it makes it possible for the musician to explore the space of synth programs without having to program them (and that's particularly good for FM, since FM is EXTREMELY counterintuitive to program). I wrote what I think is the best general-purpose interactive evolution style synth programming system right now: Edisyn. It works with a wide range of synthesizers and synthesis types. If you restrict yourself to exactly one synthesizer of your own design, you can get better results still, and there are a number of softsynths out there which do this. But most interestingly: interactive evolution has a specific inventor: BRIAN ENO! He invented it around 1995 in a letter he wrote to Stewart Brand.
- tomjakubowski 3y ago> if you already have a target sound, why are you trying to come up with a program to match it? Once you have the program matching the sound, you can tweak it and get variations. At least that's what I imagine people would want it for.
- coldtea 3y ago>if you already have a target sound, why are you trying to come up with a program to match it Because then you have it (or something close) in your own synthesizer, as opposed to whatever other synth or natural source you sampled it from, and you can enhance it, adjust it, use filters and others on it, and so on using all its native cabilities.
- SeanLuke 3y agoSure. But you can manipulate the sample in complex ways with filters, effects, etc. on your sampler or rompler already. I'm not saying there's no reason -- I'm just saying it's a fairly narrow and not hugely compelling one.
- coldtea 3y ago>But you can manipulate the sample in complex ways with filters, effects, etc. on your sampler or rompler already. Much much less.
- SeanLuke 3y agoIf you say so. I own an UltraProteus with almost 500 filters and an extensive mod matrix. Pretty sure it can mangle a sample quite a lot.
- coldtea 3y ago>If you say so. Nope, it's objective reality. >I own an UltraProteus with almost 500 filters and an extensive mod matrix. Pretty sure it can mangle a sample quite a lot. Which is neither here, nor there. I didn't say you can't change the sample "quite a lot", I said you can change it much less than if it was as a synthesis patch on a synth. Any fx or filter available to the sample is also available to the synth. The reverse is not true. As a simple example for an extremely basic thing you can't do: you can't change the sample's inherent attack. The ASDR envelope on the sampler works on top of the raw sample's attack, so you can't, for example, change a slow attack to a fast one.
- derriz 3y agoFiddling around with FM, I've found it easy to dial in interesting sounds but very difficult to find sounds that are "musical" so it's difficult to actually incorporate them into a piece of music. I guess the wild success of the built-in patches of something like the DX7 proves that this is down to my own lack of skill but FM synthesis seems somewhat chaotic - a small adjustment to one parameter can cause a wild swing in the sound.
- anigbrowl 3y agoTry to use modulation frequencies that are in some sort of integer ratio to the carrier wave; the lower the ratio the less tinny/fizzy the sound will be. Non-integer ratios are enharmonic, good for percussion and SFX but also quickly tailing off into noise.
- chillingeffect 3y agoUnderrated comment. This is one of the most inportant parts of FM, imo. Each integer ratio of carrier to modulator has a specific flavor. The "simpler" the ratio the less complex and flavorful the sound. Therefore, fading from irrational to rational ratios can make a crazy, inharmonic sound "stabilize." After working for years with FM, i have found a somewhat narrow range of sounds and the layering becomes more inportant than the algorithm. So getting to know of the ratios is important, 1:2, 1:3, 1:4, etc.
- atoav 3y agoAs a synth head that teaches synthesizers at university: While I think that is an interesting idea in itself, it is probably not the best idea for learning how FM synthesis works. Learning synths is both about gaining an intution what sounds emerge when you change a set of parameters, as well as having a mental model of the signal flow and how that shapes the sounds. Both are things that are not helped by having something that creates presets for you — in fact it might even be more productive to look at human made presets if you need guidence. Also: Synthesizers are also good for creating never before heard, totally out there sounds, and those are hard to reach when you feed it existing stuff. My own personal learning approach always was to use a simple init preset and then create everything manually from there. I called this my "No-presets rule" (meaning I don't use presets that I did not make myswlf for anything, unless ot is a commercial gig). If you then make your 10th preset from scratch you probably understood something already. And then at some point looking at other people's stuff starts to make sense because now you have a set of eyeballs that can actually peeceive the things they did.
- ducharmdev 3y agoRe: your experience teaching synths in university, do you feel there is certain knowledge/concepts that are difficult for those self-teaching sound design? I do the same "no presets rule", with most being the result of random experimentation and fiddling of parameters. This does a good job at "creating never before heard, totally out there sounds", but I imagine it's trickier the more specific your end goal is.
- atoav 3y agoI think the hardest part is getting the basics straight, and by that I mean things like understanding oscillation produces sound, amplitude influences the spund level while the speed of the oscillation influences the pitch. Understanding that by modulating pitch and amplitude you can already create a ton. The biggest challenge for students in my experience is grasping all these obscure words and acronyms, with VCOs, LFOs, keytracking, Envelopes, ADSR, Triggers, Gates, CVs, oscillations, overtones, frequency graphs, filter cutoff points, resonance, ... It is just a lot of concepts at once. Sometimes it can pay of to take a step back and limit one's arsenal and figure out how far you can get only using one or two of those.
- u_s_e_r 3y agoAnother approach, rather than generating randomized offspring, differentiable dsp provides a mechanism to self-correct using a loss function https://deepai.org/publication/ddx7-differentiable-fm-synthesis-of-musical-instrument-sounds https://deepai.org/publication/ddx7-differentiable-fm-synthe...
- yowlingcat 3y agoI disagree, given one of my favorite synths FM8, which in particular I've always found easy given its very thoughtful interface mechanisms of an "easy mode" and a "hard mode" both of which have extremely powerful, precise envelopes which can be dialed in really cleanly to visually carve out any kind of sound one is looking for. It's easy to grab a preset, customize to taste, and experiment with it to gain your footing and intuition around how it works. I also disagree that a synth which "reverse-engineers" the audio sounds you feed it is the right way to go. By doing this rather than learning how to do it from scratch (albeit with training wheels as I've previously described), you rob yourself of the rich experience of learning how to use FM synthesis as applied physical modeling.
- fassssst 3y agoModulate one oscillator with another
- Subdivide8452 3y agoThe end.
- rzzzt 3y agoCan vibrato be considered FM synthesis? Edit: aaah, should have read further into the article
- sctb 3y agoThe original paper is quite short and readable: https://people.ece.cornell.edu/land/courses/ece4760/Math/GCC644/FM_synth/Chowning.pdf https://people.ece.cornell.edu/land/courses/ece4760/Math/GCC...
- gylterud 3y agoI love through-zero frequency modulation (TZFM). If your oscillator can do TZFM you can bring it’s frequency down to zero, where it stops oscillating and then to “negative frequency” where it starts oscillating again, but with a reversed waveform. This has two main usages: first you can do normal FM sounds with very deep modulation without getting strange pitch shifts because the frequency is capped before zero. Second, you can set the oscillator to start at zero and then modulate symmetrically around zero. The sound you get is quite unique — ranging from woody sounds to growling lead sounds. The fundamental pitch is decided by the modulator (as opposed to the carrier in usual FM). Symmetric TZFM takes the modulator signal and integrates it, then adds harmonic content by folding according to the waveshape of the modulator. This works best if the two oscillators are kept in soft or hard sync. My favourite patch is to use a harmonic oscillator as modulator for a TZFM carrier. Modulating the distribution of sines in the modulator and the frequency of the carries gives such a unique set of timbre controls.
- IanHalbwachs 3y agoI'm intrigued. Anywhere I can hear some examples of this, or know of any (free) ways I can generate some with software?
- gylterud 3y agoInstruo Neoni is one oscillator which can do it. I think one can get on VCV rack (which I think is free). The Neoni is demonstrated here: https://youtu.be/kkAagua3NN4 https://youtu.be/kkAagua3NN4 (Symmetric TZFM starts around the 57 minute mark). Here is a track I made using TZFM (I am no muscician, just experimenting): https://hakon.gylterud.net/snd/foot-stomp.flac https://hakon.gylterud.net/snd/foot-stomp.flac The only sound sources are a TZFM oscillator and a kick drum.
- HPsquared 3y agoI guess it's like time running backwards. Or the speed. FM is basically turning the speed up and down, no reason it can't go backwards too! Edit: or a DJ doing a record scratch
- Dwedit 3y agoSite requires a whole bunch of hosts (including Google and Facebook) to be unblocked before any audio plays.
- IYasha 3y agoEven worse for me: Your browser is out of date! Update your browser to view this website correctly. More Information. and constantly reloads in hope that my browser does update somehow :D
- ReactiveJelly 3y agoFor a couple years I've wanted to write a subtractive synth from scratch in software. But I _cannot_ find any source that explains how to write a low-pass filter, in code, without assuming tons of knowledge about calculus and these odd things like Z-transforms? Like, I understand FFTs and DCTs. But the explanation for how to construct filters in software is pathetic. I looked at the code for VCVRack but could not understand it. It's already optimized for SIMD, processing 4 signals at once, which didn't help readability. (I'm sure it's very fast though)
- bigbillheck 3y ago> But the explanation for how to construct filters in software is pathetic. Pick your favorite FIR filter, set up a ring buffer, input samples go in, at each step you multiply the buffer elements by your filter coefficients, sum, and output the result.
- ahartmetz 3y agoThe hard part is calculating the coefficients.
- bigbillheck 3y agoNot really, there's plenty of online tools to do it for you such as http://t-filter.engineerjs.com http://t-filter.engineerjs.com , and more offline ones: https://docs.scipy.org/doc/scipy/reference/signal.html#filter-design https://docs.scipy.org/doc/scipy/reference/signal.html#filte...
- AtomicOrbital 3y agoA intuition for creating a lowpass filter ... audio happens in the time domain ... Fourier transform outputs the frequency domain representation of the audio you feed it ... number of audio samples you feed into the FFT call determines the element count of the array returned ... now you have an array of your audio in the frequency domain ... for lowpass crank down to zero array elements above the first quarter of them ... this silences those frequencies ... to render the audio ( generate sound ) feed your edited frequency domain array into an IFFT ( inverse Fourier transform )
- gomijacogeo 3y agoKen Shirriff, naturally, has tackled the subject a while back in a multipart analysis of the Yamaha DX7. https://www.righto.com/search/label/dx7 https://www.righto.com/search/label/dx7
- zigzag312 3y agoFM is similar to LFO (Low-frequency oscillation) modulation, but at higher frequencies. With LFO you hear how modulated value changes in time, but with FM, modulation is so fast, that you don't perceive changes as time based changes anymore, but as a different timbre.
- cerol 3y agoA couple of years ago, I took a "Music and Computers" course at my undergraduate computer science program. I had known the professor for a while, and he had some incredible projects under his belt. He had built a full fledged Hammond-like MIDI synth using an Arduino Due, all the way from writing the code, and building the stainless steel casing. I took that as an inspiration for my final project, and tried to build a FM synth using ESP32. I based my project on the Yamaha DX7, which is an amazing feat of musical engineering. I had to write the code, wire together a MIDI Input, and an audio output (using a DAC). It was one of the coolest projects I've ever made, although I did not get too far. At the core, all you're doing is generating sine waves. Digital Synths in the 80s would not have the computation power to actually compute sine waves, so what you have to do is precompute the values of a sine wave, and store it in memory [0]. Also, you don't get floats, so it's all fixed point arithmetic [1]. FM Synthesis is essentially a carrier wave and a modulator wave [2]. The DX7 goes beyond that with the concept of Operators, which can be mixed and matched in an Algorithm [3]. I managed to make it produce notes, which were in tune. I started making the envelope (attack, decay, sustain and release), but that's where I got stuck and eventually abandoned it. [0] https://github.com/fercgomes/churrosfm/blob/master/src/Tables.cpp https://github.com/fercgomes/churrosfm/blob/master/src/Table... [1] https://github.com/fercgomes/churrosfm/blob/master/src/Oscillator.cpp https://github.com/fercgomes/churrosfm/blob/master/src/Oscil... [2] https://github.com/fercgomes/churrosfm/blob/master/include/Algorithm.h https://github.com/fercgomes/churrosfm/blob/master/include/A... [3] https://djjondent.blogspot.com/2019/10/yamaha-dx7-algorithms.html https://djjondent.blogspot.com/2019/10/yamaha-dx7-algorithms...
- khedoros1 3y agoI've written a software emulation of a Yamaha YM2413 (OPLL) for use in a Sega Master System emulator, although that was a couple of years ago. What I remember is a table for the sine wave (1/4 of the full cycle, since the rest can be done by mirroring and inversion), but stored in some logarithmic format so that multiplications can be done through addition, and then a lookup table to convert the output value to an actual integer. It was cool because there were set values that you could subtract to cut the volume in half, for example. It makes the envelopes into just adding and subtracting values, and getting a cool volume curve out of it. I remember that I got it reliably producing recognizable output for most register settings, but there are some parameters that I must've gotten wrong, because some settings sound way off from how they do on real hardware.