Skip to content

Instantly share code, notes, and snippets.

@amokan
Forked from mimetaur/!norns_on_mac.md
Last active June 10, 2020 22:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amokan/999b6814144f83b8c839391e7fe23d39 to your computer and use it in GitHub Desktop.
Save amokan/999b6814144f83b8c839391e7fe23d39 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 ~/development/github/monome/norns/sc/core ~/Library/Application\ Support/SuperCollider/Extensions/monome-norns-core
    • ln -s ~/development/github/monome/norns/sc/engines ~/Library/Application\ Support/SuperCollider/Extensions/monome-norns-engines
    • ln -s ~/development/github/monome/norns/sc/ugens ~/Library/Application\ Support/SuperCollider/Extensions/monome-norns-ugens
  3. Make symlinks to Norns community repos e.g. ln -s ~/development/github/monome/we/ ~/Library/Application\ Support/SuperCollider/Extensions/monome-we

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

  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];
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment