I’ll take a look. Are you running the latest version of the code on github? And have you tried removing the files under data/awake-rings??

I got an identical error running Awake yesterday. But the script still booted and ran just fine. Let me know what you find out!

Getting the same pan errors as @coreyr @mattlowery with the rings version of awake today. I’ve tried loading the latest from GitHub, and cleaning out the awake-rings files in data as well.

OG awake has some new parameters that deal with panning. Awake-rings appears to be a fork, but with exactly the same name and path, but which is not in sync with its parent? Recipe for problems? Rename?


It started out as that, since it was clearly the easiest way to keep in sync with the changes to Awake. It’s now in a repo, with a different name, so I’m not sure what you mean by name and path?

I’ve been manually merging in the changes made to Awake, but perhaps I’ve missed something? (Works on my Norns!).

yeah sorry that was totally my misunderstanding, was searhcing on phone and found reference to old fork, not new repo. sorry

now that i’m not looking on a dumb phone, i instead interpret the error message above to mean: whatever verison of KarplusRings engine is being loaded, doesn’t include pan commands that correspond to the ones added to PolyPerc engine. (so yet again this is an annoying side effect of the no-duplicate-classes restriction; we really need to finish integrating the workaround for that, allowing compatible copies of script and engine to be bundled for deployment. continued apologies.)

but anyways, for now @coreyr @sunbeamer @mattlowery make sure you have also updated the we repo since i’m guessing that’s where you got KarplusRings. looks like it should work on the latest.


Huh, thanks @zebra, that does the trick. My WE was only a few days old I thought but I must be wrong.

1 Like

same problem here with awake-rings. where is the we repo? Update via maiden doesn’t solve the issue.

You’ll find it under the new Norns package manager, and also here:


done thank you…

hi did you ever get this sorted? Ive run into the same issue and I too have never coded. Thanks!

I deleted we via maiden then reinstalled, that did the trick.


since the most recent Norns update it seems im getting an error init upon loading the kr rings script. It does actually load but I do not have any control over the script. Does this need to be updated or?

Yes, you should update both awake-rings, and we from the Maiden package manager.

And if you’re still having issues after doing that, try a sleep and restart, and then DM me the error that appears in Maiden.

I had to redownload the we folder to get the most recent version of the karplus engine. That should do it.

Cross-posting for anyone who may be interested in using Passersby with Awake


I just recently remembered that I can use an ornament and crime running hemispheres as a usb midi to cv interface (and vice versa). I have really been enjoying using Awake to sequence a single modular voice. Last night I realized that I was only using 2 of the 4 cv outs to do this, and was wondering if there is a way to get 2 voice polyphony by trading midi channels per step. I’m happy to give it a go but don’t know where to start.

I guess my first question is how crow & JF ii handle this? Is it on the norns side or the crow side of things? I don’t have either, so I’m not clear on it (a crow is in my future). Is it a sort of round Robin, each new note is sent to a new voice? Does it cascade as decay settings get longer? Does that mean it happens on the JF side?

A run through the studies is probably a good place for me to start after some coffee…

I don’t know much about the technical implementation, but yes it appears to be a round robin handled on the crow/JF side. All the norns script does is send crow a command to play a JF note.

For trading midi channels per step you would do this in the norns script though. You’ll need to add an additional midi channel parameter (since currently awake expects only 1 channel), and then keep track of the “active” midi channel in a global variable. Then any time you send a midi note on you could send it to the “active” channel and flip it between channel 1 and 2, for example.

1 Like

What @crim described above is probably all you’ll need for Awake, but if you want a “least recently used” voice stealing algorithm, Norns comes with a really useful little library called voice:

… I’m having a strangely hard time finding an example of it in use, but the principle is something like this:

local Voice = require 'voice'

local voices = -- 2 voices of polyphony
local midi_out = midi.connect()

local function start_note(note, vel)
  -- allocate a voice, "stealing" an existing one if necessary
  local voice_slot = voices:get()
  -- use the voice ID (1 or 2) as the MIDI channel
  local midi_channel =
  -- send MIDI note
  midi_out:note_on(note, vel, midi_channel)
  -- tell this slot to send the correct note off when the voice is released or stolen
  local release_callback = function()
    midi_out:note_off(note, 0, midi_channel)
  slot.on_steal = release_callback
  slot.on_release = release_callback

then you can use that start_note() function to send MIDI notes each step and they’ll alternate between channels 1 + 2, but if you call voices.slots[1]:release() between steps, a note off will be sent on MIDI channel 1, and the next step’s note will always go out on channel 1, while voice/channel 2 drones. Maybe not that interesting for steady 16th note sequences, but it’s really useful for grid or keyboard interfaces, and it’s a good way to make sure you’re sending note off messages.


had no idea this existed! thanks for pointing it out

1 Like