You’ve made my compositional life much easier!

Took sort of a stab at this and made it possible to select on the ratchet page which triggers you want to fire. So the ratchet settings for each note are sort of 4 toggle buttons rather than a fader for number of repeats ansible.hex (245.2 KB - db687c6). So far one thing that’s nice about this is that it doesn’t wind up taking any extra grid real estate or state memory - I can pack the toggles and the repeat counts into a single byte per step. Currently the number of divisions to use for a single step is determined by the highest toggle you have set, so you can’t really have rests at the end of a step, but on the other hand you can subdivide each note differently as opposed to having a global subdivision setting for the track. Some nice syncopation can be achieved.

10 Likes

Wow, coming back to this thread has blown my mind, cant wait to try out the new directions.
The alt ratchet mode sounds super interesting too!
One feature I’ve been really wanting to see is having the octave page set in the middle so you can go up or down in octaves instead of just up. To me this feels more useful then tuning all sound sources to your lowest desired octave. It would also be great to have the octave rage extended to 3 up and 3 down. Anyone think they would find this useful and possibly implement it?

Part of the problem is that Ansible is (on a hardware level) set up to output CV from 0 to 10V, so doing this would involve the strong, kinda weird choice to make the default CV output 3V.

1 Like

ah right, well then is it possible to have ansible save its state so i could make the octave page always start up at 3v?

This is a neat idea, so since the hardware has unipolar CV outputs maybe you would be able to set the “base” output voltage to +2 octaves (volts) and then work with +/- 2 octaves from that center point rather than +3 octaves above the current base voltage.
I was also thinking about how to have rests at the end of a note step for the selectable ratchet feature, as well as some other posts earlier in the thread about having more probability options, and I had a possible UI idea for these kind of “range” settings.

So to select a loop for a Kria parameter you have a three-key gesture: loop mod key, loop start point, loop end point, and this selects a loop range horizontally. Similarly you could have a three-key gesture to select a range vertically, and the “vrange” (naming things is hard) could have a different meaning depending on the parameter page. So for instance

  • ratchet page: selecting a vrange selects number of subdivisions for the note, whereas individual keys are toggles for the individual gates within the ratcheted note. The start of this vrange would always be the first gate for the note (third row from the bottom).
  • note page: maybe range of notes within which to randomize? centered on the selected note
  • octave page: selectable octave range. This vrange would affect the whole track instead of being a range-per-note. It basically would just apply an N-volt offset to all outputs equivalent to the octave corresponding to the range midpoint (maybe need some way to round if you select a vrange with even length), and let you choose octaves relative to that offset rather than relative to 0V. I think this could accomplish the octave master shift per track feature, while also allowing you to have notes pitched a couple octaves lower than the rest of the sequence.

Currently doing a vertical gesture like this sets a loop to a length of 1, but you can also achieve the same thing with: hold loop mod, press loop start, release loop mod. However, you also need a way to set a vrange length of 1, which seems like it needs a similar gesture. So maybe the top row (except for on the trigger and duration pages, but I’m not sure yet what if any vranges make sense for those) would be reserved for this when the loop mod key is held – hold loop mod, hold vrange start, press top key to set a vrange length of 1.

This would be a pretty substantial UI addition that I am presenting without having really thought through its consequences, its feasibility to implement, its cognitive load, or other important considerations I have not thought through it enough to think of. I just had been puzzling for a few days over UI options for a couple of features and with the “octaves below the root” suggestion it felt like something clicked.

6 Likes

@csboling - just coming back to this thread and saw what you have done :slight_smile: thankyou so much for looking into some of these feature requests. I made some of these requests along time ago, and so happy they are being looked at! The per track tapehead direction changes, (and previous independent clocking/track), was so I could do more phasing and fugue machine style sequencing. The global octave shifting per sequence / track was also to help with that style and particularly for live performance instead of using an octave switch module.

2 Likes

Wow, thank you @csboling for doing this, its definitely a necessary update!!!

I have just downloaded and installed this latest version, the all the direction changes work, the TT clock also works.

Though all the Gate outputs are not outputting anything and on the Ratcheting page, I don’t see the usual lights to select the ratchets, I see a blank page with the second row having very faint random light movements.

Am I the only one experiencing this?

Thanks again!

Video for reference to the Ratcheting page.

Hm, yeah that’s not right. Curious if the command you used to flash the firmware is

dfu-programmer at32uc3b0256 flash firmware-name.hex --suppress-bootloader-mem

because (recent?) Ansible actually uses a at32uc3b0512
chip which has more memory, and I’ve had problems getting an incomplete firmware backup using the at32uc3b0256 device ID indicated in the docs (I should really make a PR for this). I generally have not seen this cause problems flashing firmware though, just making backups. Or maybe I goofed and uploaded a bad firmware? I’ll double check the file here in a minute. Really weird that the second row would be lit on the ratchet page, this seems almost like something got corrupted.

1 Like

And weird that the gates stopped outputting.

Yes I did use the at32uc3b0256 command, could this be the issue?

Can confirm this was broken, uploaded a new version in that post. I got fancy at the last minute and tried to pack the state info more densely to save memory – I’ve just reverted that for the time being.

2 Likes

Some thoughts in your thoughts.

The idea of a master octave shift on a track (i.e shifting all notes together while keeping their current octave in mind) would be a very useful feature for performance and easily placing a track within a composition. I feel like some simple gesture to accomplish this would negate the necessity of something more complicated like setting the mid-range of a tracks octave, having to remember what output has what voltage offset set with some other parameter, etc.

Also the idea of the “vrange” is interesting, especially as a way to choose ratchet subdivisions (!). But it’s worth noting that when currently using the loop modifier a horizontal range is selected per column rather than a specific key (except on the trigger page, since multiple tracks are present).

For example, if I want to loop between note 2 and note 5 on the note page, I hold the loop modifier, then select any button in the column of note 2, then select any button in the column of note 5, to set the range. If you were to add a “vrange” into the mix, how would that be implemented? Would the “vrange” only be active of choosing within a single column? Would you set horizontal and vertical range loop modifiers simultaneously? Would horizontal loop modifiers only be implemented if selected on the bottom row of a parameter?

1 Like

Right, this would be unchanged. I think the only change to the existing UI would be how it’s interpreted if you select start and end points in the same column – currently this sets a loop length of 1 but you could do that by just pressing a loop start key and then releasing the mod key, which currently works also.

Yes to vrange within a single column, I think if the loop start/end columns are different it should keep the current behavior. No to changing both at once, that seems like it has a lot of potential for being confusing.

I think maybe I should just prototype this for the ratchet select feature and see how it feels. Having a simpler octave shift also makes sense, maybe with the keys in the top row on the octave page – wondering if maybe that should change the active range of octaves so that if you transpose a track up you get the option to lower the octave selected for individual notes.

1 Like

Ok! Works now I think :slight_smile:

1 Like

Letting the “root” row float like this made it feel pretty cramped to have any kind of ceiling on the number of octaves to transpose, so you have a full 0-5V range available for both the track-level octave shift and the individual note selection.

Here’s a video of the ratchet selection too. I think being able to choose the total number of subdivisions per note should be doable and would be great but I’m still unsure about the UI. By comparison this is a relatively small change to the existing UI, though it does mean you have to press extra keys to get the behavior of the existing version.

Build: ansible.hex (313.3 KB - a773336 - 2019/05/22)
This build includes both features above.

In this build and builds I post from now on I’ve also included an implementation of this feature, details here. I’d love to get some beta testing of it, and that means carrying over any presets you’ve got saved and loading them up in the new firmware! Here is a Python program you can use to convert an ansible-backup.hex dump from an existing (1.6.1) firmware, or anyone who wants to try this is welcome to PM me with your .hex file and I’ll send you back a .json file you can load on a USB stick and import after flashing the new build. If you’re currently using an older firmware than 1.6.1, let me know what version and I’ll add support for it to the script. Documentation on all this is pretty lacking at the moment, the Preset save to USB disk thread is probably a better thread than this one for questions about this feature.

8 Likes

Really appreciate the work you have put into this. i’ve just watched the video on the octave shifting. Its clever how you made the row float. Its certainly welcome visually, but as you say it does look a little cramped if going into the upper / lower ranges. If the floating row was removed, as long as there is a visual indication of what octave you are in (in row 1), somewhere, then it is fine by me. To me, it makes sense to have the master octave switching buttons either laid out horizontally (row1) in the far right corner (so your hands are separated and you can see what you are doing) or vertically in column 16 (no floating row). Vertically would present overlapping problems though. Another option, is have the switching done with 3 buttons - up / 0 / down with mutiple taps on the up / down buttons to go more octaves and 0 to reset. Not as good as than having all the buttons available as in your example as you could get lost with only 3 buttons.

1 Like

I really like how you’ve implemented both of these UI changes so far. I never even thought about turning off the first step in a ratchet but I can see myself using that a ton, especially if more sub divisioms become a thing! Will give this new build a go tonight to see how it feels in use, and I’ll start saving presets from now on to help beta that feature :+1:

2 Likes

Hats off @csboling! People have been asking about Kria being able to swing, and this is an efficient little work around to have that swing feel people are looking for.

3 Likes

What I like about the floating row is that it’s very visually consistent – the highlighted keys on the octave page show you the absolute octave for every key, from 0 to 5 volts, no matter what. I think also being able to transpose down from the root is really handy when you start having some tracks octave-shifted from others, and I like that the floating row invites that interaction.

The main thing I didn’t like about it is that it takes up almost the whole page except for what’s left of the top row, which struck me as wasteful at first, but I’m coming around on it. I tried tuning my oscillators all the way down, cranking the octave select all the way up, and building a sequence using negative octave shifts only, and this is a lot of fun and different from how I’m habituated to working on melodies. I was worried about the CV outs not being able to go any higher when you’re at a +5 octave shift and go up a ways on the note page, but I’m still able to get the output to change at full note, alt note, and scale values, and cranked all the way it’s just barely left the range of my hearing. I also do a fair amount of sequencing where I’m not using Ansible’s CV outs directly but instead using KR.CV on Teletype to compute pitch CV for other sequences, and I’m excited about having the full voltage range available for this kind of application.

The +/- button pattern is a great idea for saving space. The center reset button could potentially use brightness to indicate the current octave? For octave shifting I do like the immediacy of having a dedicated button for each shift, so you can jump to an absolute octave as a performative gesture instead of having to scroll through intermediate octaves. It will also remember the setting for octaves that have gone off the screen, even though the values are clipped to 0-5, so you can “hide” some octave shifts and have the sequence be constrained to a single octave until you shift it up to “reveal” the octave changes that weren’t visible. I think having octave shift keys in a column that’s already in use would need some kind of modal interface, which complicates the implementation somewhat.

Using +/- buttons might be just the ticket for the ratcheting page. In the current release build when I first load a blank preset, the row above the navigation row has an animation for the current step, but if I turn on a trigger and then turn it back off the animation moves up a row, so it might not be intended to use the bottom row for anything. If not, maybe that row and the top row could be minus and plus keys per note, which are used to dial in the number of gates you want to subdivide that note into, and the keys in between would be gate toggles. This leaves room for up to 5 toggles, which could work out nicely for space savings because you can pack a 5 bit toggle vector + 3 bit subdivision count into a single byte. But at that point you’ve used up THAT whole page… It would also lose some of the immediacy of getting subdivided notes as soon as you turn on more gates, because you’d have to select both settings for each note.

Well! I sure wound up blathering on a while. I’m super excited to get some feedback on these features, lots of folks around here have been using Kria a whole lot longer than I have.

1 Like