Arduino Audio Tools: Pinping Up Resampling

The ResampleStream class of the Arduino Audio Tools project provides some flexible resampling functionality both on the input and the output side. To calculate the values it just uses a simple but efficient linear interpolation. I finally managed to provide an extended ResampleStreamT resampling class that uses some alternative interpolation method implementations: Here is an overview with the advantages and disadvantages: Method Quality CPU Cost Artifacts Interpolates Sample Points Linear Low Very Low High Yes Read more…

HIMEM – ESP32 PSRAM on Steroids

Quite some time ago, I published some blogs about the ESP32 PSRAM. I think it is about time to dig a litte deeper into the topic and look at how we can use the unadressable 4 MBytes. PSRAM and C++ STL One thing that took me by surprise when I was testing with the actual ESP32 3.2.0 core, is that you just need to switch on the PSRAM in Arduino, and the C++ STL classes Read more…

Pimping up your ContainerM4A

In my last blog, I described you I added M4A support to my Arduino Audio Tools project and how to use it. As highlited we need to access and store the stsz size tabe to play back the audio: a typical size table contains aournd 40 – 80 kbytes, but for long audio this can get much bigger: This is not an amount of data, that you would like to have to store on a Read more…

Vibe Coding: Adding M4A Audio Playback Support to the AudioTools

Last week I was asked, if my Arduino Audio Tools project was supporting the playback of M4A files, which it didn’t: but I thought that would be quite a good opportunity to try out Vibe Coding,  since this problem space is well documented and quite established it seemed to be quite a good fit. Needless to say that at that point of time I did not know anything about M4A. So I just asked Claude Read more…

Arduino Audio Tools: Supporting ALAC

Overview I am currently supporting quite an extensive list of audio codecs as part of my Arduino Audio Tools Library. I thought that I covered all available open source implementations. However last week, I discovered that there is an open source implementation for the Apple Lossless Audio Codec (ALAC): I was struggeling quite a bit with the API, but I finaly got it integrated! I was testing with an ESP32: With some decreased frame size, Read more…

Arduino Audio Tools: Using FTP as Data Source

I published a new release of my TinyFTP library, that I have converted to a header only C++ library and I changed the FTPClient to a templated class so that we can support an automatic session management with different Client implementations. I already provided an simple ftp example in the AudioTools library that just uses an individual FTP File as data source. However, I thought it would be cool to have a FTP audio source Read more…

Remote Control for the Arduino AudioTools AudioPlayer

I thought it might be cool to provide a remote control for the AudioPlayer which is part of the Arduino Audio Tools. I did not want to invent a new protocol, so I implemented the HTML interface that has been documented by the KA-Radio project. I am providing a Stream and a Http implementation via the following classes: KARadioProtocol KARadioProtocolServer The following commands are supported: play, instant, volume, volume+, volume-, pause, resume, stop, start, next, Read more…

A Http Live Streaming (HLS) Player with the Arduino Audio Tools

In traditional http streaming we can just read a single audio stream and feed it to a decoder. Unfortunatly Http Live Streaming (HLS) adds a lot of additional complexity and overhead. It works by splitting an audiostream into very short segments, which are just a few seconds in length, and then serving these segments over HTTP or HTTPS. This list of available segments is published in a playlist file (.m3u8), which contains a URL for Read more…

SD Read and Write Speeds on an ESP32

I did not find any comprehensive overview of the expected read on write speeds of the different Arduino SD APIs that are provided to access the SD drive. I also expected to see a difference depending on the read/write size. I tested the SD and SDMMC libraries, that are provided by the ESP32 Arduino core. I also wanted to include the SDFAT library, but unfortunately it was crashing with different read or write sizes, so Read more…

AudioTools: ESP32 IDF and Files – The Final Frontier

After we can access the Internet purely using IDF functionality w/o Arduino, the final challange is to provide access to files as Streams! IDF provides the concept of the Virtual File System (VFS): you can mount a file system under a name and access the files of that file system using the name as prefix. For this the POSIX file API is supported and therefore we have all standard C and C++ file methods available. Read more…