Spracherzeugung aus Audiosampels geschrieben am 11.09.2016
Dies ist ein Versuch Texte "on the fly" vorlesen zu lassen.
Idee
Irgendwo habe ich aufgeschnappt das die Sprache aus Phoneme besteht. Also man spricht nicht in Buchstaben sondern in Lauten. Wenn man nun das Set aus Lauten nimmt, könnte man doch damit wieder ganze Sätze erzeugen.
Vorgehen
Als erstes habe ich mir die Liste der Phoneme auf de.wiktionary.org/../Phoneme_und_Grapheme angesehen. Die Liste der Phoneme dient mir als Vorlage für die zu erzeugenden Audiosampels. Dazu habe ich aus den dort enthaltenen Beispielwörtern Sätze gebildet:
Ein *Tier in der *Mitte der *Sonne ist *Reis auf.
Die *Band ist im *Rhythmus der Musik.
Die *Malerei ist *hell oder dunkel.
Auf dem *Bett ist *Physik *gewiss der *Beginn einer *Brücke über alles.
Im *Raum herrscht *Ebbe und der *Fisch *oder der *Adler sehen zu.
Die *Bauten im *Zoo haben ein *Rad aus *Pappe auf dem Dach.
In der *Prüfung *kommen *Wald, *Mutter und *Pferd auf einen *Barzar nicht vor.
Die *Freiheit ist *nie *zufällig wie *Schnee aber weiß.
Ein *Hut vom *Pirat über dessen *Mähne sitzt.
Ein großen *Schuh, der *Clown am Fuße hat.
Fliegt der *Müll im hohen *Bogen die *Brüder wussten nichts.
Doch ein *Loch wo *Häuser den *Fuchs einen *Kaffee anbieten.
Oh wie *schön ist *Spanien im *Dirndl in diesem *Jahr zu sehen.
Das kleine *Instrument passt ins *Auto genau.
Aber *geben wir den *zwölf einen *Topf anbei,
so ist auf dem *Berg keine *Qualle zu sehen.
Die *Synode der *Familie besteht.
In der *Reihe steht ein *Beamter wie jeder andere auch.
Die Sätze sind schon fast philosophisch :-o
Die Sternchen markieren die Worte aus denen ich die Sampels geschnitten habe.
Warum habe ich Sätze gebildet?
Wenn ich die Worte in Sätze einarbeite, ist eine neutrales Ergebnis möglich.
Audioarbeit
Ich habe mit einem Olympus LS-5 die oben genannten Sätze mehrmals eingesprochen. Mehrmals um erstmal die Stimme warm zu reden und zum zweiten genug Material zu haben. Nach zirka 10 Versuchen war ich zufrieden und habe die letzten zwei Aufnahmen weiter verarbeitet. Mit Audacity die Phoneme herraus geschnitten:
Ich habe sie im Abstand von 0.5 Sekunden in eine neue Datei abgelegt.
programmieren
Da das ganze im Webbrowser laufen soll, habe ich Javascript und das Audiotag vom HTML5 benutzt.
Im ersten Schritt habe ich den eingegebenen Text nach der Tabelle auf die Phoneme umgemappt:
In der unteren Zeile kann das gemappte Ergebnis sehen.
Abspieltechnik
Im ersten Anlauf benutze ich die Scrubbing-Technik. Dazu lade ich meine Sampels, die in einer Datei gespeichert sind, in ein Audioelement. Die Stelle wo das Phonem liegt wird angesprungen und abgespielt. Dann das nächste, dann das nächste... und man sollte einen gesprochenen Satz hören.
Auf das Script gehe ich hier nicht näher ein. (download Version 0.1: projekt_sprache.zip 472.69kb)
ausprobieren (Version 1)
Nun wie jeder hören kann, funktioniert es mehr oder weniger gut. Zu einem muss die Übersetzung vom Wort zum Phonem noch optimiert werden, und zum anderen sind eventuell noch Varianten nötig.
TODO/Was noch zu tun wäre
Die Scrubbing funktioniert zwar, aber es könnte flüssiger sein. Momentan geht zu viel Zeit beim umher springen verloren. Deshalb ist der nächste Schritt dynamisch eine Audiodatei zu erzeugen und dann abzuspielen.
Auch werden nicht immer das richtige Phonem benutzt - für einige Buchstaben (oder Kombinationen) gibt es mehrere Möglichkeiten. Z.B. das ch in "ich" und "auch" werden unterschiedlich ausgesprochen.
neue Version [19.9.2016]
Jetzt sind die Phonem-Filter verbessert und das Audio wird jetzt per AudioContext erstellt und abgespielt.
neue Version [20.9.2016]
Nummern in Worte sind möglich ("3in1"). Unbekannte Zeichen werden überlesen (führte in der alten Version zu einer Endlosschleife).
neue Version [24.9.2016]
Läuft jetzt auch unter iOS - detune steht dort nicht zur Verfügung und das muss berücksichtigt werden.
Weiter kann man jetzt die Sampels überlappen lassen, damit wird die Ausgabe noch etwas flüssiger.
download
Wer Interesse hat kann das aktuelle Projekt auf github finden und laden.