[cheat codes 2] (rev 220517: LTS6.1)

I’m glad you didn’t lose anything! Thanks for flagging, I have edited my post to include a warning :slight_smile:

1 Like

Hi,

it seems to work the following way:

  1. Open the online editor and connect to FaderFox.
  2. Make sure the setup no. 1 is available resp. can be overwritten.
  3. Load file cc2.sysx (which will occupy setup no. 1) .
  4. Import only setup no. 1 when asked by the editor what to import.
  5. Send data (i. e. all setups) to FaderFox.
1 Like

Hi Dan, still enjoying this great new feature :sun_with_face: Does the fade feature also works when you randomise rates ? When I randomise rates I sometimes get a lot of clicks even when fade is time is turned to the max. Of course most often when I work with more pure waveforms like sines etc.

super glad to hear it!

it ought to – there’s nothing in the code which resets the fade time when randomizing rates. if you can provide a sample, happy to test on my side!

hi, I’m new to using cc2 and loving messing with it but I’m having a problem with the “timing” screen, I seem unable to record patterns. I’ve set the rec mode to “bars” and set my number of bars but in the docs it says to press K3 on the “rec mode” option to start recording and this isn’t working for me, nothing happens. This is the case both on a completely fresh cheat codes 2 and also if I already have some stuff in my session. Any idea why or what I’m doing wrong?

hi hi! hope all’s well :slight_smile:

this is just for MIDI-only setups. if you’re using a grid, this isn’t relevant information, apologies – just hit the top-most key in the right-angle glyph (this entire structure is known as a ‘zilchmo’ in cc-land). if you’re using the TouchOSC template, there’s a pat rec key in the template.
plz lemme know if there’s anything else you’re running into snags with!

ah, thanks! This isn’t 100% clear in the docs to me because most of the other info on the same page is relevant to both grid and gridless setups.

Has anyone used a Kenton Killamix mini usb with cheat codes? I don’t personally have one but it seems like the endless encoders may work in a similar way that the MFS or Faderfox EC4 do.

I can’t seem to find a definitive answer…what are the major feature differences between Cheat Codes and MLR? As anyone mastered both and prefer one to the other?

I just received my new Grid and i’m ready to learn some scripts, but don’t want to waste time learning stuff with a bunch of overlap. At this point I’m looking for something I can live record into, chop into separate chunks, then play/sequence/add FX on the fly with midi sync or Link. I think both Cheat Codes fit the bill, but i’m not sure which one to concentrate on.

Cheat codes has a lot more features, especially around synchronization in your case.

There is a lot more to learn and imo there are more than a few ways to perform with it. More device support too (op-z, midi fighter twister, midi controller, grid, arc). And of course the cheat code gestures themselves are special. One key difference for sample playback is that you can apply pitch/directional changes to the sliced pads themselves or the whole bank (by holding alt). Something handy that I like is that cheat codes 2 has waveform visualization.

In my opinion, MLR is faster to pick up and learn right away (maybe 1 or 2 focused evenings), so I don’t think you’d lose too much time if you learned both and started with that.

5 Likes

Thanks so much @Jonny that actually makes a lot of sense. I’m already a little bit familiar with MLR from 5+ years ago, but it didn’t really stick with me. I think the biggest challenge using the Grid with these complex scripts is getting the muscle memory down with no labels on the control surface. I just opened up the TouchOSC template for Cheat Codes and it made everything a whole lot clearer and way less abstract. It looks like a interactive cheatsheet for Cheat Codes…lol. I’m going to dive into Cheat Codes and skip MLR altogether.

2 Likes

As a relatively new user of Cheat Codes I highly recommend the Music Hackspace CC2 course. Not sure I would have been able to fully get into CC2 without it. I surely struggled with CC2, especially the sync aspects, but now I’m totally happy that I did dive in. IMO this script is worth Norns+Grid on its own.

6 Likes

I bought both courses and watched them both straight through. It cleared all my confusion and gave me a TON of ideas. I also like the @DuellingAnts videos as well once you’ve learned the basics.

4 Likes

Another quick question… Is anyone using the TouchOSC template for CC2? I’m only getting one-way communication (ipad to norns) and need to know if that’s a limitation of the script (shouldn’t be) or is something messed up. Not getting a signal back from Norns when I ping from TouchOSC either. Thanks,

1 Like

I see upthread that Mx. samples can feed cc2?! How does one set this up? Does one bank control Mx to be fed to and chopped by another? Dare I dream?

4 Likes

Would it be possible to have “ping pong” or forward + backwards playback of a pad/bank?

happy thursday everyone!

just to confirm, is PARAMS > OSC setup > TouchOSC echo? set to yes – that’s the only intended limitation on bi-directional communication. otherwise, i’m curious if you see any difference hosting a hotspot from norns and connecting your TouchOSC host-device to it (vs communicating over a WIFI network)?

i had some early success, but ultimately a little tricky to manage CPU when you have three banks hitting both softcut and mx.samples simultaneously. there’s some commented-out code throughout the script that should still work if you can troubleshoot maiden error messages – just search the entirety of the code > cheat_codes_2 folder for instances of mxcc and you’ll find breadcrumbs. you’ll also need to remove the PolyPerc invocation, which will lose the metronome.

that’s a feature which would be best implemented in softcut – cc2 could poll the position and try to queue up a reversal at the loop points, but it would be much more accurate and performant if handled natively. work to add ping pong to softcut has already been put in, but it ties to a larger effort which requires more attention, captured in this WIP branch here: GitHub - monome/softcut-lib at redo-position-logic.

you can get part of the way in the current release of cc2 by setting a rnd action for rate – if the min and max are the same value, the rnd generator will simply flip direction. @DuellingAnts has had some really nice experiments with this in the past :slight_smile:

4 Likes

EDIT- I finally it figured out. It was user error not my setup. I assumed TouchOSC would automatically update it’s display when you modified parameters on the Norns or Grid…it doesn’t, I was changing levels and start/end points on the Norns and expecting to see things move on TouchOSC. You have to press the sample pad on the ipad, then it shows the current parameters for that pad, not when you modify parameters using the Grid or Norns. Guess that’s fine if you’re using the iPad as the sole controller, but I wanted to use TouchOSC to display info as I work with the Grid.

Honestly after watching the Music Hackspace videos, CC2 doesn’t seem that hard to navigate.

2 Likes

Hi all,

I’m trying to configure CC2 as a live looper / remixer like a Boss RC505. I’m so close! I have all my latency sorted out so that my monitor plays in sync with a live buffer when I record a one-shot and have “A” playing a 4-bar loop at the same rate, but when I try to point “B” or “C” to the same buffer or I record an identical 4 bars to live buffer 2 or 3 it’s out of sync again. When I look at the “#” view, I can see that the play heads are out of sync, even though they’re pointing to the same live buffer because I “toggled looping on all pads” at slightly different times. Is there a way to sync the playback to MIDI as well so when I “toggle looping on all pads” they’re always on the beat?

2 Likes

hi @kabelsalat22 , hope you’re having a good end of the year :slight_smile:

there are two ways to have all the playheads fire at the same time:

quantize pad presses

under PARAMS > timing + patterns + arps > quantization, turn live-quantize pads to yes for each bank. this will sync any pad press in any bank to the next 1/16th note tick. this should help mitigate the ‘slightly different times’ trouble, since pressing pads in all three banks at once will queue the execution of each bank to the same timed iterator.

live-code execution

the underlying mechanisms of cheat codes can themselves be live-coded via maiden + the real-time line evaluation feature @infinitedigits added a while back. this allows a type of mini-scripting that facilitates deep customization which would normally require (often, blocking) UI decisions + implementation. this will require use of another device to load maiden, but it’s super rewarding – it’s how i approached my flash crash set a few months ago.

for example, let’s say we want to trigger pad 1 on each of the three banks at the same time, with the option to sync to a nearest beat value.

this code could be live-executed from a blank file in maiden after initializing cheat codes:

function trig_all_banks(pad,sync_val)
  local function cascade()
    for i = 1,3 do
      grid_actions.pad_down(i,pad)
      grid_actions.pad_up(i,pad)
    end
  end
  if sync_val then
    clock.run(function() clock.sync(sync_val) cascade() end)
  else
    cascade()
  end
  grid_dirty = true
end

and then deciding to (for example) trigger pad 5 in every bank on the nearest bar-start (in 4/4) would require executing in the maiden repl:

trig_all_banks(5,4)

where 5 is the pad and 4 is the sync value (@ 4 beats per bar in 4/4).

you could get fancier, if you want. for example, if you’d like to specify which pads should get triggered at the same time, we could go with:

function trig_these_pads(pads,sync_val)
  local function cascade()
    for i = 1,3 do
      if pads[i] ~= nil then
        grid_actions.pad_down(i,pads[i])
        grid_actions.pad_up(i,pads[i])
      end
    end
  end
  if sync_val then
    clock.run(function() clock.sync(sync_val) cascade() grid_dirty = true end)
  else
    cascade()
    grid_dirty = true
  end
end

and then if we wanted bank a’s pad 6 and bank c’s pad 9 to trigger at the next quarter-note beat, we’d execute this in the maiden repl:

trig_these_pads({6,nil,9},1)

the first argument is a table of values (demarcated by curly brackets), which contains the desired pad for (in order) bank a, bank b, and bank c – if we don’t want a bank to execute a pad, we can just use nil for that place. the second argument is our sync value, which is 1 (one beat, since we’re talking about a quarter-note in 4/4).

hope these suggestions help get you where you wanna be! lmk if you have any other q’s :slight_smile:

1 Like