SHARE
TWEET

Untitled

a guest Oct 17th, 2019 83 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Engine_Drumf : CroneEngine {
  2.  
  3.     classvar <numVoices = 4;
  4.  
  5.     var <trig_bus;
  6.     var <drum_synth;
  7.  
  8.     var <drum_def;
  9.  
  10.     *new { arg context, doneCallback;
  11.         ^super.new(context, doneCallback);
  12.     }
  13.  
  14.     alloc {
  15.  
  16.         var synth_param_names;
  17.         var s = context.server;
  18.  
  19.         Routine {
  20.             // make a synthdef
  21.             drum_def = SynthDef.new(\better_drumf, {
  22.  
  23.                 arg out=0, trig_bus, amp=0.25,
  24.  
  25.                 pitch_base=55,
  26.                 fm_ratio=2.0, fm_mod=2.0, noise_rate=10000,
  27.                 noise_shape=0,
  28.  
  29.                 osc_level = 1.0,
  30.                 noise_level = 1.0,
  31.  
  32.                 noise_amp_env_atk=0.01,
  33.                 noise_amp_env_sus=0.1,
  34.                 noise_amp_env_rel=0.2,
  35.  
  36.                 osc_amp_env_atk=0.01,
  37.                 osc_amp_env_sus=0.1,
  38.                 osc_amp_env_rel=0.2,
  39.  
  40.                 pitch_env_atk=0.01,
  41.                 pitch_env_sus=0.0,
  42.                 pitch_env_rel=0.3,
  43.                 pitch_env_ratio=2,
  44.  
  45.                 fc_env_atk=0.01,
  46.                 fc_env_sus=0.0,
  47.                 fc_env_rel=0.3,
  48.                 fc_env_ratio=2,
  49.                 fc_base = 1000,
  50.  
  51.                 filter_gain=1;
  52.  
  53.                 /*
  54.                 gain_env_atk=0.01,
  55.                 gain_env_sus=0.0,
  56.                 gain_env_rel=0.3;*/
  57.  
  58.  
  59.                 var gate, snd, osc, noise,
  60.                 noise_amp, osc_amp, pitch,
  61.                 noise_amp_env, osc_amp_env, pitch_env, fc_env, fc;
  62.  
  63.                 gate = InTrig.kr(trig_bus);
  64.  
  65.                 noise_amp_env = Env.linen(noise_amp_env_atk, noise_amp_env_sus, noise_amp_env_rel);
  66.                 osc_amp_env = Env.linen(osc_amp_env_atk, osc_amp_env_sus, osc_amp_env_rel);
  67.                 pitch_env = Env.linen(pitch_env_atk, pitch_env_sus, pitch_env_rel);
  68.                 fc_env = Env.linen(fc_env_atk, fc_env_sus, fc_env_rel);
  69.  
  70.                 pitch = pitch_base * (1.0 +  (pitch_env_ratio * EnvGen.ar(pitch_env, gate)));
  71.                 noise_amp = EnvGen.ar(noise_amp_env, gate);
  72.                 osc_amp = EnvGen.ar(osc_amp_env, gate);
  73.                 fc = fc_base * (1.0 + (fc_env_ratio * EnvGen.ar(fc_env, gate)));
  74.  
  75.                 osc = SinOsc.ar(pitch, SinOsc.ar(pitch * fm_ratio) * fm_mod).distort;
  76.                 osc = osc * osc_amp * osc_level;
  77.                 noise = SelectX.ar(noise_shape, [
  78.                     LFNoise0.ar(noise_rate),
  79.                     LFNoise1.ar(noise_rate),
  80.                     LFNoise2.ar(noise_rate)
  81.                 ]);
  82.  
  83.                 noise = noise * noise_amp * noise_level;
  84.  
  85.                 snd = osc + noise;
  86.  
  87.                 snd = MoogFF.ar(snd, fc, filter_gain);
  88.  
  89.                 Out.ar(out, snd*amp);
  90.             }).send(s);
  91.  
  92.             // send to the server
  93.             drum_def.send(s);
  94.  
  95.             // make a control bus for triggers
  96.             trig_bus = Array.fill(numVoices, {
  97.                 Bus.control(s)
  98.             });
  99.  
  100.             s.sync;
  101.  
  102.             // make a synth lookin at the bus
  103.             drum_synth = Array.fill(numVoices, {
  104.                 arg i;
  105.                 Synth.new(\better_drumf, [\trig_bus, trig_bus[i].index], s);
  106.             });
  107.  
  108.         }.play;
  109.  
  110.  
  111.         this.addCommand("trig", "i", {
  112.             arg msg;
  113.             var i = msg[1];
  114.             postln(msg);
  115.             trig_bus[i].set(1.0);
  116.         });
  117.  
  118.         synth_param_names = [
  119.             \pitch_base,
  120.             \pitch_env_ratio,
  121.             \fm_ratio,
  122.             \fm_mod,
  123.  
  124.             \noise_rate,
  125.             \noise_shape,
  126.  
  127.             \osc_level ,
  128.             \noise_level ,
  129.  
  130.             \noise_amp_env_atk,
  131.             \noise_amp_env_sus,
  132.             \noise_amp_env_rel,
  133.  
  134.             \osc_amp_env_atk,
  135.             \osc_amp_env_sus,
  136.             \osc_amp_env_rel,
  137.  
  138.             \pitch_env_atk,
  139.             \pitch_env_sus,
  140.             \pitch_env_rel,
  141.  
  142.             \fc_env_atk,
  143.             \fc_env_sus,
  144.             \fc_env_rel,
  145.             \fc_env_ratio,
  146.             \fc_base,
  147.  
  148.             \filter_gain
  149.         ];
  150.  
  151.         synth_param_names.do({ arg name;
  152.             this.addCommand(name, "if", {
  153.                 arg msg;
  154.                 var idx, value;
  155.                 postln(msg);
  156.                 idx = msg[1] - 1;
  157.                 if((idx > 0) && (idx < numVoices), {
  158.                   value = msg[2];
  159.                   drum_synth[idx].set(name, value);
  160.                 });
  161.             });
  162.         });
  163.  
  164.     }
  165.  
  166. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top