ESpeak and MBROLA ?

MBROLA is a speech synthesizer based on the concatenation of diphones. It takes a list of phonemes as input, together with prosodic information (duration of phonemes and a piecewise linear description of pitch), and produces speech samples on 16 bits (linear), at the sampling frequency of the diphone database. Today I was playing around with MBROLA and was impressed by the quality of the speech. ESpeak provides an integration into the MBROLA speech synthesizer, so Read more

ESpeak-NG for Arduino: Setting the Voice

It was quite a challenge to convert eSpeak NG to an Arduino Library. In the meantime I managed to publish a first round of error corrections. The eSpeak NG is a compact open source software text-to-speech synthesizer for Linux, Windows, Android and other operating systems. It supports more than 100 languages and accents. It is based on the eSpeak engine created by Jonathan Duddington. For each language (=voice) you can also set a voice variant Read more

Text to Speech for more then 100 Languages on an Arduino

It was quite a challenge to convert eSpeak NG to an Arduino Library. The eSpeak NG is a compact open source software text-to-speech synthesizer for Linux, Windows, Android and other operating systems. It supports more than 100 languages and accents. It is based on the eSpeak engine created by Jonathan Duddington. Language Specific Configuration Files Using a foreign language is quite easy: You just need to load the language dependent files and set the corresponding Read more

ESpeak-NG: The difficult journey to an Arduino Library

I converted eSpeak NG to an Arduino Library. The eSpeak NG is a compact open source software text-to-speech synthesizer for Linux, Windows, Android and other operating systems. It supports more than 100 languages and accents. It is based on the eSpeak engine created by Jonathan Duddington. eSpeak NG uses a “formant synthesis” method. This allows many languages to be provided in a small size. The speech is clear, and can be used at high speeds, Read more

FreeRTOS-addons a C++ API on Arduino

Standard FreeRTOS uses C based API. However I prefer to have some lean C++ abstractions. That’s when I discovered the freertos-addons project from Michael Becker. I have converted it to an Arduino Library, so that it can be used e.g. on an ESP32. I also added a new Task class (which is a subclass of Thread) that allows to pass a function pointer in the constructor. For the ESP32 we support the xTaskCreatePinnedToCore() method by Read more

Guitar Effects Controlled By A Web GUI

Quite some time ago, I have demonstrated how to build some Guitar Effects with my Arduino Audio Tools. In the last couple of blogs, I showed how to build an interactive web dialog with my TinyHttp library. Finally it is time to put the two approaches together into one single sketch to build some Audio Effects that can be controlled via a html screen. I am using an AudioKit to simplify the hardware setup. The Read more

TinyHttp – Storing Html on an External Server

In my last Blog, I was showing how we can process html forms with the Arduino TinyHttp library. In the examples we were embedding the html into the source code. Sometimes however it is more convenient to store the html as files on a dedicated server: In the following examples we use Github for this. Forwarding In this example we just forward to an external URL. static Url forward_url(“https://pschatzmann.github.io/TinyHttp/app/webservice-example.html”); server.on(“/”,GET, forward_url); This external html page Read more

TinyHttp – A simple Html Form & Using Ajax

Today I was playing around with my TinyHttp project: I was investigating how I can drive multiple parameters of a guitar effects sketch by using a web dialog. To provide some information via html is simple. It gets a little bit more complicated if we want to support Html Forms, so I decided to extend the project a bit and provide some examples. A Simple Form Example Here is the link to the source code Read more

Arduino STM32 – Fast PWM Audio Output

I was measuring the speed of the analogWrite() on an STM32 Black Pill on some PWM pins and I was getting a result of around 48697 samples per second. This is enough for one line of hifi data: but I wanted to provide at least 4 channels! This is not good enough: so I generated some new code with 4 PWM output pins using the STMCubeIDE and measured how many duty cycle updates we can Read more