norns+cvpal sending out clock pulses

I’m hoping to sync Norns with my modular using CVpal. Is there a way to send clock to the gate outputs? Cvpal can send triggers when it is receiving inputs from channel 12, 13 & 14. Is there a way to make scripts send clock signals via this route?

You have to clock your modular from norns by making the script use channel 12-14 in the settings. Some scripts are easier than others for this. Groovecats uses all the channels at once, so the cvpal outputs become a lot of fun :slight_smile:

I was just trying to do the same thing. But don’t most scripts rely on norns’ built-in clock system now? Not sure how one would change the channel for those.

@cliffemu Thanks! I’ll give the cats a go.

Would it be an option to write a small sequencer snippet which would read the Norns clock and sends out Midi:note_on messages based on BPM, to the spesified channel? This snippet could then be added to the desired script and run discreetly in the backround. I guess the the other CVpal outputs could be used as synced LFOs or s&h’s. I’ll have a look at how the clock output in groovecats is made.

1 Like

this seems like it could be an idea.

other ideas:

  • add an option to the system clock to enable outputting regular notes to a selectable channel between 12-14, which would then output a clock signal on the CVpal. The midi notes could be a division of the clock, which would give you two clock signals.
  • tweak the CVpal firmware to just have one pitch+gate mode (no matter the MIDI channel), and always output clock/reset on jacks 3 and 4

btw. I’ve moved this discussion to it’s own thread.

3 Likes

Tried to copy stuff from groovecats but ended up with supercollider fails. Then I discovered the Tmi library (also requires Kolor) which is a discreet sequencer that can produce midi CC too (would work well for the lfo idea). Got it working with goldeneye but got stuck in tweaking the channel Tmi sends midi to. Sort of stuck but optimistic.

this seems like a good candidate for a new feature in the pending update (it’s already on the master branch): mods

here’s an example which includes documentation

(note, you need to get the newest main branch of norns for this to work, so unless you’re already familiar with this process i’d perhaps wait to look into this)

basically you could make a very small “mod” which outputs a non-standard midi clock, which you could enable/disable and this would apply to every script

3 Likes

Looking forwards to the mods addition and yeah, this would be a good case for such. I hope to wrap my head around a non-standard midi clock utility for CVpal in time of the mod release. Thanks!

Question: what is a non-standard clock?
The way I was imagining this was mostly to just output some notes on a specified channel to force the CVpal into one of the clock modes. Because since the thing doesn’t have a mode switch, you change the mode by using certain channels instead of others. 12-14 being the ones that also output clock.

I reckon the “non-standard clock” which is referred here is just a way of describing the possible functionality of the mod. I imagine it working as you described.

Got a few proof-of-concepts running using Tmi. The first relies on midi channel 1 and provides a ramping note progression from out1, a stepped triangle shape from out2 (note velocity 127-1-127) and a pair of gate outs which be used for clocking (with modules that expect a riding edge). Everything stays in sync when changing tempo of the host script (only tested with goldeneye & cyrene for now) and using a slew limiter the lfo-like outputs feel like a very nice addition.

As mentioned Tmi requires Kolor to run and the CVpal unit needs to be attached to Norns for Tmi to launch. To produce behaviour described above I used this file (placed in code/tmi/songs/ folder). When the snippet below is added close to the top of the script I wanted to sync my modular with, it starts when the script is launched. There is a lot of kinks (Tmi does not stop when a script is terminated etc.) but this approach does not require any edits to Tmi.

No Tmi edits approach (for two stepped CV ramps and a pair of gates)

This text need to be added to the “host” script.

if util.file_exists(_path.code.."tmi") then 
  tmi=include("tmi/lib/tmi")
  m=tmi:new()
end
m:load("CVpal","/home/we/dust/code/tmi/songs/note-n-vel-ramp.tmi",1)
m:toggle_play()

A more ambitious solution is to edit the Tmi script. CVpal has a convenient Channel 6: Controller conversion -mode. Which can produce two CV outputs (CC 1&2, between 0-127) and two “binary CC” values (CC 3&4, 0 for nothing, 127 for on). The latter two channels work great for separately running beat adjustable gates. I wrote four Tmi files which can be added to the tmi/songs/ folder, to be played when a desired script is launched. This approach requires tweaking of the Tmi script and the “host” script and produces a fast CV saw from out1, a slow CV triangle from out2, a fast clock from gate1 and a divided clock from gate2. Everything seems to run in sync with the host scripts (but some scrips require that the CVpal is ommitted from the midi out devices of the script to prevent conflicts).

Edit Tmi and "host" script for four separately adjustable CV outs from CVpal)

Designate a midi channel for CC (6) by editing line 268 of Tmi (at code/tmi/lib/tmi.lua)
self.instrument[name].midi:cc(cc.num,val,6)

These four files need to be added to code/tmi/songs folder
canary-cc1-saw-out1.tmi (1.9 KB)
canary-cc2-tri-out2.tmi (1.3 KB)
canary-cc3-fast-gate1.tmi (159 Bytes)
canary-cc4-slow-gate2.tmi (19 Bytes)

This text need to be added to the “host” script.

if util.file_exists(_path.code.."tmi") then 
  tmi=include("tmi/lib/tmi")
  m=tmi:new()
end
m:load("CVpal","/home/we/dust/code/tmi/songs/canary-cc1-saw-out1.tmi",1)
m:load("CVpal","/home/we/dust/code/tmi/songs/canary-cc2-tri-out2.tmi",2)
m:load("CVpal","/home/we/dust/code/tmi/songs/canary-cc3-fast-gate1.tmi",3)
m:load("CVpal","/home/we/dust/code/tmi/songs/canary-cc4-slow-gate2.tmi",4)
m:toggle_play()

Tmi feel like a heavy solution for essentially producing four strings of midi CC to CVpal but this is what I have as a solution for now. I’ve watched norns walkthrough: hacking a script to add MIDI output for learning general terminology and eading scripts. And browsing clocks. scripting reference and tutorial to build up the skills to make a mod script for CVpal.