Discord Norns Study Group

Yeah, well… I am big fan of pair programming (I am successfully - meaning with fun - dabbling in that area) and I my experience is, those who are at beginner level often do ask really interesting questions. And if not, the experienced ones can test their ability to be patient and explain one and the same thing in different ways.

1 Like

Is this a thing? I would love to be a part of a monome discord. Cl.lash.clash at Gmail dot com.

1 Like

funny that i never followed up
dm me too please!

1 Like

hoping in as well! would love to get connected :slight_smile: derks.dan at gmail

1 Like

I’d also be interested!
Wouldn’t it be easier to share the join link here?

1 Like

it might not exist

somebody should make a server


edit: meetup tentatively planned for 12 central this saturday

5 Likes

our next session is in ~2 hours!

you are invited!

4 Likes

can you share more info on this ? sounds interesting but not sure what the focus is

1 Like

we meet once a week and share what we’re working on. get photobombed by our pets, talk about lua, and just hang.

4 Likes

Is it planned the next appointment?

next video study group: saturday, nov 7 @ 10 pacific / 11 mountain / 12 central / 13 eastern / 18 utc / 19 cet

2 Likes

EDIT EDIT: we’re meeting via discord video tomorrow (saturday) at noon central! it is a beginner/n00b day so come with any and all questions, ideas, or conversation topics!


EDIT: our next study group meets in about 2 hours! you are invited. link up above Discord Norns Study Group - #27 by tyleretters


the study group convened for the first time in 2021 today. we ended up spending ~4 hours mob-coding a supercollider patch together. use at your own risk!

(55..58)

{ 1.rrand(5); } ! 5

/*
Impulse.ar(freq: 440.0, phase: 0.0, mul: 1.0, add: 0.0)
Impulse.kr(freq: 440.0, phase: 0.0, mul: 1.0, add: 0.0)
Arguments:
freq
Frequency in Hertz.

phase
Phase offset in cycles (0..1).
*/

(
{
  /// TODO: make own delay/verb
  //kick
  var envSpec = Env.perc(0, 0.2);
  var outerTrig = Impulse.kr(1) ! 2;
  var trig = Impulse.ar(TChoose.kr(outerTrig, [2, 3, 4]));
  var ampEnv = EnvGen.ar(envSpec, trig);
  var osc = SinOscFB.ar(ampEnv * 200, ampEnv ** 20 * 5);
  var filter = HPF.ar(osc, 50);

  // hat
  // TODO: mod decay, comb filter
  var trigOuterHat = Impulse.kr(2, 0.5);
  var trigHat = Impulse.kr(TChoose.kr(trigOuterHat, [2, 3, 4, 2.01, 2.5, 8, 12]));
  var envHat = EnvGen.kr(Env.perc(0.01, SinOsc.kr(0.2, 0, 0.04, 0.05)), trigHat);
  var oscHat = SinOscFB.ar(5500, 10);
  var hat = envHat * oscHat;
  var combFreq = TChoose.kr(PulseCount.ar(trig[0]) % 4, [1/55, 1/66, 1/77]);
  var combFilter = CombN.ar(
    hat,
    1,
    combFreq,
    SinOsc.ar(0.73, 0, 0.17, 0.20)
  );

  // snare
  // probability - trig[0] for lead, divide by 4, then sample
  // var attack = Demand.kr(trig[0], Dwhite(0.01, 0.1));
  // var attack = SinOsc.kr(0.32, 0, 0.48, 0.49); // screaming!
  var attack = SinOsc.kr(0.32, 0, 0.048, 0.049);
  // var attack = 0.01;
  var trigSnare = Impulse.kr(1/2, 0.5);
  var envSnare = EnvGen.kr(Env.perc(attack, 0.3), trigSnare);
  var oscSnare = SinOscFB.ar(envSnare * 1000 + 200, 25 * envSnare + 5, envSnare);
  var primes = (2..13).nthPrime;
  var reverb = Mix.ar(primes.collect({|i|
    var delayTime = SinOsc.ar(0.02.rrand(0.1), 0, 0.02.rand, i/100);
    (oscSnare + AllpassL.ar(oscSnare, 1/2, delayTime, 3)) / primes.size
  }));

  // bass
  var trigBass = Impulse.kr(1/2, 0.75);
  var envBass = EnvGen.kr(Env.perc(0.01, 1, 1, 0), trigBass);
  var bass = SinOscFB.ar(1/combFreq, envBass ** 3, envBass ** 0.25);

  // pad
  // TODO: add delay to pad (musical time interval)
  var trigPad = Impulse.kr(1/2, 0);
  var padEnv = EnvGen.ar(Env.perc(1, 3), trigPad);
  var padOsc = SinOscFB.ar(
    SinOsc.kr(
      2.47,
      0,
      4,
      TChoose.kr(trigPad, [ 440, 528, 616 ] ++ [ 660.0, 792.0, 924.0 ])
    ),
    padEnv * 1.2,
    padEnv
  );

  // mixer (audio -> bus)
  var bpfTrig = Impulse.kr(1/12, 0);
  var mix = Mix.ar([
    bass * 0.5,
    oscSnare * 0.4,
    reverb * 0.4,
    hat * 0.3,
    padOsc * 0.1,
    Pan2.ar(combFilter, 1) * 0.2,
    filter * ampEnv * 0.5
  ]);
  var filterFreqEnv = EnvGen.ar(Env.perc(4, 0, 100, 0), bpfTrig);
  var filterAmountEnv = EnvGen.ar(Env.perc(2, 2, 1, 0), bpfTrig);
  var filtered = BPF.ar(mix, filterFreqEnv.midicps, 0.1);

  (filtered * filterAmountEnv) + (mix * (1 - filterAmountEnv))
}.play
)

[1/55, 1/66, 1/77]

(55.cpsmidi - 0.1).midicps

[55, 66, 77] * 8
// [ 220, 264, 308 ]
[ 440, 528, 616 ]
[ 660.0, 792.0, 924.0 ]

(
SynthDef(\sadpad, { |freq=616, t_trig=1, lfoSpeed=2.47, vibratoDepth=4|
  // var padEnv = EnvGen.ar(Env.perc(1, 3), t_trig);
  var padEnv = EnvGen.ar(Env.perc(1, 3), t_trig, doneAction: 2);

  Out.ar(0,
    SinOscFB.ar(
      SinOsc.kr(lfoSpeed, 0, vibratoDepth, freq),
      padEnv * 1.2,
      padEnv
  ) * 0.3 ! 2)
}).add;

Pbind(
  \instrument, \sadpad,
  \trig, 1,
  \freq, Pseq([ 440, 528, 616 ] *.t [1, 1.5]),
  \lfoSpeed, Pwhite(0.0, 3.0),
  \vibratoDepth, 0
).play;
)
[ 440, 528, 616 ] *.t [1, 1.5]


{ Pan2.ar(SinOsc.ar(110), SinOsc.ar(0.5, )) } .play;

3 + 3 * 2
3 * 2 + 3


#(2..3).nthPrime;


(2..13).nthPrime
1.nthPrime

55.reciprocal
1/55

  Limiter
  SoftClip
  softClip

.distort
.softclip.distort

s.sampleRate / s.options.blockSize


(1..10).collect({|i| i * 2})
9 Likes

Same link , Same time, we are meeting again , i am hosting again :slight_smile: feel free to join in!

next meetup: Saturday, March 27th, at 10am PST

i’ll be hosting the next norns study group. next week the theme will be: tone to drone in 60 seconds.

the plan is dip six toes into supercollider to make a drone and then dip the remaining toes into norns to put that drone into dronecaster. depending on the group we may opt to mob code a single drone, or you can follow along and make your very own drone. in any case, this is a really great way to get introduced to the norns ecosystem (supercollider + scripting).

any and all are encouraged engage at any and all levels. feel free to come with zero knowledge and ask questions (there are no stupid questions. period.). or feel free to come and just listen to drones (midding is encouraged). or feel free to come with a drone in hand and ask questions about it. or feel free to ask questions about anything else.

if you are interested in making your own drone right away, checkout the tutorial. but please - feel free to ignore the tutorial right now - its mainly for reference.

17 Likes

Great! Its in the same discord link that has been posted before?

Yep https://discord.gg/SPnEwh55 link expires in 7 days :slight_smile:

1 Like

What are the requirements for this Norns study group? Computer + Norns? Any software requirements? Should we have Supercollider installed? Confirm assistance?

1 Like

curiosity & courage! come on by

8 Likes

no norns required! though we might at some point go over how to insert drones into dronecaster (on norns), the supercollider bit will be norns-independent. it might be helpful to have supercollider installed if you want to follow along with that in realtime, but I plan to have a doc that will mirror what we do you can easily sit back and enjoy the show (and ask any questions that come to mind). no confirmation needed, just pop in!

3 Likes