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

I agree, it’s very handy and visual and would be perfect for live use. It’s definitely worth keeping in. I was just thinking out loud and throwing out a few different ideas. I look on all the options as positive, as before that, there wasn’t anything for whole track octave shifting :slight_smile:
With the +/- option, I also prefer a dedicated button, for immediacy in octave shifting. I just suggested it, in case you were limited with space. As you say its maybe worth looking at for the ratcheting side, which I didn’t consider.

2 Likes

Here is another build which changes the ratchet page to let you select the number of subdivisions for each step using the top row and second-from-the-bottom row as +/- keys, and lets you go up to 5 repeats per step. Currently turning on a gate will set the number of subdivisions but turning it off will not, since one of the main reasons you might want to have control over this is to introduce rests at the end of the step. You can also long-press the “decrease subdivisions” key to clear out all the subdivisions past the highest gate you have toggled on. This still feels a little weird, would love to hear if it’s confusing or what other approaches might work.

I also implemented the phase sync on time div changes feature (PR), which is off by default. If you go to the config page there is an additional toggle on the left side of the bottom row, below the note sync square. When enabled a time division change will only become active once a parameter reaches the end of its loop (for triangle mode this is either end, for drunk and random modes it does not apply and time div changes are immediate). I figure there might be a use at some point for additional “loop quantized” actions which could be enabled with additional toggles. I tried briefly to implement a mode where a change to the selected loop wouldn’t take effect until the currently programmed loop ends, but this turned out to seem pretty tricky to get right.

Lastly just some visual changes, trying to make sure brightness levels are consistent and the loop highlight behaves the same on every page – I believe previously only trigger and note pages would highlight the loop when you hold the loop mod key. The glide page is still brighter than the others because the glide faders need to have more brightness headroom (footroom?) to fade properly if you have them maxed out.

ansible.hex (316.6 KB - 6cf62d4)
ansible.hex (316.5 KB - 9f4b8d7) - bugfix: preset mode was inaccessible after USB disk disconnect until power cycling

6 Likes

yaay!!

thankyouthankyouthankyou

2 Likes

Just hoping to clarify something…

I have an Ansible but no TT. Will there be some kind of official announcement if and when the “official” Ansible firmware is revised?

It looks like much of this thread has to do with TT related issues, so I’m only kind of skimming it…

Thanks…

I’d recommend reading a bit deeper on what @csboling has been adding. Only a small portion deals with Teletype and it’s mostly a preset saving behavior. The rest has been adding upon Kria’s functionality in very exciting ways! No idea on an official merge as it seems the specifics are still being “beta tested” in a way.

I haven’t had a chance to try out the newest build but I’m looking forward to it!

2 Likes

all of the recent changes (thank you @csboling) have been accepted into the master branch of the repository, so they are now “official”

one thing we need help with is keeping the documentation up to date. so far changes have been made to the main web docs but we will quickly reach a point where some diagrams should be revised, and perhaps some micro-tutorial vids would be very helpful for others— again reiterating how non-coders can help push an open-source project forward and be a part of the movement

14 Likes

Thanks Brian.

In case it’s useful to see the process a non coding newb might take, I followed the link to the github, where I found the link to the monome.org/docs.

Once there I scrolled down to Modular and then to Ansible underneath. Opening the Ansible link, I see firmware updates, and the firmware version is listed as 1.6.1 but there is no date listed for that version, so I don’t know what is on my Ansible now or if I need to update to get current.

I’m sure I’m missing something along the way, and suspect that there is probably something on the github that I should be looking at!

Needless to say, I’m going to be grateful for any pointers on how to proceed…

Ed

1 Like

1.6.1 is the current released version and is what’s currently shipping on newly sold Ansibles. A release date would be good to include in the docs, I’ll add that in my next docs PR. The release history can be found on the github page here but that is not too straightforward to find starting from the docs page. Future versions which have the preset save to USB disk feature will include the firmware version at the top of the preset file, so from then on you should be able to answer “what firmware version am I running?” by saving your presets to disk and opening the text file on a computer.

If you’d like to try out the new features I’d be thrilled to have you beta test! That procedure goes something like this (which I will also write up for the docs page):

  • Back up your presets. If you have existing presets saved on Ansible that you don’t want to lose when you update firmwares, do the following. If you don’t mind Ansible’s saved presets being overwritten, you don’t need to do this part, but you will still need to get into bootloader mode to update the firmware. WARNING: you may want to take photos of your scales before updating. In one case someone’s scale data has failed to load when recovering from a backup. I’m not sure the cause of this issue yet but am looking into it (2019/10/13)
    1. get a dfu-programmer binary appropriate for your platform.
      • linux: install dfu-programmer from your distro’s package manager, so like sudo apt-get install dfu-programmer
      • mac: brew install dfu-programmer
      • windows: get dfu-programmer-win-0.7.2.zip from here, use it like this
    2. unplug whatever’s in ansible’s USB port
    3. turn off ansible
    4. plug in the USB A-A cable (that came with ansible) to your ansible and your PC
    5. hold down the preset/mode button while powering on ansible. ansible is now in bootloader mode. my Windows machine plays a chime when this happens to notify me that a USB device was found.
    6. run the following in a terminal:
      dfu-programmer at32uc3b0512 read > ansible-backup.hex
      dfu-programmer at32uc3b0512 start
      
    7. Disconnect the USB cable from Ansible, then power your case off. If the cable is still connected to your computer when your case powers off, sometimes Ansible won’t have powered off and it can be stuck in a weird state. If this happens you may need to get back into bootloader mode and run the start command again.
    8. PM me that ansible-backup.hex file. I will send you back an ansible-preset.json file. put that on a USB disk you want to use. I do these conversions with the Python extract program I wrote, if you prefer to do it yourself.
    9. once you’ve got that ansible-preset.json file in hand, time to update your firmware!
  • Update your firmware.
    1. get back into bootloader mode via the procedure above.
    2. this time, download the new firmware file from this post. then you’re gonna run:
      dfu-programmer at32uc3b0512 erase
      dfu-programmer at32uc3b0512 flash ansible.hex --suppress-bootloader-mem
      dfu-programmer at32uc3b0512 start
      
    3. Disconnect the USB cable from Ansible and power cycle your case.
  • Load up your presets off that USB disk! Note that some people have had problems with some USB drives, I’m still looking into this – if this procedure hits a snag you might want to try with another disk or two. Insert the USB disk with ansible-preset.json (must have this filename and be at the top-level of the drive) into ansible. press KEY 1 (on the left). the LED next to the USB port turns orange to indicate that preset loading is armed. press KEY 1 again and the LED starts blinking. Once the LED stops blinking (roughly 10 seconds), your presets should be loaded! If there was an error when loading a preset from disk, it will try to recover the module’s existing presets by loading them off an ansible-backup.bin file it creates on the disk. If you have any errors loading or saving presets please let me know and provide any of these files you can so I can do some surgery.
  • In the future you won’t need to do the "read > ansible-backup.hex and PM it to @csboling" part, because you’ll be able to save presets directly to the USB disk with a similar procedure: insert USB disk, press KEY 2 (white LED comes on), press KEY 2 again (white LED starts blinking - you can remember, say, “key on the right + white light means write” for writing to disk), wait for the blinking to stop. If for some reason there was an error, both LEDs will come on and stay on until you unplug the USB stick.

I realize that’s a little involved! Don’t hesitate to PM me or post on the Preset save to USB disk thread with questions. If you know you have any firmware version other than 1.6.1, it would be great to know what version, otherwise it’s probably possible to figure it out with a bit of guesswork.

9 Likes

Thanks! I can try to get to this over the weekend.

This is already beyond my skills and knowledge so I look forward to learning more!

1 Like

Hej,

I just installed this new firmware and had some fun with it. Alternate notes and the ratchet implementation are a bit complex to understand at first but then quite interesting.

My thoughts/ideas for a first feedback are:

  1. As it is now the CV changes at the first of the possible ratchet sub steps, even when it is not selected/skipped. It would be great (but mirght be complicated) if the CV update would be delayed until there is actually a trigger. But, it still should be the CV that is associated to the active main step. If the note sequence has already moved on when the first ratchet sub step occurs, this should not be taken into account for the CV output till the next full step. I hope that was somehow clear? :thinking:

  2. I find the glide feature a bit hard to dial in for long term practical use and wondered if it might fit better if the the glide time is not fixed in steps up to 120 ms but, as the ratchet, stepped in relation to either the tempo or the note distance. As it is now it tends to just not really fit.

Apart from that and despite my usual skepticism towards too many new features and modes, I have to say that I really like this. :grinning::+1:

1 Like

Thank you for all your work with this!

1 Like

I can’t seem to find the additional toggle, is the page I’m supposed to be the 15th button on the 1st row?

Is it supposed to be the 1.6.1 version or will a new release be coming soon? Because I’ve just tried the 1.6.1 version and it doesn’t include the changes @csboling recently made.

1.6.1 is from last year, so I expect a new release is due.

Last year I worked on a feature sort of related to this. It was a per-track toggle that would only advance any of the parameters when a trigger fired: (Kria) Feature(?) trigger-step params

Wouldn’t that be the same as the implemented synchronize / standard sequencer function?

What I meant was, that the CV parameter is happily moving on but only gets read when a trigger occurs.

EDIT: Wait…no it’s not the same…sort of…:thinking:

The config page I’m talking about is the one from holding down key 2 on the Ansible panel, the one where note sync/loop sync are configured. On that page it should be a single toggle toward the left side of the bottom row.

I think probably it makes sense to group as many features together as possible before cutting a new release. In particular the preset saving feature is important for making updates make sense for people who’ve been using an older firmware version, but this is a big and error-prone addition that needs a lot of testing to be confident in its correctness before it goes in the official firmware. I’ve also worked on Ansible support for some new Teletype remote ops that would be nice to include, and would like to see if I can chip away at some of the known bugs in addition to adding and polishing features. So I think it might be a little while before an official update makes sense. However, the preset feature is implemented in such a way that you should be able to keep updating to new betas as often as you’d like without losing presets if you want to stay on the bleeding edge.

This makes sense. Delaying the CV change I think is pretty straightforward (basically set the DAC value when the trigger output is set high, rather than immediately when reaching an active trigger step) but keeping the previous CV value if it has already changed when the trigger happens seems trickier. I won’t have time to prototype this for the next several days but I can give it a whirl. Not sure if this is always the desired behavior or if it should be configurable, in which case it needs some UI.

This seems very useful, and may not be too hard to implement. In addition to off-panel configuration by Teletype, the USB save feature should also give us the ability to do some more persistent configuration by tweaking the JSON file, so that’s also an option for introducing some settings without cluttering the grid UI, though these would be a bit more of a pain to tweak. In particular I’ve been thinking that you could use this to load up a custom scale table if you want to use something other than equal temperament. Glide customization could also be done this way. Going this route would benefit a lot from some kind of PC program that would let you load up a preset file and graphically tweak it, rather than having to sift through >300KB of unindented JSON to find the setting you want.

This is awesome, hadn’t seen this thread. I would use it all the time. From the video (without looking at the code yet) am I understanding right that each trigger in a ratchet will clock the track? In combination with the ability to toggle gates on and off when ratcheting this seems super powerful. We would need to figure out where to put the UI. There is one extra column available in the section of the scale page that’s now used for TT clock enables + step direction settings, which seems like definitely the place that makes sense, but it seems like it might get kind of confusing with several different settings clustered in that corner.

Big thanks to everyone for all the testing and discussion so far!

4 Likes