Skip to content

Instantly share code, notes, and snippets.

@mimetaur
Last active November 28, 2024 04:18
Show Gist options
  • Save mimetaur/18346a71f1444ec8bea98a0c3c6fa365 to your computer and use it in GitHub Desktop.
Save mimetaur/18346a71f1444ec8bea98a0c3c6fa365 to your computer and use it in GitHub Desktop.
Norns Engine Development on MacOS - quick guide
  1. Pull the norns repository

  2. Make symbolic links from norns sc folders -> SuperCollider Extensions folder:

    • ln -s ~/Developer/monome/norns/sc/core ~/Library/Application\ Support/SuperCollider/Extensions/monome-norns-core
    • ln -s ~/Developer/monome/norns/sc/engines ~/Library/Application\ Support/SuperCollider/Extensions/monome-norns-engines
    • ln -s ~/Developer/monome/norns/sc/ugens ~/Library/Application\ Support/SuperCollider/Extensions/monome-norns-ugens
  3. Make symlinks to Norns community repos e.g. ln -s ~/Developer/monome/we/ ~/Library/Application\ Support/SuperCollider/Extensions/monome-we

  4. Make symlinks for custom engine development e.g. ln -s ~/Developer/MyNornsMachines/ ~/Library/Application\ Support/SuperCollider/Extensions/MyNornsMachines

  5. If you're running Jack on MacOS, you will want to comment out lines related to Jack connection in Crone.sc

// thanks to @zebra: https://llllllll.co/t/norns-crone-supercollider/14616/129?u=mimetaur
n = NetAddr.localAddr;
n.sendMsg('/engine/load/name', 'PolyPercPannable');
// equivalently:
// Crone.setEngine('Engine_PolyPercPannable')
n.sendMsg('/command/hz', 330);
n.sendMsg('/command/amp', 0.5);
// CroneEngine_PolyPercPannable
// sine with perc envelopes triggered on freq
// panning added
// make sure this lives on your SC include paths
// by @mimetaur
Engine_PolyPercPannable : CroneEngine {
var pg;
var amp=0.3;
var release=0.5;
var pw=0.5;
var cutoff=1000;
var gain=2;
var pan=0;
*new { arg context, doneCallback;
^super.new(context, doneCallback);
}
alloc {
pg = ParGroup.tail(context.xg);
SynthDef("PolyPerc", {
arg out, freq = 440, pw=pw, amp=amp, cutoff=cutoff, gain=gain, release=release, pan=pan;
var snd = Pulse.ar(freq, pw);
var filt = MoogFF.ar(snd,cutoff,gain);
var env = Env.perc(level: amp, releaseTime: release).kr(2);
// out.poll;
Out.ar(out, Pan2.ar( (filt * env), pan));
}).add;
this.addCommand("hz", "f", { arg msg;
var val = msg[1];
Synth("PolyPerc", [\out, context.out_b, \freq,val,\pw,pw,\amp,amp,\cutoff,cutoff,\gain,gain,\release,release,\pan,pan], target:pg);
});
this.addCommand("amp", "f", { arg msg;
amp = msg[1];
});
this.addCommand("pw", "f", { arg msg;
pw = msg[1];
});
this.addCommand("release", "f", { arg msg;
release = msg[1];
});
this.addCommand("cutoff", "f", { arg msg;
cutoff = msg[1];
});
this.addCommand("gain", "f", { arg msg;
gain = msg[1];
});
this.addCommand("pan", "f", { arg msg;
pan = msg[1];
});
}
}
@mimetaur
Copy link
Author

mimetaur commented Apr 2, 2019

Noted, I just switched to symlinks locally and it works great, with none of the weirdness I hit from editing norns-config.sc. Updated the gist accordingly.

@p3r7
Copy link

p3r7 commented Jun 1, 2021

Hi,

I didn't know this gist existed until now.

Just for X-referencing, there are similar instructions on the pretty recent norns.community wiki. A link to this gist got added to it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment