norns: clock

we’re working on a “global clock” which is intended to be a persistent component for norns scripts— something like a new version of beatclock. @artfwo’s clock will be at its core.

we’ll get tutorials together when it’s ready.


doing some testing with the test script.


on first launch, with internal clock main screen says bpm: 30 yet params say internal tempo: 120

This appears consistent with what i was seeing previously that I needed to multiply clock.get_tempo() by 4 to get the “correct” bpm


incoming MIDI clock is jittery as discussed before, but tracks ok


Seems to work like magic. Ableton will adjust it’s tempo to the norns clock as it joins the link. After that, norns will follow Ableton’s clock, or changes from norns are reflected in Ableton as expected. Fantastic.

Tempo seems to be 4x as fast as the other 2 methods. With the script set to 1/1 I get pulse sounds on the quarter note (in ableton).

Tempo change from link or MIDI is not reflected in the params menu item. Gonna raise a separate question on that.

1 Like

right, this is already fixed in master.

that’s right, when you sync to 1 - you are syncing to the next whole beat, which would be quarter note for an x/4 song.

i don’t know if a parameter for midi clock tempo can be of any use - it’s something you can’t change, midi signal comes from outside. for link tempo it’s pretty easy to add tempo tracking function (like screen refresh), that would update the parameter value without banging of course.

1 Like

Yes of course. My bad - I got confused. Was really only seeing the Link tempo needing to update in params.

Probably a stupid question, but will Ableton Link integration mean that Link synchronisation will “just work”, even without scripts being updated?

Also, will the default SuperCollider install with Norns be updated to the latest version, with Link support (probably academic, if Lua scripts can use Link themselves, but good to know).

no, that kind of compatibility will be too impractical to implement.

if your script uses metro or beatclock, on the metro level it has callbacks called at regular intervals specified in absolute time units (seconds), while link mainly works with tempo-dependent time units (beats and phase). it’s reasonable to adapt the scripts to use clock if you want link integration.

supercollider package on norns will be updated soon, and you’ll be able to create a link-aware engine in SuperCollider indeed. but on norns i’d recommend having your high-level sequencing logic in the lua/script space for many reasons: it’s easier to link musical processes to hardware inputs in scripts, scripts are easier to debug on device, etc.


thanks for getting back to me.

I thought this would be the case, but thanks for the confirmation.

Awesome @artfwo! Can’t wait to try this.

I think it will be possible for us to replumb the original lua beatclock to use the new core clock rather than metro, so that most scripts currently using beatclock (and not directly interacting with metro) will mostly work unaltered with artfwo’s global clock and therefore Link, but modifying scripts will be necessary to get the desired behavior in all cases. External midi clock and Link have different expectations, so this expands the number of design decisions that scripts will need to make about how they interact with external clocks.


it’s possible to simulate the midi beat with clock indeed for use in beatclock, but what will become with clock params (BeatClock:add_clock_params)?

lots of scripts also use them and they will not easily wrap around the core clock params or will they?

we can put together a migration tutorial once the global clock is completed.

i believe it should be a handful of somewhat simple changes to most scripts… and this would be a nice moment for people just getting into scripting to PR updates to their favorite scripts!


This is all sounds great. Just wondering how crow sync will be implemented into the global clock?

Just was looking at the GitHub and I’m a bit of a dunce, do the comments show that this might be getting some improvements?

I wanted to try and implement this system on a script or two to get everything running well together (ableton is running most of my clocking atm) and I would like to get the norns running in tandem without all these dongles.

crow sync is currently supported both ways thanks to @tehn. crow can receive sync events from norns (with its own divider) and vice versa.

i am not sure i get the question. clock has gotten a lot of improvements in the past weeks and i hope it will continue to improve, but i won’t expect any radical API changes from now on.

1 Like

My question was ill worded. I actually meant to ask about Ableton Link and if that had been improved as well. The question was more if that had been updated and if there was a bit more documentation on how to implement it in a script or during usage.

1 Like

ableton link support hasn’t been improved much since we merged it, but it’s been working pretty well, are you talking about some particular improvements?

future improvements may include:

  • re-mapping the beat to the transport start time, if syncing to start/stop.
  • api for seeking along the timeline with regards to other link peers (requestBeatAtTime et al)

but they wouldn’t block you from writing scripts that you’ll be able sync with other link apps and devices. if you’re comfortable with compiling norns from git, i’d recommend starting with that. otherwise, wait until the next update, as there has been some minor api changes since version 200328.

documentation is coming!


Ah. Okay, so, the option of using Ableton Link will be based upon script by script usage of the new global norns clock. So, if I’m not particularly adept at coding (lord have I tried!) then it is required that I wait for a future update of both the norns and my desired scripts.

1 Like

wait for the docs, we’re working on explaining all of this


Will do. Got a bit overly excited.

1 Like

hey y’all – ahead of tomorrow’s release exposing the global clock, i put together a bit of a “how I migrated code I hadn’t looked in months from beatclock to global clock, survived, and thrived!”: Norns: migrating scripts from `beatclock` to the new global clock (a how-to!)


it’s worth mentioning that since its first release the clock module has got many important fixes by @Dewb and @ngwese, documentation by @okyeron and @dan_derks, and of course thanks to @tehn who implemented the params menu integration and did the whole release management for this update! cheers to you all, guys! :tada: