Guitar amp and effects pedal built on the Waveshare ESP32-S3-Touch-AMOLED-2.06
An open-source guitar amp and effects pedal runs full-size Neural Amp Modeler A2 captures in real-time on an ESP32-S3 microcontroller using custom assembly kernels.
read it Detailed breakdown of optimizing heavy neural amp models on constrained microcontroller hardware makes for a compelling read.
summary
CoyoPedal is an open-source guitar effects processor built on a low-cost Waveshare ESP32-S3 development board. By writing hand-optimized Xtensa assembly kernels and using block floating point across dual cores, the author successfully runs full-size Neural Amp Modeler (NAM) A2 captures at 48 kHz in real time. The project includes a touchscreen interface compiled from TSX to native C++ via GeaStack, a full effects chain, and a browser-based WebAssembly version to test captures without hardware.
key points
- Runs full-size Neural Amp Modeler A2 WaveNet models in block floating point using hand-written Xtensa assembly kernels split across dual ESP32-S3 cores.
- Achieves around 4ms total audio latency using a USB audio class 2 interface as a USB host.
- The touchscreen UI is written in TSX and compiled ahead-of-time to native C++ with no JavaScript runtime on the device.
- Includes a WebAssembly build allowing users to test profiles and the user interface directly in a browser without physical hardware.
who should read it
Embedded systems engineers, audio DSP programmers, and DIY guitarists interested in running machine learning models on microcontrollers.
discussion warm
consensus
Commenters are deeply impressed by the technical achievement of running full-size NAM A2 models on a low-cost ESP32-S3 chip, noting that similar commercial budget hardware usually relies on down-converted lite profiles.
pushback
A few users questioned the appeal of fixed neural profiles where traditional amp controls are baked in, though the UI supports basic parameter adjustments.
That's literally the title of my blog post at https://playtaurus.com/blog/running-nam-a2-full-natively-on-... but no, it runs A2-full, because I wrote a custom kernel for it in assembly.
S3 doesn't have enough floating point processing power, so what I do is to split the model in two, run the model in series, and represent floating point values as block floating point, essentially compressing the floating point representations.
The null test peak sits at -60dB in the worst case, in 193 different NAM profiles I tested, which is basically inaudible. You can listen to the different profiles …
The author explains the exact engineering workaround used to bypass hardware floating-point limitations by splitting the model and using block floating point.
Generated by an LLM from the article and thread. Check the sources before relying on it.