Text to Speech - mein Mikrocontroller kann sprechen!

Zielsetzung

Die Synthese und Ausgabe von Sprache eröffnet neue Möglichkeiten: Messwerte können hörbar gemacht, Statusmeldungen direkt ausgegeben oder ganze Assistenzfunktionen umgesetzt werden. Gerade bei Mikrocontrollern wie dem ESP8266 oder ESP32 stellt sich dabei jedoch die Frage, wie Sprachausgabe effizient realisiert werden kann, und wie wir mit dem Datenschutz umgehen.

Ziele:
In diesem Tutorial lernen wir zwei unterschiedliche Ansätze kennen. Zum einen die Nutzung eines Cloud-Dienstes wie Google Text-to-Speech (TTS), der besonders natürliche Stimmen liefert, jedoch eine Internetverbindung benötigt. Zum anderen betrachten wir eine vollständig lokale Lösung mit einem kompakten Sprachsynthese-Modell, das direkt auf dem Mikrocontroller läuft und ohne Netzwerk auskommt. Beide Verfahren haben ihre eigenen Stärken und Einsatzgebiete, die wir im Verlauf des Tutorials gegenüberstellen. Abschließend setzen wir das Gelernte praktisch um und entwickeln eine sprechende Temperaturanzeige, die Messwerte automatisch erfasst und akustisch ausgibt.

Theorie

Cloudbasierten Sprachausgabe

Dabei wird der zu sprechende Text vom Mikrocontroller über eine Netzwerkverbindung an einen externen Dienst gesendet. Ein typisches Beispiel ist die Google TTS API. Der Dienst verarbeitet den Text mithilfe leistungsfähiger neuronaler Netze und generiert eine MP3 Audiodatei, die anschließend an das Gerät zurückgesendet, dort gespeichert und dann abgespielt wird. Im Falle der Google-API wird folgende REST-API genutzt: “http://translate.google.com/translate_tts?ie=UTF-8&"q=Mein gewünschter Text&tl=+lang+"&client=tw-ob".

Vorteile cloudbasierter Lösungen:

  • Hohe Sprachqualität: Sehr natürliche, flüssige Stimmen
  • Mehrsprachigkeit: Große Auswahl an Sprachen und Stimmen
  • Geringe lokale Rechenlast: Komplexe Verarbeitung erfolgt in der Cloud

Nachteile cloudbasierter Lösungen:

  • Erfordert Netzwerkstack und ausreichend Speicher für Streaming/Pufferung
  • Abhängigkeit von Internetverbindung: Ohne Netzwerk keine Funktion
  • Latenz: Verzögerung durch Anfrage und Datenübertragung
  • Datenschutz und Sicherheit: Textdaten werden an externe Server gesendet
  • Energieverbrauch: WLAN-Kommunikation erhöht den Strombedarf

Lokale Sprachmodelle

Dabeiwird der Text direkt auf dem Mikrocontroller verarbeitet und die Sprache generiert. Bibliotheken wie ESP8266SAM basieren auf klassischen Sprachsyntheseverfahren (z. B. Formant-Synthese), die vergleichsweise wenig Rechenleistung benötigen.

Vorteile lokaler Lösungen (EDGE):

  • Offline-Fähigkeit: Funktioniert unabhängig vom Netzwerk
  • Geringe Latenz: Sofortige Ausgabe ohne Übertragungszeit
  • Datenschutzfreundlich: Keine Weitergabe von Daten
  • Energieeffizienter: Kein WLAN notwendig

Nachteile lokaler Lösungen:

  • Begrenzte Sprachqualität: Deutlich weniger natürlich (robotischer Klang)
  • Eingeschränkte Flexibilität: Weniger Sprachen und Anpassungsmöglichkeiten
  • Begrenzte Ausdrucksfähigkeit: Intonation und Betonung nur rudimentär

Durchführung

Unsere Audiosignale werden über den internen DAC des ESP32 generiert. Dieser Digital-Analog-Converter hat 8 Bit, d.h. es gibt 256 verschiedene Spannungspegel am Ausgang. Über einen kleinen Verstärker gehen die Signale normalerweise direkt an den internen Buzzer. Dieser kann Analogsignale allerdings nur unzureichend wiedergeben. Deshalb schließen wir über die vorhandenen Lötkontakte einen externen Lautsprecher an. (Achtung: Keinesfalls die Rechtecksignale der Buzzer-Blöckchen auf den Lautsprecher geben. Das Signal kann sehr laut werden, die Ohren schädigen und den Lautsprecher zerstören).  Die Blöckchen für die Sprachausgabe finden wir im Baukasten “BT/Audio”. 

Anschluss Lautsprecher an den Mikrocontroller
Dies Ausgabe unserer Sprachsignale erfolgt als Analogsignal über DAC 1 (GPIO 25) am ESP32. Von dort geht es über einen Verstärker an die externen Klemmen und unseren Lautsprecher.
Programm für lokale Sprachausgabe
Die lokale Sprachsynthese mittels ESP8266SAM erfordert keinen Internetzugang. Alle Daten bleiben lokal. Ein bereits jahrzehnte alter Algorithmus für englische Sprache.
Programm Sprachausgabe über Google TTS API
Über den Internetzugang wird der gewünschte Text an die Google-API gesendet und ein MP3 zurückgeliefert.
Video Sprachausgeba Google TTS

Bitte beachten Sie: Sobald Sie sich das Video ansehen, werden Informationen darüber an VCRP/Panopto übermittelt. Weitere Informationen dazu finden Sie hier.

Anwendung: sprachgestützte Temperaturausgabe
Wie cool wäre es, wenn unser Thermometer sprechen könnte?

Solch eine Anwendung läßt sich mit wenig Aufwand realisieren. Wir messen die Temperatur, runden auf eine Nachkommastelle und übergeben den Messwert zusammen mit etwas Erklärungstext an die Sprachausgabe. Über den Drehencoder lässt sogar sich die Lautstärke anpassen. Die deutsche Version spricht über das cloudgestützte Text to Speech - API von Google, die englische Version nutzt die energieeffizientere lokale Sprachsynthese. Dabei lernt Google natürlich die Temperaturen in unserem Raum kennen - aus Datenschutzgründen also mit Bedacht einzusetzen.

Programm zur lokalen Sprachsynthese
Ausgabe des englischsprachigen Textes mit lokalem Modell
Programm Sprachausgabe über Google TTS
Die deutsche Version nutzt Google TTS
Video sprachgestützte Temperaturausgabe

Bitte beachten Sie: Sobald Sie sich das Video ansehen, werden Informationen darüber an VCRP/Panopto übermittelt. Weitere Informationen dazu finden Sie hier.

Video sprachestützte Temperaturausgabe

Bitte beachten Sie: Sobald Sie sich das Video ansehen, werden Informationen darüber an VCRP/Panopto übermittelt. Weitere Informationen dazu finden Sie hier.

Fazit

Die Wahl des geeigneten Verfahrens hängt stark vom Anwendungskontext ab:

  • Cloudlösungen eignen sich besonders für Anwendungen, bei denen eine hohe Sprachqualität und Mehrsprachigkeit im Vordergrund stehen (z. B. Assistenzsysteme).
  • Lokale Verfahren sind ideal für ressourcenbeschränkte, energieeffiziente oder datensensible IoT-Anwendungen, bei denen einfache Sprachausgabe ausreichend ist.
back-to-top nach oben