Frames: Insert keyframes at certain Frame voltages


Is it possible to insert Frames keyframes at certain specific/known volages at the Frame input, or can the keyframe voltages only be specified approximately/“blindly” using the big knob?

My use case is this. I would like to sequence keyframes using a Keystep Pro. So when I press the C3 key, for instance, I may want to trigger keyframe 1. C#3 could then trigger keyframe 2, and so on.

Whether it’s possible to insert keyframes this way or not, I would appreciate any hints on how these voltages could be hard-coded in the Frames firmware source code. That way I can have these keyframes present when the module boots up.


This is not possible. To start with, the FRAME input is not calibrated (how an input voltage is mapped to a position of the big knob depends on several components with a 1% error and would thus vary from module to module).

Oh, good to know!

Would the mapping also need to change over time?

That is, if I create a mapping for my specific module, would it be stable?



How many keyframes are supported?

The manual says 20, but the source code (kMaxNumKeyframe) seems to imply 64 (and I’ve read this in some other places as well).

How silly would it be to add something like this to Keyframer::Init()?

for (int16_t i = 0; i < kMaxNumKeyframe; ++i) {
  Keyframe keyframe;
  keyframe[i].timestamp = sizeof(uint16_t) / kMaxNumKeyframe * i;
  keyframe[i].id = id_counter_++;
  fill(&keyframe.values[0], &keyframe.values[kNumChannels], 0);

The intention is to add 64 keyframes evenly over time.

Edit: I realize that this wouldn’t map linearly to Frame input voltages due to the Frame input not being calibrated. Perhaps it could be a start, though?

The code can handle up to 64, but because the big knob will “snap” to the a keyframe once you get close enough to it (and thus prevent the creation of a new one), less than 64 will can be addressed, practically. I don’t recall the exact number.

For your code to work you have to copy keyframe to the array holding them all.

Then, at a higher level, the module wouldn’t be usable because you wouldn’t be able to easily reach and edit all these with the big knob. Maybe try a smaller number like 16 or 20?

Maybe you need a Malekko voltage block, or any other CV-addressable sequencer?

Thanks! Yeah, taking a second look at the code it didn’t make a whole lot of sense… I actually had the _keyframes array in there at some point, but it got lost apparently! :sweat_smile:

Perhaps I do need a CV-addressable sequencer, but I was just imagining that Frames could perhaps become a CV-addressable sequencer if it worked like so:

  • Some button combination enters a CV recording mode
  • While in the CV recording mode, unique CV values received on the FRAME input are stored
  • Some button combination exits the CV recording mode
  • When exiting the CV recording mode, the stored CV values are distributed as keyframes
  • From now on, when CV values are received on the FRAME input, the appropriate keyframe is triggered
  • Additionally, CV values received on the FRAME input also allows for value editing of keyframe in question (so that steps can be edited without having to use the big knob)

With the above behavior, I’m thinking that I could enter the CV recording mode, play a few keys on my Keystep (sending pitch CV to Frames), exit the CV recording mode, and then use the same pitch CVs to jump between those frames.

Does that sound theoretically possible?

1 Like

The hardware would allow that, now you just have to write the code! :grinning:

1 Like