Home | ER-101 | ER-102 | ER-301 | Wiki | Contact

V0.4.x Firmware Workout: Goofing off never felt this hard



:fire::fire::fire:Welcome to the realm of v0.4.x. :fire::fire::fire:

I will be your Firmware Master for the evening. The biggest changes are not going to be visible to you quite yet, but will rather unfold in the following weeks. In addition to the usual opportunistic cherry-picking, the major theme for our journey to a stable v0.4 firmware will revolve around these 4 areas:

  1. Routing
  2. Scope Mode
  3. Custom Controls
  4. Hold Mode

The initial v0.4.x releases will focus on Routing and Scope Mode, and then later on I will tackle Custom Controls and Hold Mode.

As always proceed with caution and keep anything that you care about away from this firmware for a while. There is a LOT of new code that is only minimally tested. Fortunately, this firmware will create a completely different set of system folders (in ER-301/v0.4) and operate independently of the previous v0.3 release. Most importantly this means your quicksaves from v0.3 are not going to be touched.

v0.4.00 CHANGES

Don’t let the short list fool you. This took a LOT of goofing off, I mean work. :wink:

  • FIXED: Offset > In stereo chains, the offset parameter for the right channel was not being shown.
  • FIXED: Quicksaves > Occasional freeze when loading a CPU-heavy quicksave while running a CPU-heavy patch.
  • FIXED: Quicksaves > Sub-chain view from previous patch would remain after loading a quicksave.
  • FIXED: Level meters > Brief (ghost) rise in the displayed level when meter comes into view.
  • JANITORIAL: CPU/Memory Load View > This view is now an item in the admin menu rather than its own context. So you no longer use the STORAGE and MODE switches to access it.
  • ENHANCED: Preset files no longer use the *.lua extension regardless of the type of preset.
  • ENHANCED: Scope Mode > Navigate your OUTx chains with this bird’s eye view.
  • ENHANCED: Chain Source Selection > Improved source selection UI and locals now include ANY unit or branch in the entire chain hierarchy. Beware of feedback.

v0.4.01 CHANGES

  • FIXED: Sample Auditioning > OUTx chain output would break after auditioning files on the same channels.
  • FIXED: Mixer Unit > Inserting a Mixer unit into a mono chain incorrectly showed stereo faders.
  • FIXED: Scope Mode > Button columns were too bright.

v0.4.02 CHANGES

  • FIXED: Memory leaks when loading quicksaves and certain types of units.
  • FIXED: Channel Mute > Garbage in the audio buffers was causing audible noise.
  • FIXED: Channel Mute > Flashing LEDs were not synced and channel selection was hard to see.
  • FIXED: Teletype > Removed old i2c addresses and set the default i2c address to 0x31 as required by Teletype v3.0.0 and above.
  • FIXED: Admin > Renamed Load screen to CPU Load.
  • FIXED: Middle Layer > Enabled compilation of units with internal feedback loops.
  • ENHANCED: Channel Setup > Moved out of the admin area and is completely accomplished in the user area by just chording the two channels that you want to link or unlink.

v0.4.03 CHANGES

  • FIXED: Quicksaves > Since v0.4.02, OUTx chains were being restored on top of each other and sometimes in the wrong channel group.

v0.4.04 CHANGES

  • WARNING: This version has no support for presets/quicksaves made with previous firmware versions. I will be looking at what it takes to support the legacy presets over the next few weeks.
  • WARNING: There are changes in the middle layer API which means that bespoke units will need to be ported.
  • FIXED: Custom Units > Are back!
  • FIXED: Manual Loops > Sample Editor screen loses track of the active sample buffer when making edits.
  • FIXED: Source Assignments > There was a potential for source assignments using duplicated chains or units (such as when loading presets or pasting from the clipboard) to restore incorrectly.
  • FIXED: Slices > It was possible for slices to become unsorted and thus out of order with respect to their slice number.
  • FIXED: Local Sources > Sub-chains were tapped pre-control rather than post-control.
  • ENHANCED: Channel Link/Unlink > Linking will keep the contents of the upper chain. Unlinking will duplicate the contents of the original stereo chain into the 2 resulting mono chains.
  • ENHANCED: Buttons > Improved button debouncing.
  • ENHANCED: All Faders > Added hysteresis to the encoder control for more precise dialing.
  • ENHANCED: All Faders > Focus-pressing Sx or SHIFT+Sx will bring up a numeric widget for dialing in an exact value (between -999,999 and 999,999, ignoring any fader minimum/maximum). ENTER to commit new value and return. SHIFT+ENTER to just commit but stay on the widget. UP or CANCEL to return without committing.
  • ENHANCED: Locals > Assignment of the left vs right channel is dictated by which (OUTx) channel is currently selected.
  • ENHANCED: Unit Chooser > The ‘Recent’ category includes any recently pasted unit(s).
  • ENHANCED: All Units > You can now add custom controls to any unit and then use them as local sources in any of the sub-chains.
  • ENHANCED: Control Editor > Almost all unit controls (both custom and builtin) can be edited now. Does the range or stepping of the bias or gain not suit your needs? Do you want to invert the output of a gate control or change its latching behavior? Just go to the unit menu and select ‘Edit Controls’.
  • ENHANCED: Scale Quantizer > Any scala (*.scl) files located in ER-301/scales will be automatically added to the list of available scales.
  • NEW UNITS: Two Bands … Six Bands > Multi-band versions of the Custom Unit which can be used for parallel processing. The unit’s input is routed to each band untouched. Each band is mixed to unity to produce the unit’s output.

v0.4.05 CHANGES

  • FIXED: All units > Crash when bypassing a unit.
  • FIXED: All units > Unable to clear the input assignment.
  • FIXED: File Browser > Crash when auditioning a sample.
  • FIXED: Clipboard > Crash when using the ‘Move to Mixer’ feature.
  • FIXED: Teletype > Failed to load SC.TR and SC.CV units.
  • FIXED: Filter units > Allow zero bias on the cutoff.
  • FIXED: Control Editor > Crash when deleting a control.
  • FIXED: Control Editor > Some edits to pitch controls were having no effect.

v0.4.06 CHANGES

  • FIXED: Source Assignments > The output of certain sub-chains (note to self: branch output is a ParameterAdapter) was not propagating.
  • FIXED: Scale Quantizer > Scales are now sorted in dictionary order.
  • FIXED: Control Editor > Renamed controls were not showing the new name in the editor.
  • FIXED: Control Editor > Renaming a custom control was causing the control to disappear from presets.
  • FIXED: All Faders > Sometimes displayed values would have rounding errors (-0.1 would show as -0.099, etc.)
  • FIXED: Countdown Unit > There were two versions causing confusion, one in testlib and one in builtins. Removed the one in testlib and fixed the one in builtins to properly count down again.

v0.4.07 CHANGES

  • FIXED: 6-track Recorder > Crash when trying to assign a local source.
  • FIXED: Convolution Unit > Removed from the low-latency firmware.
  • FIXED: Move to Mixer > Outgoing connections were being cleared.
  • FIXED: Unlinking Channels > Original content is kept in the top (mono) channel only instead of copying to both channels. This prevents CPU usage from increasing when unlinking channels.
  • FIXED: Unit > Replace > Missing controls after replacing a unit.
  • FIXED: Unit > Replace > After replacing a unit, you might get a crash if when accessing the locals view in any of the unit’s sub-chains.
  • FIXED: Unit > Edit Controls > Sometimes sub display graphics remain from a previous operation or focus.
  • FIXED: Unit > Context Scope > Leaving the context scope view sometimes results in a blank sub display that can only be fixed by moving the cursor away from the control and back on to it.
  • FIXED: Sample Pool > Edited samples were losing their path information and given generated names such as tmp-buffer-1005.wav and so on, instead of using the original filename and incrementing it.
  • ENHANCED: Quicksaves > Cleaned up summary display and now displaying the firmware version of the quicksave, graying out quicksaves that are not compatible.
  • ENHANCED: Unit Control > Number Widget > Committing a value will now also defocus the control to prevent inadvertently changing the value with the encoder.
  • ENHANCED: Sample Pool > Pressing ENTER will open the sample editor and slicer on the currently highlighted sample.

v0.4.08 CHANGES

  • FIXED: Unit > Custom Controls > Occasional crash when performing an operation that affects the position of a control.
  • FIXED: System > Memory resources were not being released in a timely manner for certain lengthy operations (note to self: Application.postTrigger).

v0.4.08p1 CHANGES (patch to low-latency firmware only)

  • FIXED: Lots of builtin units were missing from the unit chooser list.

v0.4.09 CHANGES

  • FIXED: Legacy Presets > v0.3.25 presets and quicksaves should now load.
  • FIXED: Track|Sample & Hold > Was not saving and restoring its last held value from presets.
  • FIXED: Control Editor > Property menu was not focused initially.
  • FIXED: Global Chains > Renaming screen did not auto-populate previous name.
  • FIXED: 6-track > Assignments to global chains were not persisted.
  • FIXED: Multi-Band Units > Bypassing the first unit blocked the input signal.
  • FIXED: Quicksave Sub-display > Total # of units in the quicksave was not being counted correctly.
  • FIXED: Channel Mute > Not persisted in quicksave.
  • ENHANCED: Sample Scanner > Added option to disable interpolation.
  • ENHANCED: Insert Unit > Unit and Chain presets can now be loaded directly from the Insert Unit screen. Unit presets will automatically instantiate the correct unit and chain presets will be loaded inside a Mixer unit.
  • ENHANCED: Insert Unit > Browse units alphabetically and by category. Set default behavior in admin > Settings.
  • ENHANCED: Insert Unit > Bespoke units loaded from external libraries (i.e. not built-in) are now labeled with their library name.
  • ENHANCED: Bespoke Units > If a bespoke is not found in the original unit library (because the library was renamed or not loaded) then the ER-301 will look for a unit with the same name in the other (loaded) unit libraries.

v0.4.10 CHANGES

  • FIXED: Units > Header border disappears when bypassing a unit.
  • FIXED: Sample Slicing/Editing View > S1 in slice view should play from the cursor and suppress external triggering and slice selection. Additionally, if in slice navigation mode, then S1 actives the highlighted slice.
  • FIXED: Track|Sample & Hold > Was (still) not saving and restoring its last held value from presets.
  • FIXED: Multi-band Units > Copying a Custom unit into a Multi-band unit will lose of all of its local connections.
  • ENHANCED: Container Unit Name Generation > 3 modes: poet, robot, and off. The ‘robot’ and ‘off’ modes are completely generic while the ‘poet’ mode uses an internal list of English adjectives and nouns to generate a (nonsense) name. Users can override either or both internal lists by creating and populating ‘ER-301/namegen/adjectives.txt’ and/or ‘ER-301/namegen/nouns.txt’. You can also provide a list of names to suppress by creating ‘ER-301/namegen/suppress.txt’. This all applies to Multi-band units also.
  • ENHANCED: Track|Sample & Hold > Added a fader to visualize and manually change the held value.

v0.4.11 CHANGES

  • FIXED: Sample & Hold > Mono version was failing to load.
  • ENHANCED: Grain Stretch > Jitter control is now modulate-able.

WIKI: How to install firmware on the ER-301

:construction::construction::construction: UNSTABLE FIRMWARE :construction::construction::construction:
Use the stable v0.3.25 firmware for gigs and projects with deadlines.

Normal Latency Versions (frame size = 128 samples)
er-301-v0.4.11-unstable-48kHz.zip (1.6 MB)
er-301-v0.4.11-unstable-96kHz.zip (1.6 MB)

Experimental Low-Latency Version (sample rate = 48kHz, frame size = 32 samples)
(Not recommended for novice users. This low-latency version will produce pops & clicks when the CPU usage exceeds ~65%.)
er-301-v0.4.11-unstable-48kHz-f32.zip (1.6 MB)

Wavetable osc - waveedit import
Units that block their inputs
Quantizer unit

CONGRATULATIONS on reaching v0.4! I hope your goofing off was productive restful.



Oh look. A delay line with a feedback path through a low pass filter and a limiter.



In before Joe.

(JK, can’t wait to try this out though!)


Very exciting! The new routing capabilities look like an order of magnitude increase in flexibility! Unfortunately I won’t have access to my 301 for about a week, so I’m counting on y’all to capture some video of this in action for me. :wink:

Thanks @odevices for all the hard work! (in between goofing off haha)


Just installed, very excited and scope mode looks really good already. I can see this being very useful!

Oh my god, the chain source selection is great for feedback :smiley:




Game changer, really. I like when you goof off.


what is ‘Custom Controls’ and ‘Hold Mode’ all about?




Diving in… yeaaaaaaaaaaaaah!!!

Mixer Unit

-Channel Setup is set to mono
-Displays two channel meters, with signal out of ch1/left. Is this a bug or by 0.4 design?


Still 45 minutes from getting to my synth. The pain of waiting, and this from the squeaky wheel.


oh man… @odevices … SCOPE MODE. Awesome!

I love how when you kick out of scope mode, it takes you to the exact spot you’re skimming over, no matter how nested it is in the patch. Super Slick!


Hold mode in the 101 is a magic mode that enables you to make all sort of changes to your patch while it’s playing but offline, and commit them all together when you disengage hold mode, very cool especially live. Dunno what Brian is thinking about it in the 301, but I’m already excited.


Ok so I did get to spend a few minutes with it. Scope mode is awesome!

Two words: side chain :slight_smile:

Edit: make that three words. Side chain anything


Uhoh! 0.4 / 48K

Channel 1 (or 1/2 linked) Audio Bug

It appears that adding a sample player on channel 1 (I’ve so far tried the RAW and variable), auditioning a file and then loading it up “breaks” the audio engine. I could hear the preview, but upon load, I see the audio on the scope but the output is silent.

-Clearing the channel does not fix the problem
-Restarting the Audio Engine does not ‘bring it back’ either
-Have to soft-reboot or cycle power to bring it back


  • this only occurs on channel 1.
  • If I carry out the same variable or raw player load process on Channel 2 to 4 it works as expected
  • If I copy and paste this sample player to ch. 2-4 it works. Ch.1, nope. (but meters still displaying the signal)

As further test, same thing happens in dual stereo. Ch.1/2 dies, but the same units copied to 3/4 works.


I can reproduce.


This is probably way to early on, but based on this awesome tapping of unit locals… it may get pretty confusing popping things in Mixers all over the place, especially if controlling feedback/delay loops and such. Don’t get me wrong, The Channel mixers are great for a ton of applications, but I just feel like something leaner will make this more intuitive,

What if there was a "Trickle unit that was 2 soft-keys wide.
The Left Part was the local assign/scope (and displayed here after assign) (same visual style as a global)
The Right Part was a VCA with usual fader and gain/bias/subchain assign

unit menu options:
-Mixer mode on / off (pass through signals coming into left of unit)
-VCA mode: BI or UNI

This way you could clearly see what’s being bled-in to a chain / as well as automate it without adding unnecessary levels for simple routing.

Also, without a separate unit header, it helps differentiate itself from regular units as this is a signal flow task compared to usual processing.

Example Hackjob Graphic demonstrating a trickle unit tapping from a sine wave oscillator:

the same idea demonstrating a visual indicator that it’s passing through unit signal to the left:


I think this is a great idea. Until Brian works out a way to prevent feedback attacks I was thinking there better be a limiter behind the scenes (i know there isnt) so this looks like a great idea and if it works and is accepted would solve a bunch of problems for Brian in preventing unwanted screaming feedback…