This repository has been archived on 2024-06-20. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
coffee.pygments/tests/examplefiles/sc/example.scd
Oleh Prypin 6f43092173
Also add auto-updatable output-based tests to examplefiles (#1689)
Co-authored-by: Georg Brandl <georg@python.org>
2021-01-20 10:48:45 +01:00

76 lines
1.5 KiB
Text

Instr("cs.fm.BasicFM", {
arg freq = 440,
amp = 0.9,
gate = 0,
carrierFreqRatio = 1.0,
modulatorFreqRatio = 1.0,
// not sure if having these defaults here actually does anything.
modEnvShape = Env.adsr(
attackTime: 0.05,
decayTime: 0.1,
sustainLevel: 0.5 * amp,
releaseTime: 0.1,
peakLevel: amp,
curve: [4, -4, -2]
),
carrierEnvShape = Env.adsr(
attackTime: 0.05,
decayTime: 0.1,
sustainLevel: 0.5 * amp,
releaseTime: 0.1,
peakLevel: amp,
curve: [4, -4, -2]
);
var carrier,
modulator,
carrierEnv,
modEnv,
out;
modEnv = EnvGen.kr(
envelope: modEnvShape,
gate: gate
);
modulator = modEnv * SinOsc.ar(freq * modulatorFreqRatio);
// carrier sustains until noteoff
carrierEnvShape.releaseNode = 2;
carrierEnv = EnvGen.kr(
envelope: carrierEnvShape,
gate: gate
);
carrier = carrierEnv * SinOsc.ar(
(freq * carrierFreqRatio) + (modulator * freq)
);
// free synth when both carrier and modulator envelopes are done
FreeSelf.kr(Done.kr(carrierEnv) + Done.kr(modEnv) - 1);
out = amp * carrier;
}, [
\freq.asSpec(),
\amp.asSpec(),
\nil,
ControlSpec(0.1, 10),
ControlSpec(0.1, 10),
EnvSpec(Env.adsr(
attackTime: 0.05,
decayTime: 0.1,
sustainLevel: 0.8,
releaseTime: 0.1,
peakLevel: 1.0,
curve: [4, -4, -2]
)),
EnvSpec(Env.adsr(
attackTime: 0.05,
decayTime: 0.1,
sustainLevel: 0.8,
releaseTime: 0.1,
peakLevel: 1.0,
curve: [4, -4, -2]
))
]);