Arduino AudioTools: ESP32 vs RP2040 Pico W

I thought it might be interesting to compare the Rasperry Pico W with the ESP32. While the ESP32 provides faster numeric operations, I did not have any visibility how these two microcontrollers compare in regard of the WIFI speed. The good news is, that the URLStream from the AudioTools library is working now properly for the Pico W as well, so we can use it to measure the thruput! Measuring the Speed I used the Read more

Using Mozzi with the AudioKit

Mozzi brings your Arduino to life by allowing it to produce much more complex and interesting growls, sweeps and chorusing atmospherics. These sounds can be quickly and easily constructed from familiar synthesis units like oscillators, delays, filters and envelopes. The AudioKit is a cheap ESP32 based audio board that usually uses an ES8388 audio chip. Quite some time ago I was working on a Mozzi integration for my AudioTools and had it usable. But because Read more

Arduino AudioTools: Display the FFT Result on a LED Matrix

I have added a simple output class to my Arduino Audio Tools which can display the result of a FFT analysis on an LED Matrix. For my tests, I am using a 32 x 8 LED Matrix, but first we need to test the functionality. Determine the Wiring Logic I am using the FastLED library to update the LEDs. To simplify the processing I am providing the LEDOutput class. #include “AudioTools.h” #include “AudioLibs/LEDOutput.h” #define PIN_LEDS Read more

Supporting WM8960 Audio Boards in Arduino

The WM8960 based boards are quite popular as Audio Modules for the Rasperry Pi and I had one of these laying around. So I had it always on my to-do list to extend my AudioTools library to support this audio chip as well, so that it can be used in Arduino. I started last year to convert the audio-codec-wm8960 library provided by Infinion by making sure that the i2c calls are using the Wire library Read more

A simple Midi File Parser (not only) for Arduino

I was looking for a simple midi file parser library, but I did not find anything that made me happy, so I decided to provide one myself. Here are my design goals: minimal RAM requirements for midi with 1 track incremental writing and parsing of data No external dependencies: compile and run outside of Arduino with cmake Using the Arduino Print API for writing data For processors with a lot of RAM: provide some multitrack Read more

AudioTools and 24 bit values

I always planned to support audio with 24bit values in my Arduino Audio Tools library, but I never actually tested the functionality and so far I did not have a clear understanding of how these values would need to be represented. To be prepared I already provided a draft implementation of the int24_t data type, but there were some misunderstandings, that have been corrected now. First we use the int24_t data type as you would Read more

Getting Started with the STM32F411 Discovery Kit and Arduino

I started to explore the STM32F411 Discovery Kit which comes with the following features: STM32F411VE ArmĀ®(a)-based microcontroller featuring 512 Kbytes of Flash memoryand 128 Kbytes of RAM A (blue) user push-button ST MEMS 3-axis digital gyroscope (L3GD20 or I3G4250D) ST MEMS 3D digital linear accelerometer and magnetic sensor (LSM303DLHC or LSM303AGR) Four user LEDs: orange, green, red and blue ST MEMS digital microphone (MP45DT02 or IMP34DT05) Audio DAC with integrated class-D speaker driver (CS43L22) USB Read more

Analyzing ESP32 Exceptions

When your Arudino sketch is crashing it produces something as follows 13:45:41.992 -> 13:45:41.992 -> Backtrace: 0x40083585:0x3ffb2690 0x400892ad:0x3ffb26b0 0x4008e2f1:0x3ffb26d0 0x400d1442:0x3ffb2800 0x400d2be1:0x3ffb2820 13:45:41.992 -> 13:45:41.992 -> 13:45:41.992 -> 13:45:41.992 -> 13:45:41.992 -> ELF file SHA256: 9868280367130d7a It is vital to be able to analyse this backtrace and translate it to methods and file names. In Arduino we could use the EspExceptionDecoder to do this. Unfortunately this is not supported by Arduino 2.0! No problem – I Read more

Arduino AudioTools – Audio Effects

I was never quite happy with my old implementation of the AudioEffects class because it was not very intuitive with the required type parameters and I thought it is about time to improve. So I finally managed to provide a proper Stream implementation that works like many other converting Streams, so that we can now apply the effects both on the input and the output side: Effects on the Input Side We just provide an Read more