Supercut (lib)


softcut wrapper lib / voice management utility




supercut is a wrapper utility for softcut which is particularly useful for managing common inter-voice relationships and statuses. commands are issued to supercut much the same as with softcut:, 1)

the difference here is that voices are abstracted into 3-6 supervoices which include:

  • mono or stereo i/o
  • state recall
  • buffer region management

to start using a supervoice, run

supercut.init(1, "mono")

or, for stereo, run

supercut.init(1, "stereo")

init() takes care of initializing most of the values needed to start things moving, though you can roll without it. just check the source if yr curious about what’s going on

for voice count, note that the norns limitations still apply, so a max of 6 mono voices or 3 stereo voices. any combo of those is also fine (2 stereo + 2 mono)

in supercut, every setter is also a getter:


this makes some actions super simple while keeping data centrilized

to transpose by an octave:
supercut.rate(1, supercut.rate(1) * 2)

to toggle recording:
supercut.rec(1, (supercut.rec(1) == 1) and 0 or 1)

in the REPL at the bottom, calling supercut.status(1) will yield immediate insight into the full status of a supervoice. some of these will look familiar from softcut docs but a few are new. the biggest additions afford some handy buffer management options.

there are 3 levels of specificity: loop, region, and home_region. within each supervoice, loop_start and loop_end begin at 0 and are bound to region. regions default to a ~116 second sections of softcut’s 2 buffers. by default these regions inhabit seperate territories, but an interesting way to interrupt this is stealing the region of another supervoice:

supercut.region_start(1, supercut.region_start(2))
supercut.region_end(1, supercut.region_end(2))
supercut.buffer(1, supercut.buffer(2))

there’s even a helper funtion for this:

supercut.steal_voice_region(1, 2)

now you can, for example, record to a region at rate = 1 and play back at rate = 2 for a live pitch shift effect

but how do we go back ? that’s what home_region is for. just run this:

supercut.steal_home_region(1, 1)

in addition to position, supercut also adds loop_position, region_position, and home_region_position to track tapeheads in each relative sector. they’re also updated automatically at the phase_quant time.

for a complete, interactive example, check out demo/linkd from the vid above !


library and example are in the project manager, but you may want to copy the lib into a project for use in a script