The Catalogue of FM Materials Youtube series

I’m not sure how many people here have come across the series “FM Catalogue of Materials” on Youtube? It has some really inspiring FM sounds on it, set to these quirky videos. All the sounds are open-source, in that it shows you how to reconstruct them. What’s refreshing about the authour’s approach is it seems quite methodical and deliberate, whereas most people I’ve watched doing FM programming seem to be poking around in the dark a little bit, even if they understand they math/physics dimension, that doesn’t seem to always translate to good sound design.

Has anyone tried to reconstruct any of them in SC? I was thinking to have a casual mini-winter project to recreate some of the sounds in SC, if anyone else is interested? I understand FM but I need to brush up on how to read the schemas, as they seem specific to actual FM hardware.

If nothing else, I hope someone finds the video inspiring :slight_smile:

9 Likes

Very cool video!

Check out the FM7 Ugen from SC3 plugins if you haven’t already. It uses 6 operators instead of the 4 in this video, but you can just zero out the operators that you don’t need. It is also quite easy to implement any of the DX7 algorithms with the FM7.arAlgo method.

For example, the dalbergia bars example in this video uses a schema that is identical to DX7 algorithm 2 (see this chart), but with operators 5 and 6 zeroed out. Using the ratios from the DxRatio column in the video [0.5, 5.19, 2, 9.42], you can already get pretty close to the desired sound:

(
SynthDef(\dalbergia, {
    var envs, sig, freq,
    ratios, freqs, ctlMatrix;
    
    freq = \freq.kr(440);
    
    // make 1 env for each operator:
    envs = 4.collect {|i|
        Env.perc(
            (\atk ++ i).asSymbol.kr(0.001),
            (\rel ++ i).asSymbol.kr(1.0),
            (\index ++ i).asSymbol.kr(1),
            (\curve ++ i).asSymbol.kr(-5)
        ).ar;
    } ++ [0, 0]; // ignore the last 2 operators [0, 0]
    
    ratios = [0.5, 5.19, 2, 9.42, 1, 1];
    freqs = freq * ratios;
    ctlMatrix = [freqs, 0, envs].flop;
    
    sig = FM7.arAlgo(1, ctlMatrix, \fb.kr(0.5)); // use dx7 algorithm 2
    
    sig = LeakDC.ar(Mix(sig));
    
    DetectSilence.ar(sig, doneAction: 2);
    
    sig = Pan2.ar(sig, \pan.kr(0), \amp.kr(0.2));
    Out.ar(\out.ir(0), sig);
}).add;
)

Synth(\dalbergia, [freq: 60.midicps]);

Next step would probably be to tweak the parameters for the envelopes, indexes, and feedback to really dial in the sound.

2 Likes

Hi PitchTrebler,

Sorry for the slow response. I had to get free time to install the extension.

Very cool! That saves a lot of time reinventing this particular technology. The sound you have is already very good. I’m going to wrap my head around the functioning of this a little better and then try to replicate some of the other patches. Thanks so much for sharing this!