Autoren: Lucas Kirsebauer, Jan Neumann
Sprachsythese, künstlich erzeugte Sprache, hat sich im Alltag als elementarer Bestandteil moderner Navigationssysteme, als Feature in KI-Tools oder als Durchsage im öffentlichen Nahverkehr, weit verbreitet.
Wenn z.B., wie bei Haltestellen einer Buslinie, die zu sprechenden Nachrichten im Vorfeld bekannt sind empfiehlt es sich, voraufgenommene Tonsequenzen der Nachrichten anzufertigen und diese – wie vom Tonbandgerät – einfach abzuspielen. Etwas mehr Flexibilität bietet die Talkie Bibliothek für Arduino kompatible Mikrocontroller. Diese kann über 1000 abgespeicherte Wörter wiedergeben (abgespeichert über Linear Predictive Coding). Weit verbreitet in der Anwendung ist heute auch per künstlicher Intelligenz erzeugte Sprache, die kaum noch von der Natürlichen zu unterscheiden ist. Eine solche Umsetzung braucht entweder eine hohe Rechenkapazität (z.B. Raspberry Pi mit Piper TTS) oder eine ständige Verbindung zu einem Server.

Sollen auch nicht deterministische Nachrichten mit begrenzter lokaler Rechenkapazität, also bewusst ohne Cloud Anbindung erfolgen, ist momentan keine der bisher geschilderten Techniken umsetzbar.
Als Lösung für dieses Problem bietet sich die Konkatenative Sprachsynthese an (konkatenativ ↔ zusammenketten). Als Basis dienen bei dieser Synthese aufgenommene Tonsequenzen. Bei dieser Methode werden jedoch nicht mehr ganze Sätze oder Wörter aufgenommen, sondern die einzelnen Tonsequenzen werden so kurz gewählt, dass aus Ihnen jede Lautkombination einer Sprache erstellt werden kann. Verfügt man über die Aufnahmen der einzelnen Laute, die das Wort „Palme“ bilden, kann eine Konkatenative Synthese dann auch die Worte „Lampe“ oder „Ampel“ synthetisieren.

Zur Wiedergabe eines jeden denkbaren Worts einer Sprache, muss auch jeder Laut dieser Sprache zuvor aufgezeichnet werden. Die kürzesten Laute, die über die Bedeutung des gesprochen Wortes entscheiden, sind die Phoneme einer Sprache. Im Deutschen gibt es ca. 40 Phoneme. Die Konkatenative Sprachsythese nutzt diese Phoneme als Möglichkeit beliebige Worte zu erzeugen. Sprachsynthesen in den 1980ern basierten auf dieser Kombination von Phonemen (z.B. ATARI Voice Box). In den 2000 Jahren wurde diese Methode zur Diphonsynthese weiterentwickelt (z.B. The MBROLA Project). Bei dieser Technik werden nicht Phoneme, sondern Phonemüber-gänge kombiniert. Damit steigt jedoch die benötigte Anzahl an Sequenzen deutlich.
Innerhalb des Moduls „Entwurf Digitaler Systeme“ hat sich eine Studentengruppe als selbstgestecktes Projekt-Ziel die Erstellung eines Proof of Concept einer Konkatenative Sprachsynthese auf Basis von Phonemen gesetzt. Mit der Hardwarebeschreibungs-sprache VHDL wird dies auf einem FPGA umgesetzt. Die konzipierte Hardwarebeschreibung bietet die Möglichkeit, die Sprachsynthese später auf eine Diphonsynthese auszubauen.
Aufbauend auf ein anderes Entwicklungsprojekt des Labors für angewandte Kommunikationstechnik, IC-Entwurf und digitale Signalverarbeitung – den Morse De- und Encoder – kann die neu entwickelte Lösung Nachrichten von Morsecode in gesprochene Sprache umwandeln. Audioaufnahmen der einzelnen Phoneme des Deutschen werden aufgezeichnet und mit dem PC-Programm Audacity bearbeitet. Die Anzahl und Art der Phoneme orientiert sich an denen in Quelle [1] genannten, zuzüglich der Tonsegmente für die Buchstaben x, y, z.

Verwendet wird das DE2-115 Entwicklungsboard von Terasic, das mit einem Cyclone IV FPGA ausgestattet ist. U.a. bietet dieses Board einen 8 Mbyte großen Flash-Speicher sowie den Audiocodec WM8731. Der Audiocodec ist an die Audiobuchsen „Line In“, „Line Out“ und „Mic In“ angeschlossen. Die benötigten Audiosampels der einzelnen Phoneme werden in den Flash Speicher abgelegt, die Audiowidergabe des Codecs auf 32 kHz und 16-Bit Auflösung eingestellt. Bei diesen Einstellungen ist der Flash-Speicher in der Lage Tonsignale für etwa zwei Minuten Widergabe abzuspeichern, dies reicht für die beötigten Phoneme gut aus. Die Tondateien werden über das – von Terasic bereitgestellte – PC-Programm DE2_115_ControlPanel vom PC aus in den Speicher geschrieben und später während der Sprachsynthese vom FPGA ausgelesen.

Kernfunktion des Morse De- und Encoder ist die Umwandlung eines gemorsten Zeichens in das zugehörige ASCII-Zeichen. Ursprünglich wurden diese Zeichen zur Anzeige von Nachrichten auf einem VGA-Monitor verwendet. Im aktuellen Projekt werden die ASCII-Daten zusätzlich in einem FIFO-Speicher abgelegt. Dieser dient dazu, die Geschwindigkeit der Morse-Eingabe von Geschwindigkeit der Sprachsynthese zu entkoppeln. Wurde ein ganzes Wort bzw. eine Nachricht gemorst wird die Sprach-synthese manuell oder automatisch ausgelöst und das Modul „Number Filter“ ersetzt zunächst alle Ziffern durch das jeweilige Zahlen-Wort. Steht in den ASCII Daten z.B. die Nachricht „12 Tage“ so schickt der „Number Filter“ an seinem Ausgang die Nachricht „EINS ZWEI Tage“. Das Modul „phonem_buffer“ liest kontinuierlich ASCII-Bytes in einen Puffer ein. Da ein Phonem auch aus mehreren Buchstaben bestehen kann wird der Puffer analysiert, um diese spezifischen Buchstaben-Kombinationen zu identifizieren. Beispiele für 2er-Kombinationen sind „au“ und für 3er-Kombinationen „sch“. Jedem identifizierten Phonem wird ein „Token“ vergeben. Abschließend leitet das Modul diese erzeugten „Token“ nacheinander zur weiteren Verarbeitung an das Modul „ascii_to_address“ weiter. Dieses gibt an seinen Ausgängen für jedes Phonem / „Token“, die Start- bzw. Endadresse des für das Phonem passenden Speicherbereich im Flash-Speicher an und startet den „adressUpCounter“. Dieser Zähler zählt von der ersten Adresse eines Phonems bis zur letzten Adresse. Die momentane Adresse wird an das Modul „Flash_Read_16Bit“ übergeben, das aus dem Flash-Speicher das jeweils an der Adresse stehende 16Bit AudioSample aus dem FLASH liest. Da der Flash eine Speicherbreite von 8 Bit hat, muss in diesem Modul aus zwei aufeinanderfolgenden Speicherzellen ein 16 Bit Audiosample ausgelesen werden. Das Modul „Audio-Codec“ steuert den Wolfson WM8731 Audio-Codec, der die Audio-Samples mit einer Abtastrate von 32 kHz wiedergibt. Der Start einer Sprachsynthese kann wahlweise manuell durch den Druckknopf KEY3 auf dem Entwicklungsboard oder automatisch durch den „SpaceDetector“ erfolgen. Ist der Schalter SW6 auf dem Entwicklungsboard umgelegt, sucht der „SpaceDetector“ nach einem Leerzeichen in dem in ASCII-Zeichen gewandelten Morsecode. Ein Leerzeichen entspricht einer Pause im Morsesignal, wie es am Ende eines Wortes auftritt.

Quellen
[1] R. Wiese, Phonetik und Phonologie, 1. Auflage. in UTB Sprachwissenschaft, no. 3354. Paderborn: Wilhelm Fink, 2011.

