I got the engine + a script that loads it to expose params and run on the device. I have told SuperCollider to create a UGen called SoundIn.ar(0, 0.5) which I understand to mean “get an input signal from bus 0” which on normal laptop SuperCollider means “the default sound card input”. This does not appear to be the case for Norns SC as I hear silence from the outputs but can monitor the input signal on headphones with the “mon” level in the mixer UI. The same SynthDef runs as expected on my laptop SC.

Do I need to know the names (or numbers) of all busses available to norns SC and pass a non-default to SoundIn?

no, that should work, but it’s probably better to stick with the IO busses provided by AudioContext. this API hasn’t changed in 2.0, but they are mapped differently under the hood.

in other words, i don’t believe anything has changed since this passthrough example engine:
[ https://gist.github.com/catfact/c08ec86bd7def0a1b072925e1287a4af ]

however, what has changed is the way things are routed. crone (the mixer process) has to be told to turn up the routings to and from SC (which are called ext, in the norns menu and elsewhere.) i know all the namings are a bit confusing right now, we’re gathering feedback and wlil probably change some of them.

i’m not in front of norns at the moment but will verify later that things are working as expected. maybe inputs to SC are broken somehow.

might help if you want to share your work-in-progress as a gist or something

1 Like

I got the passthrough example to work with the bus named context.in_b[0]. It might be some weirdness with how I mapped params to the filters that blocked output after I moved the engine to the device.

I have enough to go on from here, thanks.

things I have learned today

  1. The names of attributes (is that the correct jargon for SC?) in the context object from CroneEngine exist only in the source code right now. A document with a table of these values and what they do would be helpful as a companion to reading code examples.
  2. The Lua doc on the device web server for the controlspec object has no contents. I ended up reading the source code to discover there is a “db” warp type for amplitude, which helped me a bunch.
  3. As you noted, a signal graph from JACK would be helpful. Output from jack_lsp -c below. Does this pipe into graphviz? lol.
192.168.0.104 ~/norns $ jack_lsp -c
system:capture_1
   crone:input_1
system:capture_2
   crone:input_2
system:playback_1
   crone:output_1
system:playback_2
   crone:output_2
crone:input_1
   system:capture_1
crone:input_2
   system:capture_2
crone:input_3
   softcut:output_1
crone:input_4
   softcut:output_2
crone:input_5
   SuperCollider:out_1
crone:input_6
   SuperCollider:out_2
crone:output_1
   system:playback_1
crone:output_2
   system:playback_2
crone:output_3
   softcut:input_1
crone:output_4
   softcut:input_2
crone:output_5
   SuperCollider:in_1
crone:output_6
   SuperCollider:in_2
softcut:input_1
   crone:output_3
softcut:input_2
   crone:output_4
softcut:output_1
   crone:input_3
softcut:output_2
   crone:input_4
SuperCollider:in_1
   crone:output_5
SuperCollider:in_2
   crone:output_6
SuperCollider:out_1
   crone:input_5
SuperCollider:out_2
   crone:input_6
1 Like

agreed on all points; SC doc and block diagram are on me.

the block diagram includes a lot more than the jack connections through - there are all the routings within the crone and softcut clients as well.

i promise to finish this weekend - got a little too obsessed with making it look Beautiful and Easy To Read, may just fall back on a gross graphviz thing in the interim

5 Likes

Did this ever get implemented?

yes - please test if you wish

3 Likes

Excellent! I will test this evening and tomorrow. I appreciate all the work going into 2.0, and softcut really is a dream come true :slight_smile: Thank you, @zebra !!

5 Likes

here’s a low-detail routing diagram

(and it seems like i missed the part where signal is SENT to sc/external)

8 Likes

just wondering if this is being addressed in 2.0 - it’d be useful to map a few of the softcut params to a controller and I don’t think that’s possible since it’s breaking the menu. didn’t see an issue for it in monome/norns so I’d be happy to create one if needed.

please create an issue so it can be dealt with by the appropriate party

1 Like

working on proper writeup of internal details for softcut

meantime, here’s full block diagram for the mixer client part of crone process

@lazzarello - that is, everything except the jack client connections.

hopefully useful reference for programming / understanding how the mix params are applied.
https://github.com/monome/norns/blob/dev/doc/crone/crone-process-routing.pdf

3 Likes

having fun adding a softcut delay ilbrary thing I’ve been working on to existing scripts. a bit of a challenge to shoehorn what I think the UI should be in some cases but otherwise very easy to really add new dimensions to already great scripts thanks to softcut.

9 Likes

Apologies for the newbie question. Is there a page somewhere that explains exactly what softcut is ? I am missing something i think , running 2.0 but somehow it is not obvious to me what this is

it’s a program for manipulating buffers of audio. MLR, for example, uses softcut for all of the audio stuff it does. but at the same time it doesn’t have to be such a starring role. It can just be a “tape recorder” in a script, for instance.

all your tunnels_base are belong to us. :smiley:

7 Likes

Thankyou - how do you access it? Is it something that is just internal to the code (within a script)?

1 Like

@jonnymon yes, softcut is a set of audio processing functionality that is available to script writers, in addition to whatever “engine” is running in supercollider. ‘reels’, ‘cranes’ and ‘mlr’ are scripts which use softcut extensively. all the parameters are exposed in the Lua coding environment. softcut input and output level parameters are always exposed on the MIX page and in SYSTEM > AUDIO.

i still have not written a real manual. sorry about that. someday i will have time.

the one-sentence description is that it is a polyphonic varispeed ‘tape-like’ buffer manipulation framework. it has some built-in filters and is primarily designed for sample-accurate crossfaded looping.

it is not exactly a “tape emulation” b/c it does not seek to replicate mechanics or saturation characteristics - instead it has its own set of “mechanics” - the way crossfade applies to record/erase levels (tape can’t do that,) a record-level “dead zone” around rate=0, modulating filter cutoff by rate, &c - and tonal characteristics introduced by filtering and softclipping around the resampling stage.

again i agree that these things need real documentation and someday i will be able to finish that. latest chunk i made is a diagram of the inter-voice routing (which complements the top-level norns routing diagram):
softcut-routing.pdf (47.3 KB)

(4 voices are shown, though in fact there are 6. hopefully this helps explain why i think it’s OK for voices to be monophonic - given that they can be synchronized.)

10 Likes

any chance I could locate the glut tunnels script somewhere?

Hey guys! I’ve wrapped reels into lib, so it is now possible to add it to any script w/ non softcut engine

How-to
  • Update reels to latest version
  • Add this hooks to your script:

local reels = include('reels/lib/libreels')

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

Activate it via params page or manually with reels.active = true

14 Likes

I’ll try to get out a version this weekend using a similar method as @its_your_bedtime’s reels above (noting that you wouldn’t be able to use both concurrently).

3 Likes