V0.5.x Release Candidate: Execution Scheduler Redesigned

:volcano::volcano::volcano: Welcome to the fiery realm of v0.5.x (codename: Myrrh) :volcano::volcano::volcano:

Originally, v0.5 was meant to be a bigger release focusing mainly on the sharing of work among users, but then along the way I had a breakthrough with regards to underruns and CPU load. Specifically, I was able to redesign the execution scheduler to finally get the performance one would expect from an RTOS (real-time os). Or more simply in @Joe’s words:

So CPU usage is roughly the same. You can just push 0.5 further.

This redesign also brings back the low-latency firmware that was previously having problems with artifacts on IN1-4.

Here is the thing though. Redesigning the execution scheduler was a very low level and risky set of changes, hence I could not add it as a maintenance update to the stable v0.4 firmware, but on the other hand I didn’t want to wait until I had implemented the sharing features originally planned for this release. So I decided to have a short and sweet stability testing period and release for this change only.

v0.5.00 CHANGES

  • FIXED: 48kHz Low-latency (frame size = 32) firmware > Clicks when recording from IN1-4.
  • ENHANCED: 48kHz Low-latency (frame size = 32) firmware > No underruns up to approximately 94% CPU load (previously it was up to 70%).
  • ENHANCED: 48kHz Normal-latency (frame size = 128) firmware > No underruns up to approximately 94% CPU load (previously it was up to 84%).
  • ENHANCED: 96kHz Normal-latency (frame size = 128) firmware > No underruns up to approximately 92% CPU load (previously it was up to 64%).
  • ENHANCED: If there is no ER-301/v0.5 folder on your front SD card then the ER-301/v0.4 folder will be used to populate the new ER-301/v0.5 folder. Previously, you had to do this copy manually when the firmware version had a change in the minor version number (e.g. v0.3 to v0.4 and so on).

v0.5.01 CHANGES

  • FIXED: Clicks in the audio when inserting or deleting units or loading presets.
  • ENHANCED: Text Entry > Holding a button will repeatedly insert the character or perform the action (i.e. backspace).
  • ENHANCED: All sample players that can play slices > Added new Play Extent option called ‘cue’. Triggering the player will cause playback to start from the current active slice/cue and play until the end (or beginning if speed < 0). Afterwards, if looping, then the entire sample will loop.

v0.5.02 CHANGES

  • SYSTEM: Moved build environment from Code Composer Studio on Windows to GNU make on Linux.
  • FIXED: Oscilloscope > Reduced the appearance of gaps in traces of waves with discontinuities (e.g. square, saw, and so on).
  • FIXED: Teletype Integration > Jitter in message timing grew over time.
  • MAYBE FIXED?: Teletype Integration > Need to wait for ER-301 to finish booting before booting other I2C devices. Feedback needed.
  • FIXED: Sample-and-Hold, Track-and-Hold units > Held values were not being restored properly from presets/quicksaves.
  • FIXED: HOLD mode > When adding an empty PinSet, the new (empty) PinSet rendered with zero width.

v0.5.03 CHANGES

  • ENHANCED: Multitrack Recorder > Number of channels is now configurable (from 6 to 12 channels) via Admin > System Settings > Multitrack Recorder > Channel Count. Please keep in mind that not all SD cards are fast enough to record this many channels of 48kHz/96kHz audio. Please test beforehand.
  • ENHANCED: SC.TR > Added the ‘any’ port to the fader (scroll below 1).
  • MAYBE FIXED: Teletype Integration > Occasionally, an i2c message would sit in the buffer and not get processed until the next message arrives.
  • FIXED: Slight performance degradation introduced in v0.5.02.
  • FIXED: Quicksave > The UP button brought the focus to the first slot (HOME) instead of returning you to your previous screen.
  • FIXED: Multitrack Recorder > Freeze when the SD card cannot keep up with audio recording (i.e. overrun).

v0.5.04 CHANGES

  • No changes. The purpose of this version is just to upgrade v0.5.03 to a stable release.

WIKI: How to install firmware on the ER-301

:warning: Please read the change notes above for each release before installing.:warning:

Normal Latency Versions (frame size = 128 samples)
er-301-v0.5.04-stable-48kHz.zip (1.4 MB)
er-301-v0.5.04-stable-96kHz.zip (1.4 MB)

Low Latency Version (frame size = 32 samples)
er-301-v0.5.04-stable-48kHz-f32.zip (1.4 MB)


It’s Christmas! :santa:

1 Like

Could the changes to the Scheduler affect the relative CPU load of existing units / chains / patching methods?

Oh, wow! This sound marvelous! Thank you :heart_eyes:

Loaded it, been testing for an hour. Works really well so far, haven’t seen any issue in loading v0.4 custom units either, including pretty complex ones. Thank you Brian!


Can I just say that besides the release itself, I’m loving the codename. Myrrh

Brilliant stuff, thank you so much.


Very nice! I installed the 96kHz version because I’m not a fan of the input aliasing at 48kHz, but I’m very glad to see the return of the low-latency firmware since that is the variant I would prefer to use.

sorry delete it, solved!

Awesome :smiley::cowboy_hat_face:

So Awesome! Many thanks Brian, especially for the Low Latency Version!!!


I don’t expect it to have much affect on those things. The changes were mainly centered around the hard & soft interrupts that cause context switches in the CPU.

My basement was kind of cold so I thought I’d use the ER-301’s CPU to heat it. :slight_smile:

Hammering on some varispeed sample player polyphony.

Version 0.4 stable 48k standard latency
max poly = 20, CPU load was at 75% average
Above this I started to get pops and crackles

Version 0.5.00 48k standard latency
max poly = 24, CPU load at 92% average
I was getting some minor disruptions to the sound as I copied/pasted new units past the 20th one, but once in place they stabilized.

UI became too sluggish at 24 voices to make me want to try to press my luck with another.

Very cool - a lot of extra power you’ve created out of thin air here, Brian! Also the creation of the new 0.5 folder worked great when I updated the firmware. All my stuff was ready to go.

Here’s the 20 voice version of the patch if anyone wants to try it. Just copy and paste mixers on the second subchain down to add more voices. You’ll need this sine wave sample (included in zip) at

Varispeed Poly.zip (4.9 KB)


Joe, call me lazy but it would have been nice for you to run the max poly = 20 in version 0.5 and shown how it compared to the 0.4 version

Corrected my post above after re-testing on 0.4.27.

20 poly on 0.4 is 75% average CPU.

20 poly on 0.5 is 74% CPU.

So CPU usage is roughly the same. You can just push 0.5 further.


Quoted for truth!


Lazy. :grimacing:


Ugh, called out by the creator. My soul is smarting. Maybe I should have claimed impatience as I’ve not been in front of my synth yet today to check for myself. :innocent:

1 Like

All units from Accents load without issue. Haven’t really done a deep functionality test of them.


Awesome! Just envisioned a use for the remaining 4 16n faders this morning and was grieving my maxed out CPU usage. Wandered off to check the forum and… Yess!

This may be the thing that’ll keep me from needing a 2nd ER-301 for a couple more months, though.

1 Like