Norns: How much can Norns do at once?

I’m sorry if my search-fu has failed here. I am considering getting a Norns when I am able for a grid project. I feel confident that it can handle my specific project as a controller front end. That said, it’s pretty unclear what to expect a Norns to be capable of doing.

I realize that it is a challenge to say “this multipurpose computer can do X amount of things” and that it is a bit of a silly question, but that said, I would love some practical examples of “what pushing a Norns to its limits” looks like.

2 Likes

I’m quite new to norns as well so definitely not the best equipped person to directly answer your question, but this script, islands, might be of interest to you as an example of what can be done simultaneously on norns. Are you wondering about maxing out the CPU or something more specific?

1 Like

The limits of individual scripts in terms of CPU usage will I think mostly depend on the Supercollider engine used and how much things Softcut does.[ I don’t think the rest of what Norns does is really CPU-intensive. EDIT : ignore this last part and see the post beyond mine which contains more relevant info regarding that…]

Beyond that, as far as I understand it, a Norns script can have a Supercollider engine, which can generate/process audio and can also use Softcut (to process/manipulate audio/samples). Well, this is actually a logical or, as the SuperCollider engine and Softcut are not mutually exclusive :slight_smile:

On top of that the Lua layer handles data in terms of controls, UI, etc.

And there’s some reverb/compression and the tape player at the end of the chain if I’m not mistaken (i.e. the tape does not go through Softcut or the engine).

1 Like

its impossible to answer without knowing your metrics for success.

the lua interpreter and the supercollider synthesis server each get approximately a full 1.2 GHz core on the compute module.

on the synthesis side, i get about 200 voices of a basic sinewave + panner + amplitude synth before i hit dropouts. (this is the builtin wavetable-based sine osc)

(this engine will attempt to allocate 1 million voices, but will fail after ~2K due to supercollider’s internal node count limit.)

Engine_ManySines.sc:

Engine_ManySines : CroneEngine {
 var n, t, g, r, s, amp;
 
   *new { arg context, doneCallback;
   	^super.new(context, doneCallback);
   }

   alloc {
   
 	s = Server.default;
   
   amp = 0.01;
   n = 1000000;
   t = 0.25;
   g = Group.new(s);
   
   r = Routine { n.do { arg i; var hz, pan; 
       hz = 55 * [2, 3/2, 6/5].choose * (2 ** (4.rand)) + 4.0.rand;
       pan = 1.0.rand2;
       { Pan2.ar(SinOsc.ar(hz) * amp, pan) }.play(target:g);
   
       postln([i, hz, pan]);
       t.wait;
   }}.play;
 }
 
 free { 
   g.free;
   r.stop;
 }
}

manysines.lua:

engine.name = 'ManySines'

init = function()
end 

on the lua side, your main metric of success is probably timing. if you do nothing but crank out (say) MIDI notes from a metro, you can expect extremely low jitter (<1ms) and basically zero drift. if your script does other stuff then there is no limit to how poor you can make the timing performance. filesystem access and extensive screen drawing are what typically sink a script’s timing performance.

depending on what exactly you’re doing you may run into other undesirable sources of timing variance, such as the latency introduced by OSC or the fact that softcut commands are only executed on audio block boundaries.

i would expect the norns computer to be comfortably over-specced for any “dumb controller” role.


i guess i should say that if you want to develop things at a lower level and forgo using our stack, there is more compute headroom available.

oh, yeah: and turning off wifi will help things run smoother as well if you are really trying to push it.

9 Likes

I know it’s impossible at a practical level, but the store page and documentation don’t give you any real sense of this. I appreciate your explanation as at least a point of reference!

That’s my expectation, but also not my interest for the moment. Part of my interest in Norns is having a higher level interface. I love working with crow, and while I could write a firmware for Anisble that does what I am aiming to do with Norns, I’d much rather write higher level lua from a prototyping/code management perspective.

As noted, I’m sure it can manage at least my initial consideration, but ultimately I was curious about what else it could manage as a box of possibilities. I realize each element one might realize could take an arbitrary amount of CPU, which is why it is a silly question. Just looking for useful ways to think about it as a means of better understand what I might be buying.

Thanks for your thoughts.