Norns: updates

norns

#142

No, I deleted everything via Maiden 2.1g free. Cant think of anything else. strange one for sure. Is there another way to update?


#143

Same question - can we sFTP the update image over, unpack it and run the update.sh script manually?


#144

I get a blip of the looking for message, but if I blink I would miss it.

@tehn, thanks, I’ll try that later. I only had a few tapes but no sounds were on them (although sounds should have been on them).


#145

manual update method:

  • turn on hotspot mode
  • connect with SFTP, copy norns180828.tgz to /home/we/update/
  • connect command prompt using ssh 172.124.1.1 user we pw sleep
  • then these commands:
cd update
tar xzvf norns180828.tgz
tar xzvf 180828.tgz
cd 180828
./update.sh
  • then sleep using the menu

let me know if you get stuck on any step


#146

re: update fails. can you please first connect via hotspot to maiden and then try running the update, and letting me know what error messages come up?


#147

The full disk was indeed the problem! Got the update loaded up now, and I learned how to connect to maiden in the process (I think). Thanks for the help!


#148

I can’t get hotspot to work but I can connect via network.
When I attempt the update via USB i get this:


1
matron
sc
command failed: No such file or directory (-2)
command failed: No such file or directory (-2)
command failed: No such file or directory (-2)
Selected interface ‘wlan0’
bssid=dc:53:7c:4d:f0:0b
freq=2412
ssid=KDG-DF006
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.0.240
p2p_device_address=00:13:ef:60:06:a4
address=00:13:ef:60:06:a4
uuid=5b96d8c7-f12e-59d6-bf8b-fc4743ec5740
ls:
cannot access ‘/media/usb0/norns*.tgz’
: No such file or directory
ls: cannot access ‘/home/we/update/norns*.tgz’
: No such file or directory


Regarding the manual update.- I have no home/we/update file path. So maybe this is a part of the issue? Something has been / or I have deleted something (can’t think how though to be honest)


#150

cannot access ‘/media/usb0/norns*.tgz’

this suggests the usb disk is either not working or the file is missing

for the manual update, before copying, do:

mkdir /home/we/update

also i can help debug hotspot mode if you can tell me how it fails?


#151

yeah thanks. Could it be something to do with FAT? All the disks now format to FAT 16 on a mac below a certain size. Otherwise ive tried 5 or maybe six drives, which suggests that Norns is the Common denominator. Or formatting?

when you say do: mkdir /home/we/update
you mean type into matron? As it doesn’t appear to change anything or give me the directory in any way.
matron returns:
1
matron
sc
mkdir /home/we/update
lua: stdin:1: attempt to perform arithmetic on a nil value (global ‘mkdir’)
stack traceback:
stdin:1: in main chunk

Hotspot on Norns works, as in it sets up and returns a hotspot address of 172.24.1.1
When I type http://172.24.1.1/maiden in the browser it thinks for a while then says http://172.24.1.1/maiden ‘took too long to respond’. Also tried Norns:local and http://172.24.1.1 which both say ‘cant be reached’

apologies if Im being daft here on any of the above.


#152

Work like a charm! Thanks monome team and all contributors!

Looking forward to the forthcoming Studies.


#153

after hotspot is set up, you need to connect to the hotspot network called “norns” with your computer. the password is nnnnnnnn

then you can navigate to maiden for debugging.

the “manual update” instructions above require that you use ssh to get a command prompt for the norns. what OS are you on?


#154

Does anyone know of any documentation on how the use of Buffers/Buses changes in SuperCollider when using Supernova instead of SCSynth? I’m getting errors in my engines now that Supernova is running with norns.


#155

can you post the error messages? i was under the impression that no changes would be needed, but @jah can clarify


#156

manual update method

this also works for re-executing the update installer, if somehow something went wrong. (instructions are for linux and os x)

  1. boot norns normally, put the usb stick with the update in norns
  2. connect to laptop, open a terminal on laptop. copy/paste the following:
  3. screen /dev/tty.usbserialTAB 115200 (where TAB is, push tab to autofill your serial number) (note, linux has a different TTY string)
  4. push enter. you’ll get a login. user we pass sleep. then copy/paste:
  5. cd norns; ./stop.sh; cd ~
  6. sudo cp /media/usb0/norns180828.tgz ~/update/
  7. cd update; tar xzvf norns180828.tgz; tar xzvf 180828.tgz
  8. cd 180828; ./update.sh

(i just did this via screensharing to fix @instantjuggler’s norns… worked! and managed despite a keyboard mapping mismatch)

i’m trying to better understand why the update would fail in the first place, so please continue to let me know if anyone has trouble, i can help!


#157

as someone who’s been relying on formal builds to try out new scripts, I’ve been having a blast with the new stuff in this update.

rebound and passerby are both especially great and I’m keen to try out channel_changer once I refill my tape with some new recordings (I cleared stuff out just before updating).


#158

should “just work.” what errors / what engines?


#159

I’ve noted that I can’t get any of the emb scripts to work - no controls, nothing.

And sadly there’s something up with channel_changer that makes the screen all wonky …

Is anyone else experiencing challenges like this? I’ve got Grids attached and a (inactive) wifi dongle.


#160

The problem I’m having now is with my own engine. See SC code and error below:

Engine Code:

Engine_GlitchLooper : CroneEngine {

	//var in=0;
	//var out=0;
	var amp=1;
	var <densityBus;
	var <analysis;
	var <buffers;
	var <counterBuses;
	var <startEndBus;
	var <loopers;
	var <rands;
	var <record;

// this is your constructor. the 'context' arg is a CroneAudioContext.
// it provides input and output busses and groups.
// see its implementation for details.
	*new { arg context, doneCallback;
		^super.new(context, doneCallback);
	}

// this is called when the engine is actually loaded by a script.
// you can assume it will be called in a Routine,
//  and you can use .sync and .wait methods.
	alloc {
		var s = context.server;
		//Add SynthDefs
		//Looper Synth

SynthDef(\record, {|in, out, buf|
	var input = In.ar(in);
	var endPos = Gate.ar(Phasor.ar(0, BufRateScale.kr(buf), 0, BufFrames.kr(buf)), \run.tr(0));
	FreeSelf.kr(\run.tr(0),RecordBuf.ar(input, buf, 0, 1, 0, 1, 0, 0, 2));
	Out.kr(out, endPos);
}).add;

SynthDef(\randomPosition, {|buf, density=1, endValue, out|
	var randTrigger = Dust.kr(density);
	var randomStartFrame = TIRand.kr(0, endValue, randTrigger);
	var randomEndFrame = TIRand.kr(randomStartFrame, endValue, randTrigger);
	Out.kr(out, [randomStartFrame, randomEndFrame]);
}).add;

SynthDef(\onsets, {|in, out, win=4|
		var input = In.ar(in);
		var buf = LocalBuf.new(512,1);
		var onsets = Onsets.kr(FFT(buf, input));
		var stats = OnsetStatistics.kr(onsets, win);
		var value = (stats[0]/win);
		Out.kr(out, value);
	}).add;

SynthDef(\loop, {|out, buf, startLoop=0, endLoop, amp=0|
	var sound = LoopBuf.ar(1, buf, 1, 1, 0, startLoop, endLoop, 1);
	Out.ar(out, Pan2.ar(sound, 0, amp));
}).add;

		s.sync;

		//Setup Buffers, etc

		//Setup for Looper
		buffers = Buffer.allocConsecutive(5, s, (10*context.server.sampleRate).nextPowerOfTwo, 1);
counterBuses = Bus.control(s, 5);
startEndBus = Bus.control(s, 10);
densityBus = Bus.control(s, 1);
analysis = Synth.new(\onsets, [\in, context.in_b[0].index, \out, densityBus, \win, 4], context.ig, \addAfter);
loopers = 5.collect({|n| Synth.new(\loop, [\out, context.out_b.index, \buf, buffers[n].bufnum, \endLoop, counterBuses.subBus(n).asMap], context.xg, \addToTail )});
		rands = 5.collect({|n| Synth.new(\randomPosition, [\buf, buffers[n].bufnum, \density, 1, \out, startEndBus.subBus(n*2), \endValue, counterBuses.subBus(n).asMap],context.xg, \addToHead)});
record = Array.fill(5, {0});

		s.sync;

// this is how you add "commands",
// which is how the lua interpreter controls the engine.
// the format string is analogous to an OSC message format string,
// and the 'msg' argument contains data.

		this.addCommand("test", "ii", {|msg|
			msg.postln;
		});

		this.addCommand("amp", "if", {|msg|
			amp = msg[2];
			loopers[msg[1]].set(\amp, msg[2]);
		});

		this.addCommand("densitySet", "if", {|msg|
			rands[msg[1]].set(\density, msg[2]);
        });

		this.addCommand("recStart", "i", {|msg|
			"record start".postln;
			loopers[msg[1]].set(\amp, 0);
		buffers[msg[1]].zero;
		record[msg[1]] = Synth.new(\record, [\in, context.in_b[0].index, \buf, buffers[msg[1]].bufnum, \out, counterBuses.subBus(msg[1])], context.ig, \addAfter);
		});

		this.addCommand("recEnd", "i", {|msg|
			"record end".postln;
		//End Recording
		record[msg[1]].set(\run, 1);
		loopers[msg[1]].set(\amp, amp);
		});

		this.addCommand("normal", "i", {|msg|
		loopers[msg[1]].set(\startLoop, 0, \endLoop, counterBuses.subBus(msg[1]).asMap);
		});

		this.addCommand("glitched", "i", {|msg|
		loopers[msg[1]].set(\startLoop, startEndBus.subBus(msg[1]*2).asMap, \endLoop, startEndBus.subBus((msg[1]*2)+1).asMap);
		});

/// this is how you add a "poll", which is how to send data back to lua,
// triggering a callback.
// by default, a poll is periodically evaluated with a given function.
// this function just returns a random number.
		this.addPoll("density", {var density; densityBus.get({|value| density = value});density;});

/// here is a non-periodic poll, which we can arbitrarily trigger.
// notice that it has no function argument.
                //baz_poll = this.addPoll("baz", periodic:false);

	}

	free {
             // here you should free resources (e.g. Synths, Buffers &c)
// and stop processes (e.g. Routines, Tasks &c)
            buffers.free;
			counterBuses.free;
			startEndBus.free;
		    densityBus.free;
		analysis.free;
		rands.do({|n| n.free});
		loopers.do({|n| n.free});
	}

}

Error: I’m getting this when I try to use the recStart command

Server 'localhost' exited with exit code 0.
server 'localhost' disconnected shared memory interface
ERROR: Server-getControlBusValue only supports local servers
CALL STACK:
	Exception:reportError
		arg this = <instance of Error>
	Nil:handleError
		arg this = nil
		arg error = <instance of Error>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of Error>
	Thread:handleError
		arg this = <instance of Routine>
		arg error = <instance of Error>
	Object:throw
		arg this = <instance of Error>
	Server:getControlBusValue
		arg this = <instance of Server>
		arg busIndex = 0
	CroneAudioContext:buildVuBlob
		arg this = <instance of CroneAudioContext>
		var ret = <instance of Int8Array>
	< FunctionDef in Method Meta_Crone:initVu >  (no arguments or variables)
	Float:do
		arg this = inf
		arg function = <instance of Function>
		var i = 886.0
	Routine:prStart
		arg this = <instance of Routine>
		arg inval = 5.071387081
^^ The preceding error dump is for ERROR: Server-getControlBusValue only supports local servers
ERROR: Server-getControlBusValue only supports local servers
CALL STACK:
	Exception:reportError
		arg this = <instance of Error>
	Nil:handleError
		arg this = nil
		arg error = <instance of Error>
	Thread:handleError
		arg this = <instance of Thread>
		arg error = <instance of Error>
	Thread:handleError
		arg this = <instance of Routine>
		arg error = <instance of Error>
	Object:throw
		arg this = <instance of Error>
	Server:getControlBusValue
		arg this = <instance of Server>
		arg busIndex = 23
	< FunctionDef in Method CronePoll:init >
		var val = nil
	< FunctionDef in Method CronePoll:init >  (no arguments or variables)
	Float:do
		arg this = inf
		arg function = <instance of Function>
		var i = 19.0
	Routine:prStart
		arg this = <instance of Routine>
		arg inval = 44.711327644
^^ The preceding error dump is for ERROR: Server-getControlBusValue only supports local servers


#161

so, the error from sclang is sort of generic saying “the server crashed.” (a typical consequence - polling the I/O level busses fails quickly.)

so, here are two possibilities:

  • some bug in supernova
  • some bug in crone/engine code that manages to still work in scsynth but makes supernova crash (like writing outside a buffer boundary?)

try to narrow it down - maybe the call Buffer.zero, maybe the recording synthdef - indeed, this might be better done in a gist.

they are tests that don’t have any UI. they shouldn’t have gone on the production disk image and they are no longer in the repo (except “loops” - which again has no UI and is a test of the SoftCut engine, could be used as a template if you want to use that engine for your own echo machine. should make sounds if you provide audio input.)


#162

Thanks, I’ll look into it and report back.