Firmware v0.92

Hi all,

After a coding marathon week-end, here’s a preview of what’s going to be in the firmware v0.92. Given the amount of changes, it doesn’t deserve a minor number increment, so it’s likely to turn into a v1.00


  • Patches can be tweaked from the load/save page. In this case, the 4 knobs have the functions assigned to them in the performance page for this patch.
  • The Shruthi-1 can be configured to boot directly on the presets page (aka “presets mode”).
  • Non-blocking ADC scanning increases UI responsiveness.
  • The “mix” and “osc 1” pages have been modified. The sub-oscillator settings are now on the same page as the oscillator 1 settings.


  • Different options are available for using the 4 CV: 4 CV ins (assignable in mod matrix – default setting), 32-knobs programmer, or simple mapping to cutoff, param1/param2 for pedals and joystick.
  • External eeproms larger than 64kb are supported, up to 512kb. Note that when a 512kb eeprom is used, the last 64kb block is not used (this is due to the fact that 16-bit arithmetic is used to compute addresses, and that the address space includes the 16kb of the internal eeprom).


  • SysEx Patch request command (0x11 0x00). Upon reception of this command, the Shruthi dumps the currently edited patch. Might be useful for an editor!
  • Support for NRPN increment/decrement.
  • The SysEx backup protocol has been extended to support backing up / restoring more than 16kb of patch data.
  • A bank and program change message is sent whenever a preset is loaded.
  • Bank change messages are handled, to allow patches above 128 to be loaded.
  • Volume change messages (CC 7) are handled.


  • The shape of the envelope (approximation of an exponential) has been refined.
  • The “2 bits” modulation destination has been removed, since there are now better ways (extra TX pin, shift register out) to communicate digital data with a filter board.
  • A new modulation destination (replacing “2 bits”) allows the attack of both envelopes to be sped up. This settings is particularly useful when velocity is used as a modulation source.
  • The “digital silencing” of oscillators when envelopes have reached zero has been improved. The oscillators are now digitally silenced whenever the VCA destination in the modulation matrix has reached a value of zero.
  • The noise source in the mixer is now refreshed at 40kHz instead of 10kHz, giving it a brighter timbre.
  • The phase counters are now 24 bits instead of 16 bits. This allows more subtle detuning effects between the oscillators, especially in the lowest notes.
  • The audio engine has been rewritten from a “breadth first” to a “depth first” perspective, and as a result, is faster.
  • As a result of the audio engine rewrite, the vowel oscillator can now be used with the noise and sub generators.
  • To make more room for upcoming feature, the “waves” wavetable has been downsampled to 128 samples/waveform instead of 256.
  • New mixing mode (>>4, >>8) allows the oscillators signal to be bitcrushed (sample rate reduction with a S&H).


  • Code size optimization saved 460 bytes.
  • The modulation matrix processing code has been simplified.
  • A menu in the UI and code infrastructure is ready to provide filter-board specific menus and parameters in future firmware revisions.

With the current git release i do see some (smal) issues in the randomize function:

  • it does work also in the “Browse Patch”, but as soon as i try to save the patch, the old patch appears.
  • Random Patch generation works +saving when i’m in “save patch” mode.

Can’t this be made easier ?

can you also clarify one thing: what do you mean with joystick ? i have a X/Y asis joystick here (100k pots), to which extend i can use this with the shruthi ?

Following this with great interest.
About the scrolling through a large amount of patches; the SammichSID has a clever function which lets you scroll with bigger increments depending on how fast you turn the knob.
For example slow: /- 1, medium:/- 16, fast: +/- 32 or something like that. Don’t know if that would be possible with this firmware, but just saying. :slight_smile:

Some more testing… and I’ll post the .hex here!

awesome very excited about this!

Unreal. Fantastic work, Olivier!

I am eager to try this out too!

<<Different options are available for using the 4 CV: 4 CV ins (assignable in mod matrix — default setting), 32-knobs programmer, or simple mapping to cutoff, param1/param2 for pedals and joystick. >>

is there a way to configure this for the easily available center auto adjusted playstation joystick?
(so that center position [=~5kohms] would mean zero modulation amount of both cvs)

The feature implemented is such that the joystick takes over osc 1 and 2 parameters.

oh, cooool!
so with the centered guy it should be somewhere in the middle by default! awesome.

so one has to decide for either 32 pot programmer or joystick, not both?
never enough, i know :smiley:

wow … thanks for all your hard work pichenettes


oh my oh my! this is great! thanks for the hard work!

Tested the patch memory thing on a 512kb eeprom, had to make a few changes to make it work. Added the following thing: if you hold the load/save button while you rotate the encoder, it jumps by -10/+10, so it’s easier to navigate through the heap of patches! And if you wonder: I tried first to do this when the encoder is rotated while being pressed, and I found it very awkward…

Great thing 512kb eeprom are recognized…I was missing some space to save my own patches without deleting default pichenettes patches…

So how does it work… can I just swap the esisting chips with new ones? Do I have to format them like with the SammichSID?

Here’s the recommended way:

  1. Backup your patches through a SysEx dump
  2. Swap the chip. At this stage, if you boot the Shruthi, all patches on the new eeprom will be empty. No need to format, the Shruthi recognizes that the eeprom is filled with junk and just displays ? as the first letter of the patch name.
  3. Playback a long .syx file I’ll generate when I’ll have more patches. This will fill 80-100 with new patches and fill everything else with “init”.
  4. Playback your backup to overwrite the original patches with your own.

NEw features sound amazing! nice one for ll your hard work!

Where can i upload v0.92 ?

For now you have to download and build it :slight_smile: Since it has not been tested a lot, I’d prefer that only the people with the skills to build/upload code have access to it.