«It's more fun to compute this snare» by 38nonprivate
on 25 Aug'11 13:19 inAn attempt to replicate the snare from "It's More Fun To Compute" by, err... somebody please remind me. As usual, it's close but no cigar. Nano changes in the envelope times produce wildly different end results.
Room for improvement: all Rands should be TRands, doneAction should be an argument, then it could be retriggered. Levels and timings of elements could be arguments.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
( s = Server.default; s.boot; ) ( x = SynthDef("more_fun_snare", { arg audioOutBus = 0; var env_amp, env_pitch; var envGen_amp; var noise, pulse_cluster, envGen_hihat, out_hihat; var sine_noise; var flick, envGen_flickPitch, envGen_flickAmp; var trig_flick, gapTime_flick; var lastFlick, envGen_lastFlickPitch, envGen_lastFlickAmp, lastFlickDelayTime; var output; env_amp = Env([1.0, 1.0, 0.0], [0.0, 0.8]); envGen_amp = EnvGen.ar(env_amp, doneAction: 2); noise = BPF.ar(WhiteNoise.ar, 214, 0.1, 0.5); noise = noise + BPF.ar(WhiteNoise.ar, 1157, 0.1, 0.5); noise = noise + RHPF.ar(WhiteNoise.ar, 3000, 0.1, 0.2) * 0.2; pulse_cluster = Mix.fill(6, { LFPulse.ar(ExpRand(250, 360), Rand(0, 0.99), Rand(0.3, 0.7)); }); pulse_cluster = RHPF.ar(pulse_cluster, 8000, 0.1, 0.2); pulse_cluster = LPF.ar(pulse_cluster, 8000); envGen_hihat = EnvGen.ar(Env.perc(0.001, 0.85, 0.5, -7)); sine_noise = SinOsc.ar(1131 + BrownNoise.ar.range(-90, 90)) * 0.025; out_hihat = (pulse_cluster + noise + sine_noise) * envGen_hihat * 0.7; gapTime_flick = 0.019 * TRand.kr(0.999, 1.001, 1.0); trig_flick = Impulse.ar(gapTime_flick.reciprocal) * EnvGen.ar(Env([1, 1, 0], [gapTime_flick * 2, 0])); envGen_flickPitch = EnvGen.ar(Env.perc(0.003, 0.024, 1.0, -4.2), 1.0, levelScale: 5300, levelBias: 50); envGen_flickAmp = EnvGen.ar(Env.perc(0.0, 0.04, 1.0, 5)); flick = SinOsc.ar(envGen_flickPitch * Rand(0.999, 1.001), Rand(0, 6.2)) * envGen_flickAmp * 0.15; flick = flick + HPF.ar( SinOsc.ar(envGen_flickPitch * 4.9 * Rand(0.999, 1.001), Rand(0, 6.2)) * envGen_flickAmp * 0.1, 2000 ); flick = flick + CombC.ar(flick, 0.2, gapTime_flick, 0.1, 0.55); flick = LPF.ar(flick, 3000); flick = HPF.ar(flick, 140); envGen_lastFlickPitch = EnvGen.ar(Env.perc(0.0026, 0.022, 1.0, -7), 1.0, levelScale: 3300, levelBias: 90); envGen_lastFlickAmp = EnvGen.ar(Env.perc(0.0, 0.035, 1.0, 2)); lastFlick = SinOsc.ar(envGen_lastFlickPitch * Rand(0.999, 1.001)) * envGen_lastFlickAmp * 0.8; lastFlickDelayTime = 0.054 * TRand.kr(0.99, 1.01, 1.0); lastFlick = CombC.ar(lastFlick, 0.2, lastFlickDelayTime, 0.02) * 0.09; lastFlick = HPF.ar(lastFlick, 200); output = (flick + lastFlick + out_hihat) * envGen_amp; output = LPF.ar(output, 6000); output = output + BPF.ar(output, 6000, 0.1, 0.6); output = output + (trig_flick * 0.4); Out.ar(audioOutBus, output ! 2); }).send(s); ) ( { 100.do { Synth("more_fun_snare", [\audioOutBus, 0], s); (60 / 120 / 0.5).wait; }; }.fork; )
reception
it's not failed. I quite like it. It's hard to get to the actual original sound. thanks for sharing!
i have a question regarding your technique.. since your sounds are generally very detailed.. do you normally let the sound play and then just go in and update the numbers as you go or do you assign values to something like MouseX and fine tune them?
I'm just wondering because I love using SC but I find fine-tuning sounds to be very tedious sometimes.
-> rukano - failure is always good, it leads to interesting sounds! -> nik - I slowed down the recording to work out the timing and number of "flicks", looked at a sonogram to get a rough idea of the numbers to use, then went back and changed them in the synthdef until it sounded better. Maybe it is a tedious process, although I seem to enjoy it.. :/ but it's also a good way to really understand how the millisecond or curve values actually change the sound.