[cheat codes 2] (rev 220714: LTS7.2.1 [LFOs + more!])

confirmed. :heart_eyes:

i am happily stumbling my way around cheatcodes, loving every moment. here are today’s results.


New Norns user here. Is there a way to get the output of the playing tape into the buffers?

I’m super excited about cheat codes and would like to use it in a workflow to build off of prerecorded modular jams. Idea would be something like this: load up longish audio and play in the tape, then start grabbing portions in realtime in Cheat codes buffers to loop, slice, etc. on top of the playing tape.

I see in the Crone signal flow diagram that the tape in comes after the softcut in, but is there anything I’m missing that could make such a workflow possible with the current script?


@SpectralClockworks, welcome!

(edited for incorrectness :P)
i don’t think this is possible given how norns is wired by default. it might be possible to perform some jack rewiring so the tape output is sent to softcut, similar to the approach described here.

i mucked around a bit trying to do this but i don’t understand how tape is wired up well enough get it working (assuming it is even possible).

1 Like

i believe you’d check in params/levels

Thanks @edison & @jaseknighter!

I’d actually tried the level param for tape with no luck. I tried again after reading edison’s post, with oooooo loaded, and it actually worked fine. Went back to CC2, no dice.

I was ready to take the question off this topic, assuming it was a routing issue, but the fact that it seems to work with some scripts and not others makes me wonder…

ah! apologies… i’ve actually never tried it, but always assumed it worked that way. i’m sure dan will holler in a bit, but this would be a really handy way of jamming!

the other option is to just set the buffer to 32 seconds…. then load in your tape to a buffer. i believe it will load in the first 32 seconds of your recording that way. not perfect but had some really rad jams that way with old orgn recordings.

1 Like

No apologies needed at all, your comment was super helpful…I don’t know all the expected behavious so was really at a loss.

After browsing the oooooo code and meditating on the Crone a bit, I see that oooooo is using SoundIn within a custom engine. I believe CC2 uses the standard softcut ins (I’m not as able to skim the lua code as sc code). It looks like the softcut lit bus is just ext and engine, while the aux send (which I assume goes to the engine in) comes after tape and mirrors the level params.

I suspect what would be needed is a utility passthrough engine that just forwarded SC in to out. Maybe I’ll see if I can figure out how to hack that together.

hey y’all hope all’s well!

just to confirm, it’s totally possible to route TAPE playback into softcut (+ cheat codes) without any jack-hacking! :slight_smile:

if you navigate to PARAMETERS > SOFTCUT, there’s an input tape level which is likely -inf. if you bump that up to ~0dB, you’ll be able to route TAPE playback into the live buffers in cheat codes like you would with the incoming audio signal. it does require the tape level on PARAMETERS > LEVELS to be turned up as well – the default norns routing doesn’t allow bypassing monitoring the TAPE signal as you route it into softcut.

just tested + confirmed on my end, so please lmk if there’s anything else and i’ll be happy to help!

just for the code-curious, oooooo bypasses the softcut tape input parameter and sets the level directly depending on the recording mode selected: oooooo/oooooo.lua at main · schollz/oooooo · GitHub


Thanks @dan_derks !

Skimmed your post too fast at first, then tried the softcut params, and voila! (tbh a little bummed I couldn’t introduce myself with a bugfix or feature add PR or something like that, but all in good time!)


Thanks for this update, can’t wait to try it!

I was working on a track and had 8/9 iterations saved as collections, but noticed that I accidentally nuked my first arp pattern in my latest collection (I use the pattern sequencer to switch between arps, and love this feature). I was able to copy/paste the pattern data from a previous collection (patterns/17.data in my case, so 1st pattern of Bank C) but noticed these shadow-pattern data sets, would you mind shedding some light on these please?
Also if I understand correctly, the data in collection/arps is the last played arp before saving?

1 Like

This looks like a job for Block Diagram Guy



ehhh they’re an uninformed tactic. before i knew better, i realized i had wired up the pattern save mechanism to overwrite the data saved in the collection. so, i created a complementary ‘shadow pattern’ mechanism where changes could be written to disk and if the collection is re-saved, they commit as stored blocks on the meta-sequencer. if the script is restarted without saving, then they’re wiped.

i could’ve avoided that whole rigamarole by simply committing changes to a local table, which wouldn’t be written to disk unless the collection is saved, but i didn’t really have the knowledge at the time to do this, and i didn’t want to break historical behavior once i’d learned more. the next major version of the script follows better design :slight_smile:


Hi @dan_derks

Just checking - Am I right in thinking CC should do stop/start from external midi as well as with link?
Link works but midi doesn’t. While it does seem to keep the tempo via external clock

hihi, hope all’s well :slight_smile: \

absolutely! is your midi device enabled to control transport under the script’s transport parameters? any report of your settings will definitely help suss things out! :revolving_hearts:

small bump, cuz i was testing the above and needed to clear a non-derailing but still annoying bug:

rev 220524: LTS 6.2


  • if there is no user script, don’t let the transport try to call it


Yes, midi is selected in the transport parameters.

Sorry, messed up my edit.

I am new to CC and have started with the music hackspace tutorials now. Having set the tempo to midi and locking the loop resolution it is definitely following along! which is grand. Haven’t got to playing yet, but hopefully that’ll come clear by the end of these videos

1 Like

heck yeah, thank you so much for spending time with the script! it means so much :hugs:

just to confirm, you can set the script to follow midi clock in the CLOCK parameters, but start/stop requires additional settings in the transport settings parameters all the way at the end of the parameters screen. since you can have up to 16 devices hosted by norns, it seemed best to offer a choice rather than assume any start/stop message should control cheat codes. under transport settings > receive MIDI transport?, just make sure your device is toggled to yes and start/stop messages from your device will control the script’s transport.

please let me know if there’s any additional trouble or q’s! :gem:



“Receive Midi transport?”, yes please
It’s alive! the X’s are now numbers!

Step one on a long journey, as this one’s mighty deep! Thanks for the help


I have been going through the videos, and they’re very good. I definitely reach mental saturation quickly as this script is so deep! Plus incredible fun! Threshold 1-shot recording is just chef’s kiss

2 questions that have come up from getting to the end of the live recording part of the second tutorial.

1 - whilst messing around with the 16 pads, changing various parameters, the effect all is very useful. But is there a way of “resetting all” as well? So I don’t have to go through each one to find whether they are reversed or pitched differently.
Edit - I found this - "to reset speed and direction to 1x on all pads in a given bank: in performance mode (not pad focus mode), hold ALT and press the unlit key next to zilchmo 3 on the bank you’d like to reset. " - This means alt-1x yes? - Will have to test when I get back in front of it

2 - With the live input - how does this relate to the live 1,2,3 on each of the banks? I record something into the live buffer and it goes into live 1 on each bank, does this mean there are live buffers 2 and 3 somewhere?
Edit - In the grid section of the docs - The bottom row has rec 1,2,3. So does this mean I can record straight into these banks and they just take up different sections of the global live buffer?
Are the live clips copies of the live buffer, or directly linked? e.g I record into the live buffer and it appears in L1, then change it to L2 record something else, does that over write what is in the live buffer and also L1 or would that (L1) remain an untouched copy, so to speak? (haha my brain is exploding a little)

Sorry if I’ve missed these answers in the instructions somewhere

1 Like

woop, sorry @Gordiegoose, just got to your edit!

yes! holding ALT and pressing the key next to the third row of the right angle glyph will reset all the rates to 1x. if there are other settings that you want to reset, just lmk and i can add a few triggers in the parameters menu :slight_smile:

live input is recorded using a single record head – that record head has three segments of the buffer that it can record to, which are L1 / L2 / L3 in the docs. any pad in any bank can be selectively assigned to reference either of these three live segments, or any of the three prerecorded clip slots.

since there’s only one record head, if you use it to record into segment L2, then it won’t also record anywhere else – so anything you had in L1 (or L3) remains untouched.

the structure of cheat codes is definitely conceptually wonky at first. it might help to mention that its entirely powered by softcut, which has 6 read/write voices that are used by the script like this:

  • voice 1: the live audio recorder (in write mode only)
    • this travels around three segments of the live audio buffer: L1 / L2 / L3
  • voice 2: bank A (in read mode only)
  • voice 3: bank B (in read mode only)
  • voice 4: bank C (in read mode only)
  • voice 5: L delay (in read and write mode)
  • voice 6: R delay (in read and write mode)

hope this helps!

also, just got a big boost to wrap up cheat codes yellow from @johnkeek yesterday. it’s funny to forget that it was pretty much done before my accident – the time off from it really warped my perspective. wild!


All makes sense! Thanks for the help, I can’t wait to get back to it tomorrow.

All good with the live input now, makes sense having found the separate record buttons on the grid and being able to scroll from L1-L3 in the menu as well. Thanks for the explanation about the voices, really does help understanding the framework.


Working on Arps now. I have it set to "last pressed”, yet it seems to be additive. It isn’t following what you show in the vid i.e. if the arp is playing and I latch it, pressing any other pads/multiples just adds them on to the arp sequence rather than replacing the arp notes. The additive setting is (obviously) the same.

Finding that you can also apply different arp rates per bloody pad as well…. Amazing stuff. I had seen the delay page before but that sequencer…

Can’t wait to see how yellow will streamline all of this, there’s so many layers and such versatility. Somehow improving on this will be quite the sight!

1 Like

I haven’t been this excited to get my hands on yellow since: