The minimp3 Decoder on an ESP32 ?

When I was looking for an alternative open source MP3 decoder, I found the minimp3 project from lieff. Arduino Support Yesterday I took another effort to make it work on an Arduino ESP32. To make the project Arduino compatible was easy: I just had to add library.properties and change the Readme.md to add the instructions. Running the code on the ESP32 however turned out to be not so easy: the sketches were crashing w/o any Read more…

Audio Streaming – The Opus Codec

Codecs play an important role in audio streaming, as we have seen in one of my last blogs. I have spent some time to make the Opus Codec available as Arduino Library and I am providing some simple integration from my Arduino Audio Tools library. Opus is a codec for interactive speech and audio transmission over the Internet. Opus can handle a wide range of interactive audio applications, including Voice over IP, videoconferencing, in-game chat, Read more…

Arduino ESP32 Audio Streaming with RTSP!

Recently I discovered the Micro-RTSP-Audio Project from Thomas Pfitzinger which is based on Micro-RTSP from Kevin Hester. The Real Time Streaming Protocol (RTSP) is an application-level network communication system that transfers real-time data from multimedia to an endpoint device by communicating directly with the server streaming the data. I tried to adapt the library to make sure that it is also compiling in Arduino and converted the example to comply with the Arduino conventions. However Read more…

Arduino Low Latency Streaming of Audio Data – Codecs

As we have seen in my last blog, we will need to use a codec to send and receive the audio data with some proper sampling rate: CD quality e.g. is using 44100. I started to collect some promising low-complexity codecs and converted them to Arduino libraries: sbc lc3 aptx g7.22 gsm codec2 As a the next step I will need to provide some nice integration into my Arduino Audio Tools. Arduino Sketches Detailed Information Read more…

Arduino Low Latency Streaming of Audio Data – Using ESP-Now ?

This blog continues the topic Low Latency Streaming of Audio Data and we have a closer look at ESP-NOW. This is a protocol developed by Espressif, which enables multiple devices to communicate with one another without using Wi-Fi. I was missing a proper implementation that is based on Arduino Streams, so I have added one to my Arduino Audio Tools Library. Here are the related example Arduino sketches: communication-espnow-send communication-espnow-receive communication-espnow-receive_measure When I was doing Read more…

Arduino Low Latency Streaming of Audio Data – Using TCP/IP ?

Introduction Traditional streaming protocols, such as RTSP and RTMP, support low-latency streaming. These are quite complex to implement and I did not find any efficient library which would work properly on a microcontroller e.g. on an ESP32. I tried to migrate the live555 project, but so far I did not manage to have it working properly. We could use Bluetooth with my A2DP library but the lag (of more then half a second) is too Read more…

Using Faust with the Arduino Audio Tools Library

I managed to provide a simple Interface class to use Faust in my Arduino Audio Tools. Faust (Functional Audio Stream) is a functional programming language for sound synthesis and audio processing with a strong focus on the design of synthesizers, musical instruments, audio effects, etc. Faust targets high-performance signal processing applications and audio plug-ins for a variety of platforms and standards. The core component of Faust is its compiler. It allows to “translate” any Faust Read more…

Fast Fourier Transform (FFT) with the Audio Tools Library

The Fast Fourier Transform (FFT) is a mathematical operation that changes the domain (x-axis) of a signal from time to frequency. This is particularly useful for determining the frequency of a signal or for decomposing a signal consisting of multiple frequencies. I had this on my to-do list for quite some time and I finally managed to add this functionality to my Arduino Audio Tools library. Length and Stride The length defines the number of Read more…

Using a ESP32-C3 with my Arduino Audio Tools Library

Today I was testing my Arduino Audio Tools Library with an ESP32-C3 Processor. This is a RISC­ V Single­Core CPU supporting 2.4 GHz Wi­Fi and Bluetooth® 5 (LE). Please note that it does not support classic Bluetooth, so A2DP is not available! First I tried out my simple streams-generator-i2s sketch and there were quite some bad surprises: The Log Level Info is completely disturbing the audio output. This is much worse then on a regular Read more…

Mixing Audio with the Arduino Audio Tools Library

I added some basic simple audio mixing functionality to my Arduino Audio Tools Library where we can mix multiple input audio streams together. Example Sketch We just need to define a Mixer and then add the different input streams that need to be mixed. Optionally we could define a weight parameter to the add method, which we did not do in the example below: #include “AudioTools.h” #include “AudioLibs/AudioKit.h” uint16_t sample_rate=32000; uint8_t channels = 2; SineWaveGenerator<int16_t> Read more…