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.

v0.4.12 CHANGES

  • FIXED: Custom Controls > Renaming a control was not propagating to other parts of the UI properly.
  • FIXED: Audition > Auditioning on ch2 mutes ch1 and leaves it muted.
  • FIXED: Quicksaves > Sometimes output chains were not unmuted after loading a quicksave.
  • FIXED: Unit Deletion > GUI would become unresponsive during deletion of a unit with lots of sub-chains.
  • FIXED: Local Source Selection > Problems when assigning mono sources to mono destinations within a stereo output chain.
  • FIXED: File Browser > Saving > Checking if an existing file will be overwritten was not done when entering a new filename.
  • FIXED: Contextual Sample Views > Zooming interface is now standardized to use the KNOBMODE button like the sample/slice editors.
  • FIXED: Contextual Sample Views > Channel selection now affects whether the left or right channel of stereo samples are rendered.
  • FIXED: Offset unit > In stereo chains, the right sub-chain was inadvertently set to output to the left channel and the left input channel was ignored.
  • FIXED: Loading mono presets into stereo chains (and vice versa) sometimes failed to restore some parameters.
  • FIXED: Sample Players > ‘Play Duration != repeat’ should not play on start-up or when changing samples.
  • FIXED: Locals in Stereo Chains > Having the right channel selected when connecting a mono control yielded “No Signal”.
  • ENHANCED: Raw Player > Added ‘speed’ parameter which must be an integer since the Raw Player has no interpolation but allowing reverse playback, pausing, and integer decimation all under remote control. The default range is -4 to +4 but this can be expanded or reduced via the control editor.
  • ENHANCED: New bootloader > This firmware comes with a new bootloader that shortens boot times.
  • ENHANCED: Screen Saver > Set activation time in System Settings. Default is 30 mins.
  • ENHANCED: Floating Menu > Push and hold (>0.3s) a unit header or control to make a floating menu appear. Make your selection with the knob and release the button to execute.
  • ENHANCED: Custom Units > Renamed to Custom Effect.
  • ENHANCED: Hold Mode introduced.
  • ENHANCED: Custom Unit > The Custom Unit was split into Custom Source and Custom Effect units.

v0.4.13 CHANGES

  • FIXED: Unit Header > Crash when focusing a unit header and turning the encoder.
  • FIXED: Unit Config Menu > Was not reachable from the long press menu.

v0.4.14 CHANGES

  • FIXED: Hold Mode > Master faders were reset only on positive movements.
  • FIXED: Hold Mode > Zero (SHIFT+HOME) was not working on pinned controls.
  • FIXED: Hold Mode > Pinned Control > Unpin menu item was not working.
  • FIXED: Hold Mode > Pinned frequency controls were not using log scaling.

v0.4.15 CHANGES

  • FIXED: Unit Header > Swapped ‘Replace’ and ‘Config’ commands so that the more often used ‘Config’ command does not require a SHIFT press.
  • FIXED: Unit Controls > ZERO (SHIFT+HOME) was not working.
  • FIXED: Unit Menu > Reinstated access via focus press on a unit header. This means there are 3 ways to access the unit menu: (1) Focus press the header, (2) long press the header and choose ‘config’, and (3) focus the header and press S3.
  • FIXED: Hold Mode > Pressing ZERO on a Master Fader would sometimes not work.
  • FIXED: Hold Mode > Pinned Control > Unpin command was leaving a ‘ghost’ control behind.
  • ENHANCED: Hold Mode > Pressing COMMIT on a Master Fader will immediately set it to 100%.

v0.4.16 CHANGES

  • FIXED: Hold Mode > Sub menu zombies when using any command that removes pinned controls or PinSets.
  • ENHANCED: Hold Mode > Added ‘Reset Targets’ command to PinSets and ‘Reset Target’ command to pinned faders. Resetting a target means to move the target value to the current value of the control.

v0.4.17 CHANGES

  • FIXED: Crashes when loading some presets/quicksaves with local connections.
  • FIXED: 6-track Recorder > When recording a single track, it was not possible to save to an empty folder.
  • FIXED: Hold Mode > Unusually high CPU load when manipulating a Master Fader.
  • FIXED: Sample Audition > When browsing for a sample via a unit (not via the Sample Pool) the default audition channel was 1 or last used channel. Now it will audition on the channel where the unit is located. Auditioning from the Sample Pool is unchanged.
  • FIXED: Contextual View > Sample View > The “open editor” command was not working.

v0.4.18 CHANGES

  • FIXED: The data in 8-bit WAV files was being read as signed integers rather than unsigned integers.
  • FIXED: Move to Mixer > Pinned controls were unpinned after being part of a “Move to Mixer” operation.
  • FIXED: Hold Mode > Renaming a control in one Pin Set was not propagating to the other Pin Sets that contained the same control.
  • FIXED: Slice Editor > Pops up message if you attempt to create a loop point where there is no slice.
  • ENHANCED: All pin-able controls > Added “pin to all” and “unpin from all” commands to the long press menu.
  • ENHANCED: Soft Keyboard > You can now choose from a list of text snippets that were previously entered in a similar UI context (i.e. history).

v0.4.19 CHANGES

  • FIXED: Memory corruption in the loudness meters and scopes that might have been causing some crashes.
  • FIXED: Source Chooser > Resource leak when switching between Jacks, Locals, and Globals.

v0.4.20 CHANGES

  • FIXED: Soft Keyboard > Combined text history for file-related operations and unit renaming.
  • FIXED: Crashes when opening the Source Chooser after loading large quicksaves.
  • FIXED: More resource leaks plugged.

v0.4.21 CHANGES

  • FIXED: Firmware Updater > v0.4.20 broke the internal firmware updater.
  • FIXED: Screenshots > v0.4.20 broke the ability to create screenshot image files.
  • FIXED: Encoder > Super fine was the same step size as fine for some parameters.
  • FIXED: 6-track recorder > No way to clear assignment on a single track.
  • FIXED: Slice Players > Upon assigning a sample, the Play Extent setting will be initialized to ‘all’ if there are no slices, and to ‘slice’ if there are slices.
  • FIXED: Clocked Player, Clocked Stretch, and any unit with a trigger input > These units were causing a slow memory leak.
  • FIXED: Scope View > Resource stress by keeping deleted units in memory until the next time you open the scope view.

v0.4.22 CHANGES

  • FIXED: Some frequency readouts were not showing decimals for values less than 1Hz.
  • NEW UNIT: Single Cycle > A simple and naive wavetable oscillator with smooth scanning. Load it with an audio file containing a single cycle of your desired waveform, or, load it with a sample chain of many single-cycle waveforms and scan. In general, when using a sliced audio file, the slices are interpreted as single-cycle waves.

v0.4.23 CHANGES

  • FIXED: Single Cycle > The scan signal was being sampled at frame rate (370Hz) rather than at the audio rate.

v0.4.24 CHANGES

  • FIXED: Control Editor > A long press on the test fader in the property edit screen would crash the ER-301.
  • FIXED: 6-track Recorder > When saving multiple tracks, pressing ENTER in the folder browser while having nothing selected would silently fail.
  • FIXED: Replacing Units > There is some ambiguity about how to order the controls when replacing a unit with another unit that has different controls, especially considering that users can reorder controls at will, as well as add new controls. Previously the ordering of the replaced control had priority but now I’ve changed it so that the control order of the new unit (replacer) has priority.
  • ENHANCED: Sample Pool > If the “save as” option is not available (because the sample already matches what is on your card) then just hold SHIFT to make it appear.

v0.4.25 CHANGES

  • FIXED: Unit Chooser > Stereo-only units were listed in Recents even for mono chains.
  • ENHANCED: Mixer Channel > Renamed to Mix for mono chains. Split into 2 different units for stereo chains, Mono Mix and Stereo Mix.

v0.4.26 CHANGES

  • FIXED: Hold Mode > Immediately after unpinning a control, it was possible to cause a crash by pressing S2.
  • FIXED: 6-track recorder > Freeze when trying to record with no SD card mounted.
  • FIXED: Screensaver > Dialed down the bubbles a bit.
  • ENHANCED: Screensaver > Now there are 4 modes: blank, 2lines, grid, bubbles.
  • FIXED: Sample Pool > Trying to load a sample when there was insufficient sample memory would give a parsing error instead of an out-of-memory error.
  • FIXED: Sample Pool > Pressing CANCEL when asked to load multiple samples as a chain (or not) will now cancel the load.
  • FIXED: Unit > Attach from Card > No error message when out of sample memory.
  • ENHANCED: Unit > Attach from Card > You can now load multiple samples as a sample chain when using this command. Previously this was only available via the Sample Pool.

v0.4.27 CHANGES

  • FIXED: Hold Mode > Enter/Commit and Home/Zero were not working properly when the cursor was over the master fader of a pin set.
  • FIXED: Custom Units and Bypass > Custom Units were not completely disabled when bypassed.
  • FIXED: Unit Editor > Duplicate control names were allowed when they should not be allowed.
  • FIXED: Slice Players > When restoring a preset/quicksave, The ‘Play Extent’ setting was getting overridden by a change introduced in v0.4.21.
  • FIXED: Track-and-Hold > “Track when low” mode was not working.
  • FIXED: Middle Layer > RoundRobin > Implementation was not finished.
  • ENHANCED: Saving Unit Preset > If the unit has been renamed, then suggested filename should be based on the unit name.
  • ENHANCED: Unit Browser > If a category only contains units from one external library then the library name will be added to the category rather than each unit.

WIKI: How to install firmware on the ER-301

Important Note: If you are updating from v0.4.20 then you will not be able to use the internal firmware updater (because I broke it in this version). Instead you will need to manually copy the firmware files (MLO, SBL, kernel.bin) to your rear SD card using your PC as described here .

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


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?

1 Like

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.

1 Like

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…