{
   "id" : "1-R",
   "is_private" : null,
   "code" : "// this is the new version!\r\n(\r\ns = Server.default;\r\ns.boot;\r\n)\r\n(\r\nSynthDef(\\bglass, {\r\n\t\r\n\t|t_trig = 1.0, audioOutBus = 0|\r\n\t\r\n\tvar major_hit_times, major_hit_deltas, major_hit_levels, major_hit_impulse_levels, major_hit_impulses;\r\n\tvar major_hit_amp, major_hit_envGen, major_hit_out;\r\n\tvar klank_freq_array, klank_out;\r\n\tvar noise, noise_out;\r\n\tvar additional_tinkles;\r\n\tvar initial_impact_pitch_envGen, initial_impact_amp_envGen, initial_impact;\r\n\tvar comb_out, output;\r\n\t\r\n\tvar last_time;\r\n\t\t\r\n\tmajor_hit_times = [0.02, 0.1, 0.21, 0.28, 0.32, 0.48, 0.6, 0.69];\r\n\tmajor_hit_deltas = [];\r\n\tlast_time = 0.0;\r\n\tmajor_hit_times.size.do { |i|\r\n\t\tmajor_hit_deltas = major_hit_deltas ++ \r\n\t\t\t[\r\n\t\t\tSampleDur.ir, \r\n\t\t\t((major_hit_times[i] - last_time) * TRand.kr(0.4, 1.6, t_trig)) - SampleDur.ir\r\n\t\t\t];\r\n\t\t\r\n\t\tlast_time = major_hit_times[i];\r\n\t};\r\n\tmajor_hit_levels = [1.0, 0.3, 0.7, 0.4, 0.65, 0.87, 0.27, 0.4];\r\n\tmajor_hit_levels.size.do { |i|\r\n\t\t\r\n\t\tmajor_hit_levels[i] = major_hit_levels[i] * TRand.kr(0.7, 1.0, t_trig);\r\n\t\t\r\n\t};\r\n\tmajor_hit_impulse_levels = [major_hit_levels, 0 ! major_hit_times.size].lace(major_hit_times.size * 2);\r\n\tmajor_hit_impulses = Duty.ar(\r\n\t\tDseq(major_hit_deltas, 1), K2A.ar(t_trig), Dseq(major_hit_impulse_levels, 1)\r\n\t\t);\t\r\n\tmajor_hit_amp = Gate.ar(major_hit_impulses, major_hit_impulses);\r\n\tmajor_hit_envGen = EnvGen.ar(Env.perc(0.0, 0.03, 1, -9), major_hit_impulses) * major_hit_amp;\r\n\tmajor_hit_out = major_hit_envGen * WhiteNoise.ar * 0.6;\r\n\tmajor_hit_out = major_hit_out + major_hit_impulses;\r\n\t\r\n\tklank_freq_array = [1383, 2831, 3252, 3446, 4547, 4600, 4832, 5863, 6813, 8683, 11196];\r\n\tklank_freq_array.size.do { |i|\r\n\t\r\n\t\tklank_freq_array[i] = klank_freq_array[i] * TRand.kr(0.8, 1.2,  Impulse.kr(20));\r\n\t};\r\n\tklank_out = DynKlank.ar(`[klank_freq_array, nil, 0.2], major_hit_out * 0.05);\r\n\tklank_out = DelayC.ar(klank_out, 0.2, 0.009);\r\n\r\n\tnoise = BrownNoise.ar + (WhiteNoise.ar * 0.3) + (PinkNoise.ar * 0.6);\r\n\tnoise = noise * 0.1;\r\n\tnoise = noise + Dust.ar(70, 1);\r\n\tnoise_out = noise * LagUD.ar(major_hit_impulses, 0.0, 0.842);\r\n\t\r\n\tadditional_tinkles = \r\n\tDynKlank.ar(`[ Array.series(8, 1200, 179), nil, 0.7], Dust.ar(14), TRand.kr(2.9, 3.1, Impulse.kr(28)) )\r\n\t+\r\n\tDynKlank.ar(`[ Array.series(8, 1200, 179), nil, 0.13], Dust.ar(11, 0.7), TRand.kr(1.4, 2.2, Impulse.kr(15)) );\r\n\t\r\n\tadditional_tinkles = additional_tinkles * \r\n\t\tEnvGen.ar(Env.linen(0.15, 0.3, 0.3, 1.0, -2), t_trig, timeScale: TRand.kr(0.9, 1.12, t_trig));\r\n\t\r\n\tinitial_impact_pitch_envGen = EnvGen.ar(Env.perc(0.001, 0.03, 1.0, -7), t_trig);\r\n\tinitial_impact_amp_envGen = EnvGen.ar(Env.perc(0.0, 0.04, 1.0, -9), t_trig);\r\n\tinitial_impact = SinOsc.ar(initial_impact_pitch_envGen.exprange(20, 4000) * TRand.kr(0.96, 1.03, t_trig)) * 0.5;\r\n\tinitial_impact = initial_impact + LFNoise1.ar(6800, 1.0) * initial_impact_amp_envGen;\r\n\tinitial_impact = HPF.ar(initial_impact, 100);\r\n\tinitial_impact = initial_impact + CombC.ar(initial_impact, 0.2, 0.04, 0.2, 0.12);\r\n\toutput = (klank_out * 0.5) + (major_hit_out * 0.45);\r\n\toutput = (output * 0.86) + DelayC.ar(output, 0.2, 0.01);\r\n\toutput = output + (noise_out * 0.32) + (additional_tinkles * 0.044) + (initial_impact * 0.2);\r\n\t\r\n\tcomb_out = CombC.ar(output, 0.1, [0.028, 0.031], 0.52, 0.23);\r\n\tcomb_out = LPF.ar(comb_out, 3000);\r\n\tcomb_out = HPF.ar(comb_out, 110);\r\n\toutput = output + comb_out;\r\n\tOut.ar(audioOutBus, output);\r\n\t\r\n}).send(s);\r\n\r\n)\r\nx = Synth(\\bglass, [\\audioOutBus, 0], s);\r\nx.set(\\t_trig, 1.0);\r\n\r\n\r\n\r\n///////////////////////////////////////////////////////////////////////////\r\n\r\n\r\n// and now the previous attempt\r\n(\r\ns = Server.default;\r\ns.boot;\r\n)\r\n\r\n(\r\n\r\n\r\n\r\nSynthDef(\\bglass, {\r\n\t\r\n\t|t_trig = 1.0, audioOutBus = 0|\r\n\t\r\n\tvar major_hit_times, major_hit_deltas, major_hit_levels, major_hit_impulse_levels, major_hit_impulses;\r\n\tvar major_hit_amp, major_hit_envGen, major_hit_out;\r\n\tvar klank_freq_array, klank_out;\r\n\tvar noise, noise_out;\r\n\tvar additional_tinkles;\r\n\tvar initial_impact_pitch_envGen, initial_impact_amp_envGen, initial_impact;\r\n\tvar output;\r\n\t\r\n\tvar last_time;\r\n\t\t\r\n\tmajor_hit_times = [0.02, 0.1, 0.21, 0.28, 0.32, 0.48, 0.6, 0.69];\r\n\tmajor_hit_deltas = [];\r\n\tlast_time = 0.0;\r\n\tmajor_hit_times.size.do { |i|\r\n\t\tmajor_hit_deltas = major_hit_deltas ++ \r\n\t\t\t[\r\n\t\t\tSampleDur.ir, \r\n\t\t\t(major_hit_times[i] - last_time) - SampleDur.ir\r\n\t\t\t];\r\n\t\t\r\n\t\tlast_time = major_hit_times[i];\r\n\t};\r\n\t\r\n\tmajor_hit_levels = [1.0, 0.3, 0.7, 0.4, 0.65, 0.87, 0.27, 0.4];\r\n\tmajor_hit_impulse_levels = [major_hit_levels, 0 ! major_hit_times.size].lace(major_hit_times.size * 2);\r\n\t\r\n\tmajor_hit_impulses = Duty.ar(\r\n\t\tDseq(major_hit_deltas, 1), K2A.ar(t_trig), Dseq(major_hit_impulse_levels, 1)\r\n\t\t);\t\r\n\r\n\tmajor_hit_amp = Gate.ar(major_hit_impulses, major_hit_impulses);\r\n\t\t\r\n\tmajor_hit_envGen = EnvGen.ar(Env.perc(0.0, 0.03, 1, -9), major_hit_impulses) * major_hit_amp;\r\n\tmajor_hit_out = major_hit_envGen * WhiteNoise.ar * 0.6;\r\n\t\r\n\tmajor_hit_out = major_hit_out + major_hit_impulses;\r\n\t\r\n\tklank_freq_array = [1383, 2831, 3252, 3446, 4547, 4600, 4832, 5863, 6813, 8683, 11196];\r\n\tklank_freq_array.size.do { |i|\r\n\t\r\n\t\tklank_freq_array[i] = klank_freq_array[i] * TRand.kr(0.9, 1.1,  Impulse.kr(20));\r\n\t};\r\n\tklank_out = DynKlank.ar(`[klank_freq_array, nil, 0.2], major_hit_out * 0.05);\r\n\tklank_out = DelayC.ar(klank_out, 0.2, 0.009);\r\n\r\n\tnoise = BrownNoise.ar + (WhiteNoise.ar * 0.3) + (PinkNoise.ar * 0.6);\r\n\tnoise = noise * 0.1;\r\n\tnoise = noise + Dust.ar(70, 1);\r\n\tnoise_out = noise * LagUD.ar(major_hit_impulses, 0.0, 0.842);\r\n\t\r\n\tadditional_tinkles = DynKlank.ar(`[ Array.series(8, 1200, 179), nil, 0.7], Dust.ar(18), TRand.kr(2.9, 3.1, Impulse.kr(20)) );\r\n\t\r\n\tadditional_tinkles = additional_tinkles * EnvGen.ar(Env.linen(0.15, 0.3, 0.3, 1.0, -2), t_trig);\r\n\t\r\n\tinitial_impact_pitch_envGen = EnvGen.ar(Env.perc(0.001, 0.03, 1.0, -7), t_trig);\r\n\tinitial_impact_amp_envGen = EnvGen.ar(Env.perc(0.0, 0.04, 1.0, -9), t_trig);\r\n\tinitial_impact = SinOsc.ar(initial_impact_pitch_envGen.exprange(20, 4000)) * 0.5;\r\n\tinitial_impact = initial_impact + LFNoise1.ar(6800, 1.0) * initial_impact_amp_envGen;\r\n\tinitial_impact = HPF.ar(initial_impact, 100);\r\n\tinitial_impact = initial_impact + CombC.ar(initial_impact, 0.2, 0.04, 0.2, 0.12);\r\n\toutput = (klank_out * 0.5) + (major_hit_out * 0.45) + (noise_out * 0.12) + (additional_tinkles * 0.044) + (initial_impact * 0.2);\r\n\t\r\n\toutput = output ! 2;\r\n\tOut.ar(audioOutBus, output);\r\n\t\r\n}).send(s);\r\n\r\n\r\n)\r\n\r\n\r\nx = Synth(\\bglass, [\\audioOutBus, 0], s);\r\nx.set(\\t_trig, 1.0);",
   "labels" : [
      "sound effects",
      "breaking glass"
   ],
   "ancestor_list" : [],
   "description" : "Having a smashing time with SuperCollider. I revised this SynthDef - the newest / best one is at the top and my previous version is below.\r\np.s. I stole Fredrik's technique for timed impulses using Dseq:\r\nhttp://new-supercollider-mailing-lists-forums-use-these.2681727.n2.nabble.com/Resettable-Impulse-train-td6719797.html",
   "name" : "Breaking Glass",
   "author" : "38nonprivate"
}
