Skip to content

Commit 1907182

Browse files
committed
Synths - update sc808 clap to match recent changes
1 parent 430ed09 commit 1907182

File tree

3 files changed

+55
-59
lines changed

3 files changed

+55
-59
lines changed

app/server/ruby/lib/sonicpi/synths/synthinfo.rb

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3975,19 +3975,6 @@ def munge_opts(studio, args_h)
39753975
args_h
39763976
end
39773977

3978-
def default_arg_info
3979-
super.merge({
3980-
:note =>
3981-
{
3982-
:doc => "This synth has no pitch content - therefore the not opt is ignored.",
3983-
:validations => [v_positive(:amp)],
3984-
:modulatable => false,
3985-
:midi => true
3986-
}
3987-
3988-
})
3989-
end
3990-
39913978
def specific_arg_info
39923979
{
39933980
:lpf =>
@@ -4011,14 +3998,26 @@ def specific_arg_info
40113998
:validations => [v_positive(:rev)],
40123999
:modulatable => false
40134000
},
4014-
:rev_release =>
4001+
:click =>
40154002
{
4016-
:doc => "Release duration of the reverb",
4017-
:validations => [v_positive(:rev_release)],
4018-
:modulatable => false,
4019-
:bpm_scale => true
4003+
:doc => "Amount of initial click to the clap sound. 0 is no click and 1 is a hard click.",
4004+
:validations => [v_between_inclusive(:click, 0, 1)],
4005+
:modulatable => false
4006+
},
4007+
:decay =>
4008+
{
4009+
:doc => "Amount of decay for the clap. Higher numbers increase the decay duration.",
4010+
:validations => [v_positive_not_zero(:decay)],
4011+
:modulatable => false
4012+
},
4013+
:decay_curve =>
4014+
{
4015+
:doc => "Curve value for the decay of the clap",
4016+
:validations => [],
4017+
:modulatable => false
40204018
}
40214019

4020+
40224021
}
40234022
end
40244023
end
315 Bytes
Binary file not shown.

etc/synthdefs/designs/supercollider/sc808.scd

Lines changed: 38 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -89,51 +89,48 @@ SynthDef('sonic-pi-sc808_snare', {|
8989

9090
(
9191
SynthDef('sonic-pi-sc808_clap', {|
92-
amp = 1, amp_slide = 0, amp_slide_shape = 1, amp_slide_curve = 0,
93-
pan = 0, pan_slide = 0, pan_slide_shape = 1, pan_slide_curve = 0,
94-
attack = 0, decay = 0, sustain = 0, release = 0.15,
95-
attack_level = 1, decay_level = -1, sustain_level = 1,
92+
amp = 1, amp_slide = 0, amp_slide_shape = 1, amp_slide_curve = 0,
93+
pan = 0, pan_slide = 0, pan_slide_shape = 1, pan_slide_curve = 0,
94+
hpf = 71, hpf_slide = 0, hpf_slide_shape = 1, hpf_slide_curve = 1,
95+
lpf = 84, lpf_slide = 0, lpf_slide_shape = 1, lpf_slide_curve = 1,
96+
click = 0.5,
97+
decay = 0.3,
98+
decay_curve = -160
99+
rev = 1,
96100

97-
hpf = 71, hpf_slide = 0, hpf_slide_shape = 1, hpf_slide_curve = 1,
98-
lpf = 84, lpf_slide = 0, lpf_slide_shape = 1, lpf_slide_curve = 1,
99-
rev = 1,
100-
rev_release = 4
101-
out_bus = 0|
101+
out_bus = 0|
102102

103-
var atkenv, atk, dec, sum, denv, snd, env;
104-
var reverb, revgen;
103+
var atkenv, atk, sig, denv, sum;
104+
var reverb, revgen;
105105

106-
hpf = hpf.varlag(hpf_slide, hpf_slide_curve, hpf_slide_shape);
107-
lpf = lpf.varlag(lpf_slide, lpf_slide_curve, lpf_slide_shape);
108-
decay_level = Select.kr(decay_level < 0, [decay_level, sustain_level]);
106+
lpf = lpf.midicps;
107+
hpf = hpf.midicps;
109108

110-
lpf = lpf.midicps;
111-
hpf = hpf.midicps;
112-
113-
env = Env.new(
114-
[0, attack_level, decay_level, sustain_level, 0],
115-
[attack,decay,sustain,release ],
116-
\lin
117-
);
118-
atkenv = EnvGen.kr(Env.new([0.5,1,0],[0, 0.3], -160), doneAction:0);
119-
120-
denv = EnvGen.kr(Env.dadsr(0.026, attack, decay, sustain_level, release, 1, curve:-157), doneAction:0);
121-
atk = WhiteNoise.ar * atkenv * 1.4;
122-
dec = WhiteNoise.ar * denv;
123-
sum = atk + dec * amp;
124-
sum = HPF.ar(sum, hpf);
125-
sum = BPF.ar(sum, lpf, 0.5);
126-
sum = 1.5 * sum* EnvGen.kr(env, doneAction: 0);
127-
128-
revgen = EnvGen.kr(Env.perc(0.1, attack + decay + sustain + release + rev_release, curve: -9), doneAction:2);
129-
reverb = WhiteNoise.ar * revgen * 0.1;
130-
reverb = HPF.ar(reverb, hpf);
131-
reverb = LPF.ar(reverb, lpf);
132-
reverb = reverb * rev;
133-
134-
snd = (sum + reverb) * amp * 2;
135-
snd = Pan2.ar(Mix(snd), pan);
136-
Out.ar(out_bus, snd);
109+
amp = amp.varlag(amp_slide, amp_slide_curve, amp_slide_shape);
110+
pan = pan.varlag(pan_slide, pan_slide_curve, pan_slide_shape);
111+
hpf = hpf.varlag(hpf_slide, hpf_slide_curve, hpf_slide_shape);
112+
lpf = lpf.varlag(lpf_slide, lpf_slide_curve, lpf_slide_shape);
113+
114+
115+
// Use doneAction 0, so the synth is not freed yet
116+
// The reverb is running much longer
117+
atkenv = EnvGen.kr(Env.new([click,1,0],[0, decay], decay_curve), doneAction:0);
118+
denv = EnvGen.kr(Env.dadsr(0.026, 0, 6, 0, 1, 1, curve: decay_curve), doneAction:0);
119+
atk = WhiteNoise.ar * atkenv * 1.4;
120+
decay = WhiteNoise.ar * denv;
121+
sum = atk + decay * amp;
122+
sum = HPF.ar(sum, hpf);
123+
sum = BPF.ar(sum, lpf, 0.5);
124+
sum = 1.5 * sum;
125+
126+
revgen = EnvGen.kr(Env.perc(0.1, decay+ 4, curve: -9), doneAction:2);
127+
reverb = WhiteNoise.ar * revgen * 0.02;
128+
reverb = HPF.ar(reverb, hpf);
129+
reverb = LPF.ar(reverb, lpf);
130+
reverb = reverb * amp * rev;
131+
sum = sum + reverb;
132+
DetectSilence.ar(sum, doneAction: Done.freeSelf);
133+
Out.ar(out_bus, Pan2.ar(sum, pan));
137134

138135
}).writeDefFile("/Users/sam/Development/sonic-pi/etc/synthdefs/compiled/");
139136
)

0 commit comments

Comments
 (0)