(mod note: started a new thread for this topic as it could become a longer topic)

combining scripts is not necessarily hard, but it also requires quite a bit of attention to the inner-workings of both scripts you want to combine.

what @dan_derks suggested is correct in terms of tracking some sort of focus variable and switching your enc, key, redraw, and grid(…) functions.

but there are quite a few other things that will possibly get messy:

  • if both scripts have same-named variables or tables
  • if both scripts are trying to control or interpret the same MIDI ports or softcut or (etc)
  • DEFINITELY if both scripts are using an ENGINE this will not work, unless it’s the same engine, but that still may be difficult to navigate depending on the context.

but others would be very simple to merge. i could see a simple tutorial where:

  1. script 1 takes input into softcut and makes a parameterized echo effect with custom screen/enc controls
  2. script 2 is a sequencer that loads an engine and has a full interface

combining these two and then assigning a “switch view” control (such as ENC 1, given both scripts didn’t use it) would be very trivial.


a more in-depth option for “modular” recombinatory (that’s not a word i guess) would require following some very specific conventions to ensure that things worked together consistently— a task which might be hard to achieve. essentially scripts would need to be written as libraries with very thin “launcher” wrappers (and there could be wrappers to combine a stack of scripts, if they are compatible)

but again the current approach to DSP using supercollider right now is limited.

and some of these ideas end up being difficult to reconcile from a design perspective given the goal of easy accessibility for norns scripting. it’s important to keep this goal in mind— but there may be an elegant solution for combining/layering scripts.

6 Likes

i am hell bent on two fates with my norns and my pisound so this makes me smile

less space than a laptop

norns has changed the game for me too

peace

1 Like

here is a gist of an Otis + Boingg combo script.

since otis already uses an engine, i had to remove boinggs audio output engine. the choices are now either cv out via crow, or sending i2c to JF. there is no documentation, but it functions just like otis with the addition of a 4th page. on the 4th page the controls are…

key1 = alt

enc1 = nav
enc2 = select note
enc3 = adjust note

alt + enc2 = tempo

key2 = start ball
key3 = stop ball

nb: you can use a grid to control boingg while focused on the other otis pages.

Edit: just realized that the include lines will only work if the file is saved in your Otis folder. I’ll update the gist with the appropriate path tomorrow!

edit the second: script is now updated with the correct include paths

17 Likes

I’ve been thinking about this. Has anyone taken a swing at it?

Being able to instantiate and connect modules from different sources without touching code seems super cool.

ive made a fugu+reels script once for myself, here is the link
i think there was a takt+reels, but i cant find it :slight_smile:

its pretty easy to include reels to any non-softcut script, guide is in top post here

7 Likes

Will boingg send midi as well? (No time to test atm, my norns is disassembled)

This is something I’m interested in exploring, especially post-Crow. I’ve been thinking about a project that combines sequencing with the grid alongside tiny utility modules similar to O_c hemispheres, for instance.

I think it would be cool to approach that architecturally as little modular chunks that can be instantiated as needed, so that the individual pieces can see some reuse instead of being mired deep in my script.

My experience so far is that when I try to spin something out into a stand-alone class on Norns, it ends up feeling logical to have one class that handles the real work, and one that deals with the UI-facing stuff like params and drawing to the screen.

Thinking this out a bit more… getting these things to be totally friendly to the non-programmer gets a bit more complicated. We need to make sure each module responds to all the same functions for instance. In some ways the hardest part is representing it through the UI!

5 Likes

@noiserock, boingg does not speak midi. at least not yet. :slight_smile:

i just uploaded an earthsea + bounds combo script. you can get it here.

after i finish a couple more i will probably make a library post for the “collection”, al a ash

12 Likes

Woot woot!

FYI, Otis/boingg was rock solid last night at my gig. Your hard work is highly appreciated.

3 Likes

Poking around with simultaneous functionality (simple proof of concept below). Not sure why I though cpu might be an issue, especially for my use cases; 5 voices of softcut and midi recording / manipulation and I’m seeing < 8% cpu (without reverb or engines etc).

Working on a linear menu flow for access to transfer function params between ‘scripts’ to adjust influence [ie script 1 <> transfer fxn1 <> script 2 <> transfer fxn2 <> script 3 …], but not sure where I’m going yet. My limited coding ability should help me narrow down the options :stuck_out_tongue_winking_eye:

6 Likes

Hi Mat, i’m having a problem loading the oats and earthsea/bounds combo.
i get an init error with a missing decimator engine. Where is that engine found?
Is there a special place these scripts need to be placed?

CroneEngine.free
WARNING: Cannot call free on a Buffer that has been freed
FAILURE IN SERVER /n_free Node 15929 not found
FAILURE IN SERVER /n_free Node 15930 not found
FAILURE IN SERVER /n_free Node 15931 not found
warning: didn’t find engine: Engine_Decimator

1 Like

I had the same problem adding the script via maiden. Try adding the folder directly via Cyberduck.

1 Like

ok that worked thanks :slight_smile:

2 Likes

Do combo scripts show in Maiden’s updater view? How are those suggestions “curated”?

I love everything about this stuff I just can’t piece it together for lack of brainzpower My current norns use case is more buddha machine-like perhaps. just pressing buttons for winding down. I’m so happy for it, and also just passively slow-learning stuff by browsing these threads is great.

Glad you got it working! The decimator engine was added to otis in an update, you may need to update your copy of Otis :slight_smile:

1 Like

Fantastic scripts thankyou!

1 Like

The updater view presents a list of scripts that have been added to a file in the https://github.com/monome/norns-community repo. There are a number of folks from lines who can add to that, including merge pull requests from other contributors. So if someone created a new script, or combo script, they should also create a pull request against the norns-community repo to expose their script in the updater.

Just curious if it’s possible to use say a looper script and a more effects based script at the same time?

I think I read that anything can be recorded to tape so I imagine if I can’t use multiple scripts I could just use an efx script on a recording from a looper script.

Just ordered a Norns shield and really excited. Loopers/samplers r a big part of my workflow and I think the Norns is gonna open some doors for me :hole:

the fugu/reels link you posted is down, any chance you could link it again? it’s not totally clear to me what should replace ‘— your script’ here. would be awesome to add reels to animator, fugu, etc

reels
function init()
   reels.init()
end

function key(n,z)
  if reels.active then
    reels:key(n,z)
  else
   -- your script
  end
end

function enc(n,d)
   if reels.active then
      reels:enc(n,d)
   else
   -- your script
   end
end

function redraw()
  reels:redraw()
end

also, thanks @Justmat for oats and earthbound! bummed i’m just finding these now, these are amazing

2 Likes

unfortunately i dont have it anymore.

to include reels into other scripts you need to modify script enc() and key() functions with if-else conditions from my example.

--your script - line where original function of script should be moved.

reels.init() and reels:redraw() should be just appended into corresponding functions