Archiv verlassen und diese Seite im Standarddesign anzeigen : KI: Sprachsynthese
Teelicht
25.02.2006, 15:37
Wo gibt es den Informationen zu Sprachsynthese? Wie kann ich sowas programmieren?
Es gibt dafür ja sogar API's, aber eigentlich wollte ich nicht einfach wie in FreeTTS synthesizer.speakPlainText("Hello world!", null); schreiben und fertig sein (und dafür trotzdem 177 Zeilen brauchen!), sondern wirklich den Text in Sprache umwandeln, unter Anwendung künstlicher Intelligenz!
Ist das überhaupt realistisch? Als Schüler eine Sprachsynthese ohne zu oberflächliche API? Gehts wenigstens auf einer klein wenig tieferen Ebene als einfach so ne Funktion wie oben? Wie sieht das z.B. auf der "Ebene" der Java Speech API aus? Muss man da mehr tun als bei FreeTTS? (Glaub zwar net, weil die Ansprache von FreeTTS angeblich über JSAPI läuft, aber besser mal gefragt)
Und wenn ich wirklich eine API brauche: Welche empfehlt ihr? Am liebsten wären mir Empfehlungen zu C++ UND Java. Obwohl man in Google ein wenig findet, halten sich die Funde doch sehr in Grenzen...
Vielen Dank für alle Hinweise, Tipps und so weiter
Micha
Jesus_666
25.02.2006, 17:51
Sprachsynthese ist ATM eins der heißen Forschungsthemen in der Informatik und Unternehmen geben Millionen aus, um eine halbwegs realistische Synthese hinzukriegen. Die Mathoden, die verwendet werden reichen von einer simplen Aneinanderreichung vorgegebener Silben bis hin zu aufwendigen physikalischen Simulationen, die den Luftstrom im Kehlkopf- und Mundbereich nachbilden sollen.
Wenn du etwas derartiges schreiben möchtest hast du einige Möglichkeiten:
1.) Du baust dir vor Grund auf etwas neues. Am Besten liest du dich in entsprechende Fachliteratur (zu Themen der Informatik und Linguistik, für gewöhnlich auf englisch) ein und versuchst, die dort beschriebenen Algorithmen zu implementieren.
2.) Du lädst dir ein fertiges Open Source-Programm wie Festival (http://www.cstr.ed.ac.uk/projects/festival/) runter, liest dich in den Quelltext und die entsprechende Fachliteratur ein und versuchtst, darauf etwas neues aufzubauen.
3.) Du verschaffst dir einen Überblick über die verwendeten Methoden und implementierst die einfachste. Das gibt zwar ein suboptimales Ergebnis, erspart es dir aber, dich intensiv mit gewissen Themenkomplexen auseinandersetzen zu müssen.
Letztendlich läuft es immer darauf hinaus, daß du einen Parser schreibst, der die verwendeten Silben erkennt oder sogar noch tiefer geht und einzelne Phoneme identifiziert (die dann natürlich miteinander in Bezug gesetzt werden müssen) und daran eine Engine ankoppelst, die irgendwie aus dem Strom identifizierter Silben/Phoneme (nennen wir sie Token, denn genau das sind sie jetzt) einen zusammenhängenden Tonstream erzeugt - im einfachsten Fall, indem du ale möglichen Silben aufnimmst und einfach die Aufnahmen entsprechend den im Input erkannten Token hintereinanderschneidest.
BTW, was willst du noch groß tiefer gehen als in der von dir gezeigten Funktion? Du könntest allenfalls mit einer Funktion den Parser einen Strom von Token zurückgeben lassen, den du dann an eine andere Funktion fütterst, aber dieser Tokenstrom ist für sich gesehen nur dazu zu gebrauchen, an diese eine Funktion weitergegeben zu werden...
Was die Empfehlung angeht: Ich weiß nicht, ob Festival mit Java läuft und wie es allgemein mit dem Einbinden aussieht. Es gibt noch eine kleinere Version namens flite (http://www.speech.cs.cmu.edu/flite/index.html). Du könntest dir auch mal MBROLA (http://tcts.fpms.ac.be/synthesis/mbrola.html) ansehen.
Teelicht
26.02.2006, 00:37
Sprachsynthese ist ATM eins der heißen Forschungsthemen in der Informatik und Unternehmen geben Millionen aus, um eine halbwegs realistische Synthese hinzukriegen.
Genau das ist der Reiz an dem Ganzen. Ich mache etwas, was es nicht schon zum abwinken gibt! Ich mache etwas, wo sich selbst "die Großen" den Kopf zerbrechen. Natürlich ist die Qualität nicht annähernd vergleichbar und durch die Nutzung einer fertigen API ist es natürlich lächerlich einfach im Vergleich mit den Profis, aber es ist trotzdem spannender, als einen weiteren Texteditor oder von mir aus auch Textverarbeitungsprogramm zu schreiben. So Sachen gibt es bereits millionenfach und man kann die Großen in Qualität nie erreichen.
Letztendlich läuft es immer darauf hinaus, daß du einen Parser schreibst
oO wenn ich nur eine speakPlainText-Funktion aufrufen muss, brauche ich doch keinen eigenen Parser zu entwickeln, oder? Ich geb der Funktion einfach einen Satz, z.b."Hallo, wie geht es dir heute?" und sie macht den Rest, oder hab ich das falsch verstanden?
Ich denke mal, wenn ich den Parser selbst bauen könnte, wäre das für den Anfang genug, ich bin dann doch nicht so schwarf drauf, auch noch die Tonausgabe zu programmieren, da hast du doch recht ^^ obwohl es natürlich interessant wäre und durchaus eine Überlegung bleibt, ob ich die verwendete API ganz am schluss versuche, durch eigene Funktionen zu ersetzen *fg* aber das kommt, wenn ich mit allem anderen fertig bin
also: muss ich bei der speakPlainText Funktion auch einen eigenen Parser programmieren? ich will schon was tun müssen mit meinem zu lesenden text und ihn nicht einfach einer funktion übergeben brauchen...
Jesus_666
26.02.2006, 01:39
Du willst also im Wesentlichen eine halbfertige API, die du dann vervollständigst? Hm, da kann ich dir nicht weiterhelfen...
BTW, als kleine Anregung: Eine Sache die es wirklich nicht oft gibt und die sehr nützlich ist sind kollaboative Texteditoren (http://de.wikipedia.org/wiki/Kollaborative_Online-Textbearbeitung_in_Echtzeit). Es gibt das exzellent funktionierende SubEthaEdit (http://www.codingmonkeys.de/subethaedit/), aber das läuft nur auf OS X. MoonEdit (http://moonedit.com/) läuft zwar auf dieversen Plattformen, das aber nicht besonders gut. Gobby (http://gobby.0x539.de/) klingt nach einem guten Ansatz, ist aber noch nicht mal im Betastadium. ACE (http://ace.iserver.ch/) verlangt zwingend, daß Bonjour installiert ist.
Wenn man mit mehreren Leuten gleichzeitig eine Datei bearbeiten will sind diese Dinger wahnsinnig nützlich - aber wenn nicht beide User einen Mac benutzen ist es gar nicht so einfach, einen Editor zu finden, der bei beiden läuft und eine Verbindung hinkriegt.
Okay, es ist wie ein Multiplayerspiel nur ohne das Spiel, aber diese Dinger sind einfach verdammt praktisch.
Teelicht
26.02.2006, 11:05
Mh, hört sich interessant an - schwierig, aber interessant. In welcher Sprache würdest du das ganze entwickeln? Java hätte den Vorteil, dass es gleich überall läuft und man so sogar plattformübergreifend zusammenarbeiten kann, C++ hat meinem Gefühl nach zumindest bei großen Anwendungen immernoch einen deutlichen Geschwindigkeitsvorteil (sollte das Programm überhaupt jemals groß werden :rolleyes: ) Zumindest braucht mein Sun Studio Enterprice 8, das ja in Java geschriebne wurde, immer ewig, bis es endlich geöffnet ist.
Jesus_666
26.02.2006, 11:44
Java macht es einfacher, portabel zu schreiben, ist aber langsamer. C++ ist ziemlich schnell, allerdings muß man wirklich darauf achten, nichts betriebssystemspezifisches zu verwenden. Und natürlich unterscheiden die beiden Sprachen sich stilistisch.
Was du verwendest ist deine Entscheidung, gehen tut beides. Wenn du C++ verwendest brauchst du natürlich ein portables GUI-Toolkit wie wxWidgets (http://www.wxwidgets.org/) und eine portable Netzwerkbibliothek (SDL_net? Auf dem Gebiet habe ich gar keine Ahnung...).
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.