OpenStomp

Inspiration Author: 
Eric Moyer
  • Eric Moyer with the OpenStomp
  • OpenStomp
  • Internal workings of the OpenStomp by Eric Moyer

The Coyote-1 is a user programmable/configurable open source audio effects processor designed primarily for guitar players. The Coyote-1 is currently capable of producing Echo, Distortion, Tremolo, Chorus, and Pitch Dive effects, and can be extended to produce hundreds of other audio effects through the creation of custom “effect modules.”

Digital guitar effects processors have been in use for some time, but no other commercial effort has yet produced an open source platform. An ideal open source product would:

  • Utilize free compiler tools
  • Be reprogrammable without requiring expensive additional hardware
  • Compartmentalize individual effect processing code modules so that their inefficiency/efficiency did not affect the performance of other modules, or of the OS
  • Allow effect modules (code entities) and patches (configuration entities) to be easily exchanged/installed/reconfigured by the development community.
  • Be fun to make, fun to program, and fun to use

The Propeller architecture was uniquely suited to address all these goals. Its multiprocessor architecture allowed the custom O/S to execute in a dedicated set of four cogs, with the remaining four cogs each independently executing a different audio effect module. The Propeller's ability to dynamically load, start, and stop cogs allowed user created effect modules to be treated much like separate applications in a traditional OS. Dynamic module management allowed the amount of run time executable code on the device (currently up to 96K, stored in external EEPROMs) to far exceed the processor’s internal storage (32K). The real time determinism of the hub architecture guaranteed that the performance of user created modules would not affect the performance of the OS or of co-executing modules.

The Coyote-1 run time architecture is based on the concept of "effect modules" (code objects which occupy a single cog and which typically implement a single audio effect). Effect modules are interconnected via "conduits" (virtual data paths) routed between "sockets" (virtual data exchange ports).  Sockets are presented by effect modules and "system resources" (virtual object representations of hardware resources such as buttons, knobs, LEDs, etc.). A specific configuration of effect modules and conduit connections is called a "patch". Patches are edited using a custom Windows application (OpenStomp Workbench) and up to 15 can be stored in EEPROM along with up to 16 accompanying effect modules. Once written to the device, patches can be selected and loaded at runtime using the device's foot switches with no host PC attached.

The Propeller also afforded a unique solution to the challenge of conduit data management. Audio samples are processed at 44 kHz (about 23 usec per sample). Every 23 usec data needs to be routed (copied) between typically 20 to 30 socket interconnections (conduits). These data exchanges define the routing of control and audio information between effects modules and device hardware resources.  Conduit routing is unique to every patch and is user defined during patch creation, so the solution had to be fast, deterministic, and adaptable. To achieve these goals, at patch load time the main OS process (running in SPIN bytecode) dynamically generates the Propeller assembly code for a “conduit management” process, then launches that code on a dedicated cog.  The resulting code is extremely time and space efficient because it makes no table look-ups or compares, just performs hard coded reads and writes from the predetermined set of socket addresses in a tight loop synchronized to the 44 kHz audio sample rate.

Visit the OpenStomp website for more information.

This is a high quality product design that fully utilizes the Propeller chip's mutiprocessing capabilities for digitally processed custom audio effect.