Norns: development

As a designer, not a developer, working out the best structure to save sequencer data is proving a headache! Luckily I’m back at work Monday and have an army of data specialists to talk to.

Currently I have a 2D array, with a sequence per row.

1 Like

hrm, i’m looking at the tabutil.save for the first time
works great! thanks @markeats for adding that.

NB though, the format for nested tables is kinda funky.

given this guy:

 a = { "one", {2, 3}, {four=4, fivesix={5,6}} }

calling tabutil.save(a, 'a_save.lua') produces a file like this:

return {
-- Table: {1}
{
   "one",
   {2},
   {3},
},
-- Table: {2}
{
   2,
   3,
},
-- Table: {3}
{
   ["fivesix"]={4},
   ["four"]=4,
},
-- Table: {4}
{
   5,
   6,
},
}

so it’s a kind of “flattened tree” - not sure if there is a more accurate technical term for this. it’s clear enough how it works, but not exactly intuitive to edit directly. (OTOH something i can definitely live with.)

i’m a little surprised; wonder if there is a way to simply serialize a table to something that looks more like its declaration in lua. (maybe making some assumptions like no metatables, no cycles.)

here’s a boatload of other table serialization methods implemented in lua, maybe there’s alternatives to consider:
http://lua-users.org/wiki/TableSerialization

2 Likes

FYI @artfwo fixed param:save / param:load to process key id’s instead of indexes, so it should perform well with table changes.

for save/loading param data i’d highly suggest using the built-in param functions. the user can also hold K1 while in the PARAM menu to save/load.

i know this doesn’t cover custom data ie sequences… many other options for that mentioned above.

2 Likes

To recent discussion about saving patterns and presets, I just finished adding @markeatsload/save/delete routines found in loom to my Strum script. My blunders aside, this works very well. Kudos.

Will something break in the future if I am saving/loading synth params using the above method?

1 Like

I have a very rudimentary 4 band parametric filter chain engine in a branch on my dust fork. It works, kind of.

WARNING: THIS MAY DAMAGE PLAYBACK EQUIPMENT

The scary message is because of an unknown bug I hit. It’s a strange one, so any help would be amazing.

Running the same SynthDef on my laptop always works as expected. Running it on the device has a strange, painful bug. The engine loads, then in the Lua REPL I can set the Q with engine.rq1(0.1) or for any of the other filters in the chain. But when the initial Q changes on some (but not all) of the filters, the engine explodes and causes a painful amount of noise on the outputs…for only about 5 seconds. Following that, the output falls back to normal and all further modulations of that parameter that caused the explosion work as expected.

I tested both with manual modulation via REPL and using params on the device through control specs. I made a sample script to load the engine and expose params.

The only clue I have is there is some way of setting a default for all the Q values that I have overlooked. This may have caused a divide by 0 (or nil) since the docs for BPeakEQ say “rq is the reciprocal of Q. bandwidth / cutoffFreq”

Thought this might be of interest to you Supercollider users as Norns inspiration:

4 Likes

@lazzarello yeah i’d recommend setting some default values for RQ args in the synthdef

otherwise i believe they are indeed set to 0 by default and that is indeed Bad News For Biquads

(side note, i find it misleading that the parameters are labelled “q” when they control RQ and thus work backwards.)

1 Like

Can you develop for norns directly in VS Code rather than Maiden? It’s such a nice editor I’d love to be able to save directly into norns, and also a local folder for git, rather than manually keeping Maiden and VS Code in sync with copy paste.

I’ve only work in Lua on Norns, but I do about as much coding in sublime text as I do in Maiden. I just use git to keep things synced between my mac and Norns…

If I understand the question this is how I edit the files in BBEdit. Open the folder where the file you want to edit is, using cyberduck, right-click on the file and choose Edit in…
(When you have chosen your favorite editor you just click on the file in cyberduck and press Command+K)

2 Likes

you can also use SSHFS (mount a file system over ssh)

on macos google “fuse”

4 Likes

afaik, one thing you’ll miss by using a text editor other than the Maiden editor is loading your script onto the device without copy + paste or rebooting.

2 Likes

I do about half of my norns-ing in maiden and the other half in sublime text 3. It’s pretty easy and quick to sync things up with git.

2 Likes

I highly recommend going the sshfs route if using an editor running on a computer. The maiden repl can then be used to run norns.script.load(...) (passing in the relative path to your script within the dust structure) to achieve what the play button does.

UPDATE: I should add that the repl has basic command history, just hit the up arrow on your keyboard and press return to re-evaluate the last expression.

6 Likes

I’ve been working locally in VS Code and made a little python command line script (while I was procrastinating today) to help me manage syncing files and various other admin stuff, so I can type commands like:

  • norns shell
  • norns list
  • norns remote list
  • norns sync <script name>

It is entirely tailored to my computer right now, but if anyone is interested I could figure out how to make it a more polished sharable resource.

1 Like

Running norns on RasPi I have bluetooth already on-board (norns hardware could easily add a BT usb nub for this)… so why not try to get like a WiiMote talking to norns? :grin:

I’ve got the bluetooth stuff recognizing the WiiMote, pairing and and connecting so that’s great. but… norns needs some hacking in device_monitor.c to make this go.

I started a github issue here in case someone smarter than me has time to lend a hand :slight_smile:

(This could also be helpful for stuff like bluetooth midi?)

5 Likes

Yikes, that’s exciting. I had a blast with using wiimote with Ableton… theoretically if you get this going with rPi norns (π o r π s ?) it should work also work with norns and a bluetooth dongle?

In theory, yes. In practice not yet.

For the moment norns only looks at the usb subsystem for input devices, so this area needs more code (that ive not been able to figure out on my own). Also I think UART might need to be disabled, so…? :thinking:

1 Like

I’m interested in developing an audio utility script for Norns. To start, I would like to be able to normalize samples, trim the start and end, and resave. Can anyone point me in the right direction for normalization? Would this require SC engine development, or is this already available?

2 Likes

I would love this!

Not sure if this is any help:
http://doc.sccode.org/Classes/SoundFile.html

Also, I would look into @markeats Timber for Waveform-displaying/GUI stuff.

3 Likes