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…

AudioTools: An Internet MP3 Player with the Espressif IDF

In my last post, I described that I have implemented the URLStream class using pure IDF functionality. So you will not be wrong if you expect a working MP3 Internat Player next that just relies on the IDF w/o Arduino. The main.cpp Program Here is the complete IDF program that mimicks the Arduino setup() and loop() methods. The only other difference to the usual Arduino sketches is, that we can’t use Serial and the related Read more…

AudioTools: An ESP32 IDF implementation of URLStream

The following classes can be used as HTTP client and implement the AbstractURLStream API. All these classes are dependent on the Arduino Networking API: URLStream: Supports HTTP GET, POST, PUT and DELETE ICYStream: Supports the ICY protocol URLStreamBuffered: Using buffer that is filled by a task ICYStreamBuffered: Using buffer that is filled by a task I thought that it would be cool to have this functionality also working for the ESP32 outside of Arduino. The Read more…

AudioTools: Using Multiple Decoders

In all my demo sketches so far, I have used just one decoder only, but what if we want to play multiple audio file types ? To support this scenario, I decided to provide the MultiDecoder class, that lets you register your codecs with the corresponding mime type. This class works together with my MimeDetector which detects the file type based on the first couple of bytes. Here is an example sketch that can play Read more…