Skip to content

Instantly share code, notes, and snippets.

@schollz
Forked from audionerd/supersaw-shooter.scd
Created November 2, 2022 22:10
Show Gist options
  • Save schollz/b6acdc9c2d7a90fc69c440251884eb53 to your computer and use it in GitHub Desktop.
Save schollz/b6acdc9c2d7a90fc69c440251884eb53 to your computer and use it in GitHub Desktop.
SuperSaw (Roland JP-8000 and JP-8080) in SuperCollider
// via https://www.nada.kth.se/utbildning/grukth/exjobb/rapportlistor/2010/rapporter10/szabo_adam_10131.pdf
(
{ | freq = 523.3572, mix=0.75, detune = 0.75 |
var detuneCurve = { |x|
(10028.7312891634*x.pow(11)) -
(50818.8652045924*x.pow(10)) +
(111363.4808729368*x.pow(9)) -
(138150.6761080548*x.pow(8)) +
(106649.6679158292*x.pow(7)) -
(53046.9642751875*x.pow(6)) +
(17019.9518580080*x.pow(5)) -
(3425.0836591318*x.pow(4)) +
(404.2703938388*x.pow(3)) -
(24.1878824391*x.pow(2)) +
(0.6717417634*x) +
0.0030115596
};
var centerGain = { |x| (-0.55366 * x) + 0.99785 };
var sideGain = { |x| (-0.73764 * x.pow(2)) + (1.2841 * x) + 0.044372 };
var center = LFSaw.ar(freq, Rand());
var freqs = [
(freq - (freq*(~detuneCurve.(detune))*0.11002313)),
(freq - (freq*(~detuneCurve.(detune))*0.06288439)),
(freq - (freq*(~detuneCurve.(detune))*0.01952356)),
// (f + (f*(~detuneCurve.(detune))*0)),
(freq + (freq*(~detuneCurve.(detune))*0.01991221)),
(freq + (freq*(~detuneCurve.(detune))*0.06216538)),
(freq + (freq*(~detuneCurve.(detune))*0.10745242))
];
var side = Mix.fill(6, { |n|
LFSaw.ar(freqs[n], Rand(0, 2))
});
var sig = (center * centerGain.(mix)) + (side * sideGain.(mix));
sig = HPF.ar(sig ! 2, freq);
}.play(s);
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment