V0.3.x Firmware Workout: Better late than never

Welcome to the realm of v0.3.x. 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.3 firmware will revolve around these 2 areas:

  1. Sampling
  2. Opening the Middle Layer: Writing Your own Units in Lua

In the list of changes below, you should hopefully see some good progress towards the Sampling theme. The bulk of the work for the Middle Layer is finished but before I open it up, I need to add some finishing touches. More to come!

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. The good news is this firmware will create a completely different set of system folders (in ER-301/v0.3) and operate independently of the previous v0.2 release. The only shared folder is ER-301/recorded.


v0.3.00 CHANGES

  • NEW UNIT: Grain Stretch, a slice-able sample player with independent control of pitch and speed. Has the same (extended) slicing functionality as the Sample Player unit.
  • NEW UNIT: Freeverb, the public domain and ubiquitous Schroeder reverberator from “Jezar at Dreampoint”.
  • NEW UNIT: Bump Map, maps the input signal to a bump function with adjustable center, width, height and fade.
  • NEW UNIT: Scale Quantizer, quantize pitch CV to various scales.
  • NEW UNIT: Velvet Noise, randomized impulse train. Smoother than white noise but without the low roar of pink noise.
  • NEW UNIT: Pulse to Hertz, measures the frequency of the incoming signal (after thresholding) and outputs the measured value in Hz.
  • ENHANCED: Sample Player > Menu > 3 new attributes to control play head behavior: How often? (loop vs once). How much? (all vs slice). Which side? (left vs both vs right).
  • ENHANCED: Improved menu system that reduces scrolling and makes better use of screen real estate.
  • ENHANCED: Sample Player > Slice View > Auto Slice on spectral onset (i.e. transients).
  • ENHANCED: Sample Player > Slice View > Auto Slice on grid.
  • ENHANCED: Sample Player > Slice View > Shift multiple slices
  • ENHANCED: Sample Player > Slice View > Select region with SHIFT+KNOB. Cancel clears the selection.
  • ENHANCED: Sample Player > Slice View > Snap to zero-crossing via [snap] button. Can be combined with region selection.
  • ENHANCED: Sample Player > Slice View > Destructive operations: trim, cut, normalize, silence, fade in, fade out, and remove DC.
  • ENHANCED: The KNOBMODE button toggles between time and amplitude zoom in the waveform displays. Note the horizontal and vertical arrows next to the LEDs on the panel.
  • ENHANCED: Admin > Preamp Settings > IN1-4 preamp hardware is now configurable from the admin screen. Line level recording!
  • ENHANCED: All load and save dialogs remember their last file or folder choice.
  • ENHANCED: Sample Pool > When entering the Sample Pool from a unit menu, the unit’s currently assigned sample is highlighted for easier reference.
  • ENHANCED: Sample Player > Slice View > Audition individual slices.
  • ENHANCED: Track & Hold > Two new modes: low = track on low and hold on high, minmax = running max on high and running min on low.
  • ENHANCED: System directory structure on front card is now organized by the major and minor version of the firmware (i.e. /ER-301/v0.3 instead of /ER-301/sc).
  • FIXED: Standardized (and minimized!) button presses required to navigate a chain and their units.
  • FIXED: Period-o-meter renamed as Pulse to Seconds to match the Pulse to Hertz unit.
  • FIXED: Sample Player > Last active slice shift was not being restored when loading a preset or quicksave.

v0.3.01 CHANGES

  • FIXED: Sample Player > Slice View > Cut operation was copying the wrong portions.
  • FIXED: Sample Player > Slice View > Zooming while onset/grid slicing caused a crash.
  • FIXED: Looper > Context View > Zooming causes a crash.
  • FIXED: Looper > Context View > Memory leak. GUI slows down (and possible crashes) when Looper context view is visible.

v0.3.02 CHANGES

  • FIXED: Preamp Settings > Crash on load/save preset.
  • FIXED: Grain Stretch + Sample Player > Not responding to triggers in some modes.

v0.3.03 CHANGES

  • FIXED: Legacy (v0.2) presets are loadable again.
  • FIXED: Slice on Onset > Results from median filter of peak heights were being ignored. Slices should be more robust now.
  • FIXED: Slice on Onset > Detection algorithm was not starting from the beginning of the buffer.
  • FIXED: Put back the missing expand all/shrink all function. Focus the chain header and cycle with the ENTER button.
  • FIXED: Unit menu was activated on a button press (instead of a release) which allowed the button release to inadvertently activate a menu item.
  • ENHANCED: Added visual hints as to what will happen if you press a soft button again after already focusing a unit control or header (i.e. focused press).
  • ENHANCED: Bump Map now takes 1/3 of the CPU usage as before. Also renamed Bump Map to Bump Scanner.
  • NEW UNIT: Sample Scanner > Same as Bump Scanner except you can also ‘Assign Sample’ to be scanned by the input. Set fade to 0 and width to 1 and height to 1 to use a sample as a lookup table (LUT).

v0.3.04 CHANGES

  • FIXED: Sample & Hold > Broken by v0.3.03 update.
  • FIXED: Freeverb > Stops producing audio if ‘size’ is modulated out of range.
  • ENHANCED: Variable Delay > Feedback is now modulate-able.
  • ENHANCED: Clocked Delay > Feedback is now modulate-able.
  • ENHANCED: Freeverb > Reduced CPU usage by more than 50%. Now 4% on 48kHz and 8% on 96kHz firmware.
  • NEW UNIT: uDelay > Cheaper and simpler version of the Fixed Delay unit. Use this instead whenever you need to nudge a signal forward in time for synchronicity.

v0.3.05 CHANGES

  • FIXED: Freeverb > Uninitialized comb filter state variable causing havoc (no audio, broken level meters) downstream of this unit.

v0.3.06 CHANGES

  • NEW UNIT: Slew Limiter, 3ms to 786s.
  • ENHANCED: -10V to 10V are now mapped to -1 to 1 (previously -10.24V to 10.24V was mapped to -1 to 1).
  • ENHANCED: Teletype support added.

v0.3.07 CHANGES

  • ENHANCED: SD card file system improvements (speed and other things…). In order to get the advantages, from now on you should ALWAYS format your card with the ER-301 like this: Admin > Card Console > Format Card (S2).
  • FIXED: Slicing View > rewind(S1) was playing from the sample start rather than the cursor.

v0.3.08 CHANGES

  • (HOPEFULLY) FIXED: Crash when recording to some SD cards.
  • (HOPEFULLY) FIXED: Card formatting sometimes failed.
  • FIXED: Card speed measurments were not reflecting actual speeds in practice.
  • FIXED: Card speed measurement would use too much memory and silently fail, yielding 0MB/s speed measurements.
  • FIXED: Teletype needed to disabled and re-enabled in order for a newly selected slave address to take effect.
  • FIXED: Minimum slew for Teletype CV changes was 2ms. Now the minimum is 0ms.

v0.3.09 CHANGES

  • FIXED: Unit Control > Focus pressing a unit control no longer toggles the context view. Instead, focus pressing will unfocus the control. Pressing ENTER still toggles views, however. (@leverkusen)
  • FIXED: Any Player > Crash when leaving slice view that has no sample assigned. (@x2mirko @sixnon)
  • FIXED: Sample Recorder > Zipper noise when decreasing fade time.
  • FIXED: Fixed Delay > Feedback path had a fixed 128 sample delay, now reduced to 0 samples.
  • FIXED: Fixed Delay > Runaway feedback when modulating feedback above 0dB. (@tomk)
  • FIXED: Fixed Delay > Clicks and pops when changing the delay time.
  • FIXED: Delays have been renamed for clarity. Fixed Delay is now just Delay and is the most typical form of the delay. Variable Delay has been renamed to Doppler Delay to emphasize its FM character (i.e. pitch changes when you modulate the delay time). The Pitch Shifting Delay has been renamed to Grain Delay to reflect its underlying algorithm.
  • FIXED: Slicing View > Zero crossing search made more robust against long stretches of a constant value (i.e. silence).
  • FIXED: Clocked Delay > Ambiguous ‘numerator’ and ‘divisor’ terminology replaced with clock ‘multiplier’ and ‘divider’ terminology to match other units.
  • FIXED: Slicing View > Crash when zooming in the Slice Shift tool. (@tomk)
  • FIXED: All units that use samples > There was no way to detach a sample from a unit.
  • ENHANCED: Slicing View > Deleting slice in the same pixel as the cursor regardless of order. (@sunshinelover)
  • ENHANCED: Slicing View > Upon pressing delete (slice), if there is no slice inside the current view then no slice will be deleted.
  • ENHANCED: File Browser > Sample preview loops when the sample is less than 50ms, otherwise it plays it once.
  • ENHANCED: Sample Recorder > Replaced dub parameter with feedback parameter which controls how much of the original recording to mix with the input.
  • ENHANCED: Sample Recorder > Create and attach a buffer in one step without going to the Sample Pool.
  • ENHANCED: Clocked Delay > No longer changes pitch when clock tempo changes.
  • ENHANCED: Clocked Delay > CPU usage reduced 50% with no reduction in quality.
  • ENHANCED: Clocked Delay > Added spread/nudge parameter to offset the tap forward or backward from the clock. In the stereo version of this unit, nudge becomes spread which nudges the left channel forward in time while nudging the right channel backwards.
  • ENHANCED: Delay, Spread Delay and Clocked Delay > Added menu item to set maximum delay time (0.1s, 1s, 10s, or 30s).
  • ENHANCED: Card Player > Added menu item to switch between ‘play once’ and ‘loop’.
  • ENHANCED: Sample Player > Added menu item to select interpolation quality (none, linear, quadratic).
  • ENHANCED: All units that use samples > Now possible to choose a sample directly from the card without going to the Sample Pool.
  • ENHANCED: Tap Tempo > Removed tempo parameter (use a Clock unit instead). Added multiplication parameter.
  • ENHANCED: Clock and Tap Tempo > Added menu item to enable/disable integer rounding of multipliers and dividers.
  • ENHANCED: Pulse to (Seconds, Frequency) units > Added multiplier and divider controls.
  • ENHANCED: System Settings > New settings for enabling/disabling various confirmations.
  • ENHANCED: Unit Controls > Digital readouts on the modulate-able controls can now show the post-modulation value (instead of the bias value). Just go over to Admin > System Settings to enable the new behavior.
  • ENHANCED: Middle Layer Exposed > Place your custom unit library in ER-301/libs and it will be automatically loaded when the front SD card mounts.
  • NEW UNIT: Spread Delay > Instead of separate left and right delay times, one delay time is shared by both channels while the (%) spread parameter nudges the left channel forward in time and the right channel backwards in time, or vice versa. Available in stereo chains only.
  • NEW UNIT: Clock > Simple clock source with modulate-able rate, multiplier, divider and pulse width. Comes in 3 flavors: secs, BPM, and Hz.
  • NEW UNIT: Pedal Looper > Simple looper inspired by pedal loopers.
  • NEW UNIT: Quantize To Clock > Quantizes gates to a given clock.
  • NEW UNIT: Deadband Filter > Output only changes when a change in the input exceeds a given threshold. Used for cleaning up noisy control signals without sacrificing responsiveness.

v0.3.10 CHANGES

  • FIXED: Grain Stretch > Crash in the unit menu. (@x2mirko)

v0.3.11 CHANGES

  • FIXED: Teletype units > Failing to load. (@x2mirko)

v0.3.12 CHANGES

  • FIXED: Pedal Looper > Only recorded left channel when in a stereo chain.
  • FIXED: Clocked Delay > Was being created with a zero maximum loop time.
  • NEW UNIT: Clocked Doppler Delay > Just like the Clocked Delay but using the Doppler (tape-style) Delay inside. (@scttcmpbll)

v0.3.13 CHANGES

  • FIXED: Quantize To Clock > Was outputting a series of fast triggers rather than gates.
  • ENHANCED: Pedal Looper > Added menu items to export recorded audio to a buffer in the Sample Pool.

v0.3.14 CHANGES

  • FIXED: Pedal Looper > Pressing Undo while Overdubbing was broken.
  • ENHANCED: Pedal Looper > Menu item added to choose between rec>play and rec>overdub behavior.
  • ENHANCED: Pedal Looper > Menu item added to allow choosing exactly when and when not to pass input.
  • ENHANCED: Manual Grains > Added ‘squash’ parameter which you can use to squash the grain envelope smoothily into a box shape. The effect is the same as passing a Sine Envelope through a Limiter with the squash parameter corresponding to the pre-gain of the Limiter.
  • ENHANCED: Drastically reduced the amount of kernel memory needed when saving a preset or quicksave.

v0.3.15 CHANGES

  • FIXED: Players > Some options settings in the unit’s menu were not adjustable.
  • FIXED: Unit Controls > V/oct controls were not adjustable when System Settings > “Displayed value for unit controls” set to “actual”.
  • FIXED: Sample Recorder (Looper) renamed as Manual Looper.
  • ENHANCED: Manual Looper > Added menu item to turn latching on and off for the engage and punch controls.
  • ENHANCED: Unit Header > Removed the “re-init” command that no one uses and in its place there is now a “replace” command! Certain units that are similar enough will even bring over control settings and their subchains.

v0.3.16 CHANGES

  • FIXED: Loading Presets > Crash while loading certain presets with incorrect version information.
  • FIXED: Manual Grains > Pan control was broken by v0.3.14 changes.
  • FIXED: Grain Stretch > Clicks when using jitter on small grains and/or slow speeds.
  • ENHANCED: Pop up a warning message when the user tries to load (unit, chain, or quicksave) preset created on later firmware than what they are running.

v0.3.17 CHANGES

  • ENHANCED: Manual Looper > Renamed to Feedback Looper.
  • ENHANCED: Brought back the original Sample Recorder (Looper) as Dub Looper.
  • NEW UNIT: Counter > Trigger on the input causes output value to increment by ‘step’. Can be set to wrap or not. Reset-able with modulate-able step size, start and finish. Scale output with the ‘gain’ parameter.

v0.3.18 CHANGES

  • FIXED: Crash when loading a preset in which a unit fails to load AND it subsequently tries to restore focus to this failed unit because that was what was focused when the preset was saved.
  • FIXED: When restoring a preset/quicksave from early v0.3.xx firmware, some units were not loading due to changes in unit type names.
  • FIXED: All gain parameters now go from -10 to 10 (previously -5 to 5). FM gain now goes from -10k to 10k (prev -5k to 5k).
  • ENHANCED: Lua API > Added the ability to use arbitrary functional expression when tying object parameters together inside units.
  • ENHANCED: The “restore quicksave on boot” behavior now has a 3 second delay (with message) allowing you to cancel if desired.

v0.3.19 CHANGES

  • FIXED: Now catching errors during unit instantiation to prevent crashes when loading units with errors.
  • FIXED: Linear VCA is now renamed to Linear Bipolar VCA to differentiate it from the unipolar version.
  • FIXED: Clocked delays and Spread Delay were consuming more CPU than necessary (reduced CPU about 40%) due to inadvertent use of double floats in some parts of the calculation.
  • FIXED: Delay, Spread Delay, Clocked Delay, and Grain Delay > Delay times were being rounded to the control’s coarse grid when restoring from presets or quicksaves.
  • FIXED: Crash when loading presets containing units with names that have consecutive spaces.
  • FIXED: Grain Stretch > Grain rendering was passing through slice boundaries.
  • FIXED: Grain Stretch > Periodic grain production was free-running rather than synced to incoming trigger.
  • FIXED: Slicing Menu > Disabled commands are shown grayed out instead of not shown at all.
  • FIXED: Sample Pool > Purge Unused > Would also purge unsaved buffers without warning.
  • FIXED: Waveform Views > Vertical and horizontal zoom were not saved with presets.
  • ENHANCED: All oscillator units > Oscillator phase is now saved with quicksaves and presets.
  • ENHANCED: Mute chain during unit bypass/delete/replace and certain menu operations > Parent chain is muted before performing these operations and then unmuted afterwards.
  • ENHANCED: Sustained Slices > Sustain option added to all players (unit menu > Play Duration > sustain) that support slices. Go to the slicing view to specify the sustained (i.e. looped) segment of each slice.
  • ENHANCED: Quicksaving > If there is unsaved audio then a message will be shown giving you the option to go to the Pool and give the unsaved audio buffers a proper place to live on your SD card.
  • ENHANCED: Sample Pool > Entries with unsaved audio are now marked with an asterisk (*).
  • ENHANCED: Sample Scanner, Manual Grains now have contextual waveform views.
  • ENHANCED: Create sample chains On-the-Fly > Whenever you select multiple WAV files to load from the card, you can choose to load them as a (pre-sliced) sample chain.
  • ENHANCED: Sample Pool > You can now replace (M5) a focused sample with a new sample, updating all units that were using the old sample to use the new sample.
  • NEW UNIT: Linear Unipolar VCA > This VCA includes a rectifier on the level modulation input.
  • NEW UNIT: V/oct to Seconds > Outputs a base time (s) amount multiplied by the (fractional) number of octaves represented by the input (pitch) voltage.
  • NEW UNIT: V/oct to Hertz > Outputs a base frequency (Hz) amount multiplied by the (fractional) number of octaves represented by the input (pitch) voltage.
  • NEW UNIT: Clocked Player > Speed of playback (and therefore the duration of the sample or active slice) is adjusted in real-time to match a clock. Changes in tempo will cause changes in pitch.
  • NEW UNIT: Clocked Stretch > Speed of playback (and therefore the duration of the sample or active slice) is adjusted in real-time to match a clock. Changes in tempo will NOT cause changes in pitch.
  • NEW UNIT: Manual Loops > sample player with CV-able speed, loop start and length.
  • RENAMED UNITS: Sample Player → Variable Speed Player, Native Player → Raw Player

v0.3.20 CHANGES

  • FIXED: Loading a sample chain with a mix of mono and stereo files would yield reversed slices.
  • FIXED: Manual Loops > Bias fader range was 0 to 1 when it should have been -1 to 1.
  • ENHANCED: Manual Loops > added a parameter called max.len which sets the loop length (in seconds) that corresponds to a value of 100% on the (loop) len parameter.
  • ENHANCED: Manual Loops > Added contextual waveform view.
  • ENHANCED: Manual Loops > Added (sample) edit command to the unit menu.

v0.3.21 CHANGES

  • FIXED: Clocked Stretch > CPU spikes when clocked very fast (>10Hz) and attached to a long sample (> 1min).
  • FIXED: Oscillator units > Level was defaulting to 0.480 instead of 0.5.
  • FIXED: Mixer Unit > Ducking to silence during bypass is now applied to the Mixer’s child chain instead of the Mixer’s parent chain.
  • FIXED: V/oct Controls > Rounding error in the display of the cents value.
  • ENHANCED: Slicing and Sample Edit Views > Added Yes/No confirmations to destructive operations.
  • ENHANCED: Pedal Looper > Additional After Record Option: stop.

v0.3.22 CHANGES

  • FIXED: Slicing and Sample Edit Views > Forgot to add Yes/No confirmations to cut and trim operations.
  • FIXED: Destructive Sample Edits > Loop points were not surviving the edit operations.
  • FIXED: Sample Players > Audible pop at the end of some samples even if faded out.

v0.3.23 CHANGES

  • FIXED: Bypass state of sub-chains was not being restored properly.
  • FIXED: Global Chains > Chain order was not being restored properly from presets and quicksaves.
  • FIXED: Slicing View > Sample region selection not working in slice navigation mode.
  • FIXED: All Slice Players > Looping broken for negative speeds in slice mode when there was only 2 slices, one at the beginning and one at the end.
  • FIXED: Sample Preview in File Browser > Sample preview UI failed to reset when end of playback was reached.
  • FIXED: Pedal Looper > In a stereo chain, the Pedal Looper undo and overdub functions were broken.
  • FIXED: Destructively editing a sample assigned to the Sample Scanner unit causes a crash.
  • FIXED: Slice Editor > Slices were not being wrapped around the beginning or end when shifting.
  • ENHANCED: Clocked Stretch and Clocked VariSpeed > Added menu option to specify the ‘Stretch Duration’ as ‘all’ or ‘slice’ (default). When the ‘Stretch Duration’ is set to ‘slice’ then the playback speed will be set so that the current active slice (or the entire sample if no slices) has the same playback duration as the period of the tempo clock. When the setting is set to ‘all’, then regardless of the active slice, the speed will be set so that the entire sample’s duration matches the period of the tempo clock.
  • ENHANCED: Grid Quantizer > Levels parameter is now modulate-able.
  • ENHANCED: Sample Preview in File Browser > In addition to auto-looping very short samples (<50ms), the preview will now loop or not loop depending on the loop settings of the current unit.
  • ENHANCED: Sample Preview in File Browser > Added a system setting that lets you have the preview continue playing even if the focused sample changes.
  • ENHANCED: Slicing View > A new auto-slicer was added, called ‘Slice to Division’, which allows you to slice a sample into N equal length pieces. For correctness and contrast, ‘Slice to Grid’ was renamed to ‘Slice to Period’.

v0.3.24 CHANGES

  • FIXED: System Settings > Crash when autosaving the system settings.
  • TEMPFIX: Teletype Integration > Added i2c addresses 0x31 and 0x32. Will remove conflicting addresses in v0.4.

v0.3.25 CHANGES

  • FIXED: All delay units > Feedback parameter turns to NaN when dialed all the way up on 48kHz firmware only. The delay unit stops producing audio once this happens.
  • FIXED: Global Chains > Right channel of stereo global chains were not being restored properly from presets and quicksaves.

WIKI: How to install firmware on the ER-301

er-301-v0.3.25-stable-48kHz.zip (1.5 MB)
er-301-v0.3.25-stable-96kHz.zip (1.5 MB)


1st — thanks Brian!!


2nd – Thanks Brian!!!


3rd and thanks!

1 Like

Awesome thanks!

1 Like

It’s party time!

1 Like

Sounds really nice :+1: Looking forward to trying it out later :slight_smile:

1 Like

Hell yeah

1 Like

Yooooo ! Thanks Brian !

1 Like

First time I opened Grain Stretch it did not start auto-playing the same way as when I deleted it and then opened it again.

1 Like

So much sample related stuff. My dreams are answered :heart_eyes:


Is there an “Undo?” I’ve used Revert to get rid of Fade In / Fade Out, but I thought maybe holding Shift and Fade In or Fade Out might work as an undo.

1 Like

This is a giant series of OMG’s and I’m stuck in Grain Stretch though I just added a Freeverb. The wow factor is HUGE!


Great, thanks Brian, nice start to the day…and I’ve most of the day to myself, por causalidad, and realtively free from jetlagged brain fog!

1 Like

Thank you Brian, that’s awesome. I love the freeverb

1 Like

Good gravy - this is a monster update! Thank you for all of this! :slight_smile:

1 Like

Omg! Can’t wait to get home from work and explore. Thanks so much for your work. Now get some rest and a massage.

1 Like

Grain stretch is amazing. Also, I LOVE the new menu structure for selecting units. So much better than before! And I didn’t even notice that there was need for improvement! :heart_eyes:

1 Like

Holy crap this is one hell of an update, I crouch on bended knee before you Sire.

On a side note, Lizzy has invited me around for a bash so if we could firm up some stability that’d be ace. No one wants to disappoint a monarch after all :slight_smile:


Wow! TONS of stuff!!! The new menu navigation is super fast and visually great!!!