Firmware Release Notes (ER-301)
+ For instructions on how to install firmware on your ER-301, please refer to this: WIKI: Firmware installation instructions
+ To be notified of firmware releases and (major) bug reports, please subscribe to the ER-301 Activity Feed over on the forum.
+ There is a discussion thread for v3.xx firmware over on the forum. Please report bugs and feature requests there.

v0.2.27-stable (Alfalfa)
Last updated: October 31, 2017
Download: 96kHz or 48kHz

v0.2.27 Bug fixes for Looper
* FIXED: Sample Recorder (Looper) sometimes failed to produce sound due to a bug in the fading algorithm.
* FIXED: Sample Recorder (Looper) punch fade and reset fade time are now both set by the 'fade' parameter.
* FIXED: Sample Recorder (Looper) clicks and pops when dynamically changing the reset period.
* FIXED: Sample Recorder (Looper) has difficulty controlling loudness when doing sound-on-sound.
* FIXED: Sample Recorder (Looper) exhibits erratic behavior when assigning mono buffer to a stereo unit.
* ENHANCED: Buffer creation defaults to stereo when initiated from a stereo unit.

v0.2.26 Bug fix
* FIXED: Card Player was causing presets to fail to load.

v0.2.25 Bug fix
* FIXED: Card Player was failing to load since v0.2.21.

v0.2.24 Bug fix
* FIXED: Some faders will go out of bounds when using the fine adjustment near the top of the fader's range.

v0.2.23 Bug fix
* FIXED: Activating contextual scope for the 2nd instance (and on) of some units caused various odd GUI behaviors (collapsed units, for example).

The pre-release discussion thread (soon to be closed) for this firmware version is here: v0.2.x Release Thread

v0.2.0 CHANGES

* ENHANCED: WAV files can be auditioned in the file browser.
* ENHANCED: Card speed measurement tools added.
* FIXED: Multiple references to the same sample were not being saved properly in presets.
* ENHANCED: last saved/loaded preset is used as suggestion when loading/saving presets
* ENHANCED: Slice view directly accessible from context view in PLAYER unit.
* FIXED: SHIFT+insert was ignored in the slicing view.
* ENHANCED: SINE OSC unit CPU usage reduced to 40% of previous.
* ENHANCED: LADDER FILTER unit CPU usage reduced to 75% of previous.
* NEW UNIT: Manual Grains
* NEW UNIT: Aliasing Triangle
* NEW UNIT: Aliasing Saw
* NEW UNIT: Card Player
* NEW UNIT: Native Player
* ENHANCED: In sample pool, 'Clear Pool' command has been changed to 'Purge Unused'.
* ENHANCED: Additional slice addressing modes called 'nearest' and '12ET' were added.
* ENHANCED: Decibel control added to Custom Unit.

v0.2.1 CHANGES

* FIXED: Out-of-bounds buffer access in Manual Grains.
* FIXED: Insert button hidden by waveform display.
* FIXED: Decibel label on signal meters are now fixed.

v0.2.2 CHANGES

* FIXED: Sound drops out when inserting a unit in a subchain after auditioning a file.
* ENHANCED: Pan parameter added to Manual Grains.

v0.2.3 CHANGES

* FIXED: Crash when removing LOOPER unit.
* FIXED: Irrelevant pan parameter showing on mono Manual Grains.
* FIXED: In sample pool, the 'purge unused' command would sometimes stop prematurely.

v0.2.4 CHANGES

* FIXED: Inconsistent triggering when slice 0 is at the exact beginning of the sample.
* FIXED: Displayed slice number was off by one in the slicing view's slice list (but was correct in the sub display).

v0.2.5 CHANGES

* NEW UNIT: Rectify with full, positive-half and negative-half rectification.  Amongst other uses, put this in the level chain of the (normally bipolar) VCA to get a unipolar VCA.
* NEW UNIT: Skewed Sine Envelope with skew, duration and level parameters.
* NEW UNIT: Fold, splits incoming signal into upper and lower portions, applies separate gains and recombines.
* ENHANCED: Global Chains were added to the Admin and Source chooser menus.
* ENHANCED: Quicksave slots can be named.
* ENHANCED: Envelope Follower unit parameters are now modulatable.
* ENHANCED: Added contextual scope views (of unit output) to some more parameters.
* FIXED: Zippering noise in Envelope Follower unit.
* FIXED: Manual Grains sometimes stops making sound after assigning a new sample.
* FIXED: After loading a preset, enumerated options were not reflecting new values.
* FIXED: Quicksave UI was shown even if no card was mounted.

v0.2.6 CHANGES

* FIXED: Freeze when removing a triggering Manual Grain unit with an assigned buffer or sample that is short(ish).
* ENHANCED: 6-track recorder will now append an auto-generated take number when saving to a folder that already contains previously saved audio tracks.
* ENHANCED: 6-track recorder will use "save to file" semantics when there is one track to save, and, use "save to folder" semantics when there is more than one track to save.
* NEW SETTING: Configure 6-track recorder save semantics for single tracks (default is file).

v0.2.7 CHANGES

* FIXED: Error in resampling code causing some high frequency content to be attenuated.  Sample Player, Manual Grains, and Pitch-shifting Delay should sound slightly brighter now.

v0.2.8 CHANGES

* FIXED: Occasional crash during WAV file auditioning (due to race condition).

v0.2.9 CHANGES

* ENHANCED: Take a screenshot anytime using SHIFT+CANCEL.  Images are saved to the `ER-301/sc/screenshots` folder.

v0.2.10 CHANGES

* FIXED: Presets are not properly restoring shared (non-file-backed) buffers.
* FIXED: Re-assigning a sample to a playing Manual Grains would sometimes cause the unit to "lose" volume due to resource contention in the grain pool.
* FIXED: Global chains that refer to each other might not load correctly from presets (delayed name resolution needed)
* FIXED: Ladder filter becomes unstable (and stops making sound) if the V/oct input sees a large positive input.
* FIXED: Variable Delay has a 12kHz artifact when modulated in small amounts.
* FIXED: Variable Delay slewing when modulated.
* FIXED: Remove illegal characters from keyboard when naming a file or folder.
* FIXED: Bypass does not work in top level of a Custom Unit.
* FIXED: Crash when assigning local or global stereo sources that have names that do not end with a number.
* FIXED: Stereo Pitch Shifting Delay was missing the V/oct input.
* FIXED: High frequency artifacts in the Pitch Shifting Delay for non-integer speeds.
* ENHANCED: Ladder Filter CPU usage reduced 50% with no change in quality.
* ENHANCED: Added 1V/oct control to the Pitch Shifting Delay.
* ENHANCED: Pressing UP when in a scoped parameter view will return the unit to its original parameter view.
* ENHANCED: Parameters can now be renamed and moved in the Custom Unit.
* ENHANCED: Toggle and Trigger parameter types were added to the Custom Unit.
* ENHANCED: Sample Player unit now has a Stereo Routing option to control how stereo samples are played in mono (i.e. left, both, or right)
* ENHANCED: Pitch Shifting Delay CPU usage reduced 50% with improvement in quality.

v0.2.11 CHANGES

* FIXED: Custom Unit control assignments were not restored when loading legacy presets and quicksaves.
* FIXED: Renaming or deleting any local or global sources (such as Custom Unit controls or global chains) were not being reflected in chain input assignments.
* FIXED: Global Chains were being restored from quicksaves but not showing up in the admin->Global Chains screens.
* ENHANCED: Verification screen added to the "Clear All" command in the Custom Unit's control editor.
* ENHANCED: Press SHIFT while the cursor is over any chain header to display an 'xpath' that describes the location of the chain in its hierarchy.

v0.2.12 CHANGES

* FIXED: Custom Unit control assignments were arbitrarily reordered upon restoring from a preset.
* FIXED: Duplicate control names in Custom Unit were allowed when renaming controls.
* FIXED: XPath display stuck in sub display.
* ENHANCED: Through-zero Linear FM unlocked for Ladder Filter, Sine Osc, Aliasing Saw, and Aliasing Triangle.

v0.2.13 CHANGES

* FIXED: TZFM was not inverting oscillator phase for negative frequencies.

v0.2.14 CHANGES

* FIXED: Mixer unit's mute/solo state not being saved in presets and quicksaves.
* FIXED: Unstable tracking of clock period in Clocking Delay unit.
* FIXED: Occasional pops when modulating the delay time past the max delay of any of the Delay units.
* FIXED: Ladder Filter would not self-oscillate unless provided with a fluctuating input.
* FIXED: Disabled logging to the UART port unless development mode is enabled.
* ENHANCED: Reduced CPU usage of White Noise unit by 70% with no change in quality.
* ENHANCED: Phase modulation added to Sine Osc unit.
* ENHANCED: Feedback (PM type) added to Sine Osc unit.
* NEW UNIT: Ladder High Pass Filter (HPF), 4-pole and resonant.
* NEW UNIT: Fixed High Pass Filter (HPF), 1-pole very efficient implementation for DC blocking applications (e.g. on FM inputs or after wave-shaping).
* NEW SETTING: Does bypassing a unit also disable it? Yes or no.

v0.2.15 CHANGES

* FIXED: In 6-track Recorder, saving a single track to a single file will fail if the destination file already exists.
* FIXED: Possible float pointing exception (division by zero) in the Manual Grains unit when duration is zero.
* FIXED: Pops would occasionally appear in IN1-4 and ABCD inputs at CPU loads above only 65%.
* FIXED: Ladder Filter, Sine Osc, Aliasing Saw, and Aliasing Triangle units were not restoring f0 parameter from presets created prior to v0.2.12.
* FIXED: Unable to re-enable a unit that was loaded from a preset in a disabled state.
* FIXED: Display process was starved when loading quicksaves or presets.
* FIXED: Unit control still focused when exiting from a subchain via UP button.
* FIXED: Rational VCA was not rounding the numerator and denominator to the nearest integer since v0.2.14.

v0.2.16 CHANGES

* FIXED: Sometimes loading a quicksave would leave the top level chains in a disabled state.

v0.2.17 CHANGES
* FIXED: Channel linkage data was not restored properly from quicksaves.

v0.2.18 CHANGES

WARNING: Quicksaves produced with this version are not backwards compatible.

* FIXED: Starvation of UI thread which caused freezes or very slow preset load times when CPU load is high.
* FIXED: Inconsistencies in Sample Pool serialization/deserialization behavior.
* FIXED: Unit and chain header text extending beyond boundaries.
* NEW UNIT: Exact Convolution, an experimental IR convolution unit that is rather heavy on CPU. This unit will only load the first 48000 samples (48kHz firmware) or 24000 samples (96kHz firmware) of the assigned sample, and ignore the sample's sampling rate. The maximum IR length is halved for stereo chains.

v0.2.19 CHANGES

* FIXED: Crash when loading chain presets inside a Custom Unit's encapsulated chain.
* MAYBE FIXED: Occasional crash when deleting slices.
* EHNANCED: Clipboard for units and sequences of units. Hold SHIFT and turn the knob to select units, then Cut, Copy or Move to Mixer.  If configured in Admin>Settings, quicksaves persist clipboard contents.

v0.2.20 CHANGES

* FIXED: Crash when scrolling in (non-empty) slice list after deleting slices.
* FIXED: Paste command would not appear after Copy/Cut unless you first moved the cursor.

v0.2.21 CHANGES

* ENHANCED: Super Fine knob state added.  While in Fine mode, hold SHIFT and turn the knob.
* ENHANCED: Super Coarse knob state added.  While in Coarse mode, hold SHIFT and turn the knob.
* ENHANCED: Coarse/Fine knob state are now persisted for each unit parameter and saved/restored with presets.
* ENHANCED: Pitch Shifting Delay wet parameter is now modulate-able.
* FIXED: Tap Tempo pulse width was being calculated without taking into account the clock divider factor.
* ENHANCED: Tap Tempo width parameter is now modulate-able.

v0.2.22 CHANGES

* FIXED: Could not dial in 0Hz on oscillator units.
* ENHANCED: On power up, show the name of the restored (or to be restored) quicksave.
* ENHANCED: Added contextual scopes to all parameters.
* ENHANCED: Offset unit is now modulate-able.

v0.1.6p15-stable (Moss)
Last updated: May 12, 2017
Download: 96kHz or 48kHz

You can choose either the 96kHz firmware for highest fidelity or the 48kHz firmware for the greatest number of simultaneous units.  I plan to add the ability to hot-switch between 96kHz and 48kHz using one firmware but for now you can just keep both firmwares on your uSD card and switch between them using the 'Update Firmware' screen.

The pre-release discussion thread (soon to be closed) for this firmware version is here.


  • INVISIBLE: Rewrote the underlying GUI framework to make it more amenable to plugin development.
  • INVISIBLE: Big changes in the audio engine were done to get ready for the upcoming bus units.
  • FIXED: button debouncing time was incorrectly configured resulting in little to no debouncing.
  • FIXED: audio dropout when inserting LIMITER unit
  • FIXED: upon activation, input channel selection UI resets to collapsed state
  • FIXED: SAMPLE PLAYER's fade time parameter not getting updated when moving fader and stereo sample is loaded
  • FIXED: fixed potential race condition when deleting slices (hard to test though)
  • FIXED: zipper noise when changing modulation gain/bias via knob
  • FIXED: WET/DRY parameters were not clamped to [0,1]
  • FIXED: some obvious parameters were not being set when loading a mono in preset into a stereo context (and vice versa)
  • FIXED: when parameter is focused, pressing CANCEL now restores the original value (rather than zeroing it)
  • FIXED: bouncing cursor does not match selected spot sometimes
  • ENHANCED: slice offset parameter added to SAMPLE PLAYER
  • ENHANCED: scrolling in SAMPLE PLAYER's slice view now wraps at the begin/end of the sample
  • ENHANCED: added hard sync to SINE OSC unit
  • ENHANCED: you can now undo the following actions: clear chain, delete unit
  • ENHANCED: now in some units, if you can focus press a parameter to get its contextual view
  • ENHANCED: keyword filtering added to the unit selection screen
  • ENHANCED: 24 quicksave slots
  • ENHANCED: OUT1-4 can be routed to chain inputs
  • ENHANCED: units can be renamed
  • QUESTIONABLE TWEAK: replaced SAMPLE PLAYER's linear fade with a cosine fade
  • NEW UNIT: Custom Unit (encapsulate a chain of units)

Patch 2

  • FIXED: firmware updater crashes when pressing the update button

Patch 3 (The Neil Parfitt patch) 

  • FIXED: focus pressing a control caused it to lose focus
  • FIXED: fixed some visual issues with fonts (0, r, and t)
  • FIXED: sub-chain edits were not being reflected in the parent parameter's miniscope
  • FIXED: local sources are placed first, in the source selection screen
  • FIXED: accidentally, left out the SINE unit's level parameter from UI
  • ENHANCED: GUI animation settings added (slow, normal, fast, disabled)
  • ENHANCED: Custom Unit names are randomly generated
  • ENHANCED: Custom Unit control editor, pressing S1 will cycle through options
  • ENHANCED: Unit presets that are saved in ER-301/sc/presets/units/chooser now show up in the unit selection screen.

Patch 4 (The sunshinelover patch) 

  • FIXED: Characters were being inserted on button release (should be on the press) in the keyboard screen.
  • FIXED: "Prompt" setting for reloading quicksaves on boot was not working.
  • FIXED: Unit names were not restoring properly when loading presets due to incorrect saving logic.
  • FIXED: Crash when inserting unit and front SD card is not mounted.
  • FIXED: Suggested filenames are no longer erased when typing (press SHIFT+HOME to clear the text box).

Patch 5

  • FIXED: Crash in sample slice view.
  • FIXED: Disabled wrapping around in slice view.
  • FIXED: Cursor not showing in channel setup.
  • ENHANCED: Focus press unit header to switch between unit's control view and menu view.
  • ENHANCED: Normal press unit header to left justify the unit.
  • ENHANCED: Unit bypass now implemented.

Patch 6

  • FIXED: Crash when CPU is overloaded.
  • FIXED: Removed zombie sub-screens in admin menu.
  • FIXED: 6-track recorder is back with cleaner UI (and internals).
  • ENHANCED: 6-track recorder now has presets and it's state is saved with quicksaves.
  • ENHANCED: file/folder dialogs have been consolidated and improved.
  • ENHANCED: At anytime, SHIFT + channel buttons 1-4 will mute/unmute the corresponding chain.
  • NEW UNIT: I've been stress testing the firmware with this CV-able STRESS unit.

Patch 7

  • FIXED: Mono version of STRESS unit crashed on load.
  • FIXED: Garbage values in frequency measurement display over gate control in the CUSTOM unit.

Patch 8

  • FIXED: limited pitch modulation range on CUSTOM unit
  • FIXED: In Chain Preset Saving, the button release from pressing "Save" was inadvertently activating the "New Folder" option on the next screen.

Patch 9

  • FIXED: creating a new folder while saving chain/unit presets caused .lua to be appended to the folder name.

Patch 10

  • FIXED: Got rid of the intermediate "switch" state on the units.
  • FIXED: 6-track recorder UI behaved weirdly when recording buffers overflowed.
  • ENHANCED: added context-sensitive hints to the 6-track recorder setup screen.
  • ENHANCED: audio is faded out/in whenever you mute/unmute a chain
  • ENHANCED: chain is now auto-muted before you clear or link/unlink channels

Patch 11

  • FIXED: freeze when automatically restoring (w/o prompt) the last quicksave on boot.
  • FIXED: incorrect "failed to load quicksave" error message when loading quicksaves made before patch 6.

Patch 12

  • FIXED: Sometimes unit subscreen contents are blank after returning from a menu action.
  • FIXED: When loading a quicksave, 6-track configuration is only loaded if not already recording.
  • FIXED: Track-and-Hold unit was not tracking when used in a mono chain.
  • FIXED: Unit bypass menu item was not working when the unit was collapsed.
  • ENHANCED: Changed default unit settings for MIXER gain and PLAYER speed.
  • ENHANCED: ADSR parameters have been extended out to 10sec.

Patch 13

  • FIXED: LOOPER's fade on reset functionality was missing.
  • FIXED: Sequential channel bleed on the G inputs.

Patch 14

  • FIXED: SHIFT+HOME (ZERO) now uses the press event rather than the release event.
  • FIXED: LOOPER preset will now restore buffer characteristics (max loop length and # of channels).
  • FIXED: Negative start parameter values in the LOOPER unit didn't wrap around.
  • FIXED: SAMPLE PLAYER would not stop at previous slice when speed is negative. 
  • ENHANCED: LOOPER start parameter has been changed to proportion of maximum loop length (was seconds).
  • ENHANCED: Changed default frequency settings for SIN OSC and LADDER FILTER.

Patch 15

  • FIXED: PLAYER gets stuck if the active slice is at the exact beginning or exact ending of a sample.

Download: 96kHz or 48kHz

FIXED: overflow in feedback path of LADDER FILTER unit
FIXED: tune(v/oct) subchain of SAMPLE PLAYER was accidentally disabled
FIXED: deleting active slice did not deactivate it
FIXED: reduced SINE OSC unit output amplitude
FIXED: lower frequency range for SINE OSC unit
FIXED: frequency faders are now log-scaled

- FIXED: occasional crash when quicksaving a large number of units
- FIXED: can't delete sample when its status pending
- FIXED: pressing shift in sample pool brings up obsolete screen
- STOPGAP: mute DAC on crash
- STOPGAP: units are presented in a fixed order in the (currently primitive) unit insert menu
- ENHANCED: replaced tanh with cubic mode in LIMITER unit
- ENHANCED: gains are modulatable in EQ3 unit (but still needs more attention)
- NEW UNIT: Sine Oscillator (exponential FM only for now)
- NEW UNIT: Ladder Filter (4-pole LPF with non-linearity in feedback)

- fixed crash when playing a slice in reverse at a speed above x2.5
- removed display of logs during loading/saving of presets
- added popup messages to many situations
- fixed cursor ending up off screen after loading chain preset
- crash using quicksave screen while cpu load screen (admin+scope) is showing
- increased button debounce time to 100ms

- support for 8-bit and 32-bit integer WAV files added
- capped CPU usage for PLAYER unit when playing at higher speeds without reducing fidelity

bug fixes
- crash when ejecting card that is in use (i.e. loading samples)
- occasional crash when deleting slices in player unit
- scrolling freaks out when chain is shorter than display
- buttons obscured by large amplitude waveforms
- parameter scopes don't update their targets when there is a change in the subchain.
- MIXER meters don't update their targets when there is a change.
- made preset loading more robust against file corruption

- save state of engage/punch buttons in presets

bug fixes
- increased debounce time from 1ms to 50ms

bug fixes
- cleaned up some inconsistencies in the sample pool UI: better error messages and proper clearing of multi-selections.
- added extended WAVE file format support (some converters write in this format)
- added broadcast WAVE format (BWF) support (some portable recorders write in this format)

bug fixes
- default load path for unit preset did not use unit type
- fixed "crash" when aggressively modulating sliced sample playback speed
- clearing a chain now clears the input assignment

ui enhancements
- non-modulatable faders now have scopes that monitor unit output

- renamed mix parameter to dub
- added wet/dry parameter to facilitate input monitoring

- added pre and post gain level meters

- added new parameters: pre-scale, # of levels, post-scale

clocked delay
- time factor parameter has been substituted with 2 modulatable parameters: numerator and divisor

new units
- sample and hold
- track and hold
- rational vca
- period meter

new settings
- enable dev mode (please ignore this for now, it's just for me)

bug fixes
- empty chains now pass audio

new settings
- quicksave restore on start-up: yes, no, prompt
- set snap to zero-crossing commands

  • Display a message (instead of crashing) when you try to load a non-preset file from the preset load screen.
  • Removed the bypass button because bypassing is not implemented yet.
  • Some missing arrows fixed in the sub display screens.
  • CPU load now only shows the load for critical threads.

The journey starts here.