Arduino AudioTools: Streaming audio via http post

In my Arduino AudioTools project I am providing many examples that show how to distribute audio over the network. One scenario that is easy to implement, is to write the data via http post. On the server side usually one of the following options is expected: the content length and we can just write the audio data to the stream after the http header no content length, adding transfer-encoding: chunked to the post header and Read more…

Arduino AudioTools: Audio Number Type Conversion on Stereoids

I am providing the untyped NumberFormatConverterStream class to convert between different signed bit sizes. This class is using the typed templated NumberFormatConverterStreamT do do the actual work. Currently there are also some Codecs that can also be used to convert the nubmer format: e.g. L8, L16 and Float. I decided to extend the functionality of NumberFormatConverterStreamT to potentially support any number type, so that we can also use unsigned data types for the conversion as Read more…

The ESP32 I2S 24 bit Mystery

I had the issue that the 24 bit output via A2DP was not working, but the corresponding 32 bit example was just working fine. So I decided to double check the I2S output with the help of a logical analyzer. Checking 16 bits First I was double checking how the working 16 bit is showing up. So I used the following Arduino Sketch which was just outputting some unique numbers per byte: #include “AudioTools.h” AudioInfo Read more…

Arduino AudioTools: Logging on Stereoids

The Readme from the AudioTools project describes how to use the logger: AudioToolsLogger.begin(Serial, AudioToolsLogLevel::Debug); You can log to any object that is a subclass of Print and valid log level values are: Debug, Info, Warning, Error. But only few peaple realize the power behind this! So let me give you a couple of ideas: you can log to a file you can use any other standard Arduino class that inherits from Print like Wire, Ethernet, Read more…

Arduino Support for the Lyrat Mini Board

I had some open issue, that the LyraT Mini Audio Board was not working with my AudioTools and AudioDrivers library, so I was digging into this board a bit deeper. Here are the main two differences to the regular supported LyraT or AudioKit boards: It uses a ES8311 codec chip which supports only mono to manage the amplifer and aux output. My driver library was supporting this chip, so I had the audio output working Read more…

Testing My ESP32-S3 Camera Baord

In order to test the USB functionality of the ESP32-S3, I bought the following camera/microphone board: Before testing the USB I implemented and executed the following test cases for each hardware component: Testing the user button Testing the LED Testing the Color LED Testing the SD Testing the SDMMC Testing the PSRAM Testing the Camera Testing the Microphone Here is a summary of the limitations/issues that I have found: I could not make the 4 Read more…

Filtering Out Metadata Before Decoding MP3

MP3 files can contain metadata that stores information about the title, the author etc. If you send an MP3 stream with metadata to a decoder, the logic is usually resilient enough to skip this automatically. However there can be some cases where the codec can’t cope and is crashing. One way to deal with this, is to remove the metadata from the file. But a more flexible solution is to just filter out the metadata Read more…

TinyUSB Audio: Testing the Microphone Quality using a Stream

In my last blogs, I described how I managed to extend TinyUSB to provide an simple USB Audio device in Arduino. So far I have been using some randon numbers to generate noise. This is not very helpful to check if we lost some samples. A SawTooth wave is much more convinient. We can use the AudioTools to generate this. Here is the example sketch, that also shows how we can define an Arduino Stream Read more…

A new Architechture for Talkie: TalkiePCM

There are quite a few popular TTS libraries for Arduino but most of them suffer from the same problem: The TTS function is not properly separated from the output function. Architechture In a properly architected solution we would have a A TTS function which produces platfrom independent PCM data An output function or library to process the PCM data. In Arduino we have the abstact Print class which is used by everything to which you Read more…

TinyUSB: Audio on an Seeeduino Xiao in Arduino

In the last blog, I described how I managed to provide an USB Audio device for a Speaker and a Microphone and the bumpy journey to it. I also wanted the Headset sceanario to work where both the input and output of audio is supported. I was searchig very long why my first implementation did not work until I realized, that actually it did when Serial (CDC) was deactivated! The symptoms were like this: Activating Read more…