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

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