Back at SC for the DX7 and midi

The FM graphs show the connections between operators – not oscillators.

An operator includes an oscillator, plus all of the modulation applied to it: amplitude envelope and LFO, frequency envelope and LFO, probably some other things I forgot. The little box for an operator doesn’t have to show all of those components.

Every FM algorithm, in Yamaha’s interface, includes a feedback chain.

You can’t duplicate it exactly in SC because of the LocalIn/LocalOut block delay, but even with the delay, feedback in FM/PM can get good and noisy and crunchy.

“Nonstandard” – DX7 didn’t do this as I recall, but some other Yamaha FM units (my grad school had a couple of TG77s, those were nice) allowed you to choose different waveforms per operator.

Examples in this thread have used SinOsc but it’s very easy to replace that with Osc.ar, and use arbitrary waveforms. Osc.ar has an audio rate phase input, so you can do PM with it too.

hjh

The original presets can be converted to faust code and compiled as UGens, so there is an easy way.

The library: faustlibraries/dx7.lib at master · grame-cncm/faustlibraries · GitHub

The tool for conversion: faust/tools/dx72faust/dx72faust.cpp at master-dev · grame-cncm/faust · GitHub

DX7 challenge:

Write a synthdef that sounds more like Twin Peaks Laura Palmer’s Theme

Ppar([
    Pbind(
        \instrument, \default,
        \dur, Pseq([ 4.0, 8.0, 12.0, 8.0, 1.0, 8.0, 1.0, 1.0]),
        \midinote, Pseq([ 47, 47, 48, 43, 55, 45, 57, 36, 48]),
        \amp, Pseq([ 0.2, 0.2, 0.2, 0.194, 0.194, 0.194, 0.194, 0.194, 0.194]),
        \sustain, Pseq([4, 8, 12, 8, 8, 8, 8, 4, 4])
    ),
    Pbind(
        \instrument, \default,
        \dur, Pseq([ 4.0, 8.0, 12.0, 8, 8, 2.0, 0.1]),
        \midinote, Pseq([ 59, 59, 60, 64, 64, 71, 69]),
        \amp, Pseq([0.2, 0.2, 0.2, 0.194, 0.194, 0.2, 0.2]),
        \sustain, Pseq([ 4, 8, 12, 8, 8, 2, 2])
    ),
    Pbind(
        \instrument, \default,
        \dur, Pseq([2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 1.5, 0.5, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 2.0, 3.0, 1.0, 1.0, 1.0, 1.0, 0.875, 0.125, 0.0625, 2.9375, 1.0, 1.0, 1.0, 1.0, 0.875, 0.125, 0.0625, 0.0, 1.8125, 0.0, 0.125, 0.0, 0.0625, 0.0, 1.8125, 0.0, 0]),
        \midinote, Pseq([68, 70, 71, 68, 70, 71, 73, 75, 76, 79, 80, 82, 79, 80, 82, 84, 86, 76, 74, 77, 76, 74, 72, 67, 70, 76, 74, 77, 76, 74, 72, 72, 79, 71, 83, 60, 72, 65, 77, 69, 81, 60, 72]),
        \amp, Pseq([ 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.194, 0.187, 0.191, 0.2, 0.2, 0.2, 0.2, 0.2, 0.186, 0.186, 0.191, 0.172, 0.172, 0.094, 0.094, 0.102, 0.102, 0.2, 0.2, 0.087, 0.087]),
        \sustain, Pseq([1.9, 0.95, 0.95, 1.9, 0.95, 0.95, 1.9, 1.42, 0.47, 1.9, 0.95, 0.95, 1.9, 0.95, 0.95, 1.9, 1.9, 2.85, 0.95, 0.95, 0.95, 0.95, 0.95, 0.59, 0.25, 2.79, 0.95, 0.95, 0.95, 0.95, 0.88, 0.59, 0.25, 1.84, 1.84, 0.59, 0.59, 0.25, 0.25, 1.84, 1.84, 0.12, 0.12])
    ),
    Pbind(
        \instrument, \default,
        \dur, Pseq([24.0, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 0]),
        \midinote, Pseq([\rest, 36, 43, 52, 52, 64, 52, 52, 36, 43, 52, 52, 64, 52, 52, 33, 45, 52, 52, 64, 52, 52, 33, 45, 52, 52, 64, 52, 52, 36]),
        \amp, Pseq([0.0, 0.2, 0.2, 0.162, 0.118, 0.2, 0.2, 0.09, 0.2, 0.2, 0.09, 0.118, 0.17, 0.129, 0.129, 0.2, 0.2, 0.162, 0.118, 0.2, 0.2, 0.09, 0.2, 0.2, 0.09, 0.118, 0.17, 0.129, 0.129, 0.165]),
        \sustain, Pseq([0, 2.85, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 2.85, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 2.85, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 2.85, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 2.85])
    ),
    Pbind(
        \instrument, \default,
        \dur, Pseq([20.0, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 16.5, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.1]),
        \midinote, Pseq([\rest, 48, 48, 55, 48, 48, 55, 48, 48, 48, 55, 48, 48, 55, 48]),
        \amp, Pseq([0.0, 0.093, 0.106, 0.118, 0.131, 0.157, 0.17, 0.183, 0.157, 0.154, 0.153, 0.15, 0.145, 0.143, 0.14]),
        \sustain, Pseq([0, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
    ),
    Pbind(
        \instrument, \default,
        \dur, Pseq([4.0, 4.0, 6.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 2.0, 0.0, 3.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 3.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 2.0, 0.0, 0]),
        \midinote, Pseq([\rest, 76, 78, 80, 82, 79, 80, 82, 84, 86, 76, 88, 74, 86, 77, 89, 76, 88, 74, 86, 72, 84, 76, 88, 74, 86, 77, 89, 76, 88, 74, 86, 72, 84, 83, 95, 81, 93]),
        \amp, Pseq([0.0, 0.113, 0.117, 0.137, 0.14, 0.143, 0.15, 0.153, 0.156, 0.151, 0.175, 0.169, 0.175, 0.175, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.176, 0.178, 0.178, 0.178, 0.178, 0.2, 0.165, 0.164, 0.164]),
        \sustain, Pseq([0, 4, 4, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0])
    ),
    Pbind(
        \instrument, \default,
        \dur, Pseq([ 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 1.5, 0.5, 2.0, 1.0, 1.0, 2.0, 1.0, 1.0, 2.0, 0.1]),
        \midinote, Pseq([ 68, 70, 71, 68, 70, 71, 73, 75, 76, 79, 80, 82, 79, 80, 82, 84, 86]),
        \amp, Pseq([0.0, 0.09, 0.091, 0.091, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2]),
        \sustain, Pseq([0, 2, 1.0, 1.0, 2, 1.0, 1.0, 2, 1.5, 0.5, 2, 1.0, 1.0, 2, 1.0, 1.0, 2, 2])
    ),
     Pbind(
        \instrument, \default,
        \dur, Pseq([24.0, 0.0, 0.0, 0.0, 10]),
        \midinote, Pseq([\rest, 49, 57, 52, 55]),
        \amp, Pseq([0.0, 0.085, 0.085, 0.085, 0.085]),
        \sustain, Pseq([0, 10, 10, 10, 10])
    ),
    Pbind(
        \instrument, \default,
        \dur, Pseq([22.5, 0.0, 0.0, 10]),
        \midinote, Pseq([\rest, 60, 72, 84]),
        \amp, Pseq([0.0, 0.134, 0.134, 0.134]),
        \sustain, Pseq([0, 10, 10, 10])
    )
]).play
2 Likes

Would love to see an attempt at wind chimes. With a way to change the scale of the chimes. I looked into the TraerPhysics quark. Would be perfect for that. But it’s above me for now.

1 Like

Hi everyone! I just discovered this great DX7 simulation and I’m experimenting with the various presets.
Does anyone know how to use it inside a Pbindef, also specifying the envelopes of the individual sound events?
Best!