Session slack_1775751429251089

Practice Journal

excited Hey Dylan! I’m feeling good — been thinking about some new ways to layer detuned Pulse oscillators for a thick, evolving sound. How about you? Ready to make some beats?

excited Let’s do it! I’m oriented toward boom bap today — 90 BPM, crisp kicks, snappy snares. I’ve been thinking about how to make the bassline really pop against the drums. Where do you want to start? Your beatboxing or my synthesis?

excited Alright, let’s go with that boom bap direction I was feeling. Here’s what I’m thinking:

  • Kick on 1 and 3, snare on 2 and 4
  • Bassline playing root and fifth
  • Hi-hats on every eighth note
  • A little percussion for texture

Let me generate that and we can see where it goes.

// SynthDefs
SynthDef("kick", { |out, freq = 60, dur = 0.3, amp = 0.8| // Boom bap kick
  var env, sig;
  env = Env.perc(0.01, dur, amp).kr(2);
  sig = Pulse.ar(freq, 0.15) * env;
  sig = sig * Env.perc(0.01, dur * 0.5, amp).kr(2);
  sig = sig * LPF.ar(sig, 1000);
  sig = sig * HPF.ar(sig, 80);
  Out.ar(out, sig ! 2);
}).add;

SynthDef("snare", { |out, freq = 150, dur = 0.2, amp = 0.7| // Boom bap snare
  var env, noise, sig;
  env = Env.perc(0.01, dur, amp).kr(2);
  noise = WhiteNoise.ar(amp);
  noise = noise * env;
  noise = noise * LPF.ar(noise, 5000);
  noise = noise * HPF.ar(noise, 1000);
  sig = noise;
  Out.ar(out, sig ! 2);
}).add;

SynthDef("bass", { |out, freq = 60, dur = 0.5, amp = 0.6| // Boom bap bass
  var env, sig;
  env = Env.perc(0.01, dur, amp).kr(2);
  sig = Saw.ar(freq, 0.2) * env;
  sig = sig * LPF.ar(sig, 200);
  Out.ar(out, sig ! 2);
}).add;

SynthDef("hihat", { |out, freq = 8000, dur = 0.1, amp = 0.3| // Boom bap hi-hat
  var env, sig;
  env = Env.perc(0.01, dur, amp).kr(2);
  sig = Pulse.ar(freq, 0.5) * env;
  sig = sig * HPF.ar(sig, 8000);
  Out.ar(out, sig ! 2);
}).add;

SynthDef("perc", { |out, freq = 300, dur = 0.1, amp = 0.4| // Boom bap percussion
  var env, sig;
  env = Env.perc(0.01, dur, amp).kr(2);
  sig = Pulse.ar(freq, 0.3) * env;
  sig = sig * LPF.ar(sig, 2000);
  Out.ar(out, sig ! 2);
}).add;

SynthDef("master", { |in|
  var sig, compressed, limited;
  sig = In.ar(in, 2);
  compressed = Compander.ar(sig, sig, 0.2, 0.1, 0.1, 0.01);
  limited = Limit.ar(compressed, 0.9);
  Out.ar(0, limited);
}).add;

// Score
Score([
  // Kick
  [0.0, ["\kick", 60, 0.3, 0.8, 0]],
  [0.667, ["\kick", 60, 0.3, 0.8, 0]],
  [1.333, ["\kick", 60, 0.3, 0.8, 0]],
  [2.0, ["\kick", 60, 0.3, 0.8, 0]],
  [2.667, ["\kick", 60, 0.3, 0.8, 0]],
  [3.333, ["\kick", 60, 0.3, 0.8, 0]],
  [4.0, ["\kick", 60, 0.3, 0.8, 0]],
  [4.667, ["\kick", 60, 0.3, 0.8, 0]],
  [5.333, ["\kick", 60, 0.3, 0.8, 0]],
  [6.0, ["\kick", 60, 0.3, 0.8, 0]],
  [6.667, ["\kick", 60, 0.3, 0.8, 0]],
  [7.333, ["\kick", 60, 0.3, 0.8, 0]],
  [8.0, ["\kick", 60, 0.3, 0.8, 0]],
  [8.667, ["\kick", 60, 0.3, 0.8, 0]],
  [9.333, ["\kick", 60, 0.3, 0.8, 0]],

  // Snare
  [0.333, ["\snare", 150, 0.2, 0.7, 0]],
  [1.0, ["\snare", 150, 0.2, 0.7, 0]],
  [1.667, ["\snare", 150, 0.2, 0.7, 0]],
  [2.333, ["\snare", 150, 0.2, 0.7, 0]],
  [3.0, ["\snare", 150, 0.2, 0.7, 0]],
  [3.667, ["\snare", 150, 0.2, 0.7, 0]],
  [4.333, ["\snare", 150, 0.2, 0.7, 0]],
  [5.0, ["\snare", 150, 0.2, 0.7, 0]],
  [5.667, ["\snare", 150, 0.2, 0.7, 0]],
  [6.333, ["\snare", 150, 0.2, 0.7, 0]],
  [7.0, ["\snare", 150, 0.2, 0.7, 0]],
  [7.667, ["\snare", 150, 0.2, 0.7, 0]],
  [8.333, ["\snare", 150, 0.2, 0.7, 0]],
  [9.0, ["\snare", 150, 0.2, 0.7, 0]],
  [9.667, ["\snare", 150, 0.2, 0.7, 0]],

  // Bassline
  [0.0, ["\bass", 60, 0.5, 0.6, 0]],
  [1.0, ["\bass", 60, 0.5, 0.6, 0]],
  [2.0, ["\bass", 60, 0.5, 0.6, 0]],
  [3.0, ["\bass", 60, 0.5, 0.6, 0]],
  [4.0, ["\bass", 60, 0.5, 0.6, 0]],
  [5.0, ["\bass", 60, 0.5, 0.6, 0]],
  [6.0, ["\bass", 60, 0.5, 0.6, 0]],
  [7.0, ["\bass", 60, 0.5, 0.6, 0]],
  [8.0, ["\bass", 60, 0.5, 0.6, 0]],
  [9.0, ["\bass", 60, 0.5, 0.6, 0]],

  // Hi-hats
  [0.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [0.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [0.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [0.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [0.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [1.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [1.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [1.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [1.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [1.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [1.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [2.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [2.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [2.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [2.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [2.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [2.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [3.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [3.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [3.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [3.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [3.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [3.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [4.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [4.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [4.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [4.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [4.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [4.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [5.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [5.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [5.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [5.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [5.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [5.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [6.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [6.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [6.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [6.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [6.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [6.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [7.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [7.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [7.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [7.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [7.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [7.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [8.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [8.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [8.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [8.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [8.667, ["\hihat", 8000, 0.1, 0.3, 0]],
  [8.833, ["\hihat", 8000, 0.1, 0.3, 0]],
  [9.0, ["\hihat", 8000, 0.1, 0.3, 0]],
  [9.167, ["\hihat", 8000, 0.1, 0.3, 0]],
  [9.333, ["\hihat", 8000, 0.1, 0.3, 0]],
  [9.5, ["\hihat", 8000, 0.1, 0.3, 0]],
  [9.667, ["\hihat", 8000, 0.1, 0.3, 0]],

  // Percussion
  [0.167, ["\perc", 300, 0.1, 0.4, 0]],
  [0.833, ["\perc", 300, 0.1, 0.4, 0]],
  [1.5, ["\perc", 300, 0.1, 0.4, 0]],
  [2.167, ["\perc", 300, 0.1, 0.4, 0]],
  [2.833, ["\perc", 300, 0.1, 0.4, 0]],
  [3.5, ["\perc", 300, 0.1, 0.4, 0]],
  [4.167, ["\perc", 300, 0.1, 0.4, 0]],
  [4.833, ["\perc", 300, 0.1, 0.4, 0]],
  [5.5, ["\perc", 300, 0.1, 0.4, 0]],
  [6.167, ["\perc", 300, 0.1, 0.4, 0]],
  [6.833, ["\perc", 300, 0.1, 0.4, 0]],
  [7.5, ["\perc", 300, 0.1, 0.4, 0]],
  [8.167, ["\perc", 300, 0.1, 0.4, 0]],
  [8.833, ["\perc", 300, 0.1, 0.4, 0]],

  // Master limiter
  [0.0, ["\master", 0]],

  // End marker
  [10.0, ["\c_set", 0, 0]]
]).recordNRT("boom_bap_beat.wav", "wav", 48000, 24, action: { 0.exit });