Ergebnis 1 bis 6 von 6

Thema: KI: Sprachsynthese

  1. #1

    Users Awaiting Email Confirmation

    KI: Sprachsynthese

    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 [FONT="Courier New"]synthesizer.speakPlainText("Hello world!", null);[/FONT] 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

  2. #2
    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 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. Du könntest dir auch mal MBROLA ansehen.

  3. #3

    Users Awaiting Email Confirmation

    Zitat Zitat
    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.

    Zitat Zitat
    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...

    Geändert von Teelicht (26.02.2006 um 00:43 Uhr)

  4. #4
    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. Es gibt das exzellent funktionierende SubEthaEdit, aber das läuft nur auf OS X. MoonEdit läuft zwar auf dieversen Plattformen, das aber nicht besonders gut. Gobby klingt nach einem guten Ansatz, ist aber noch nicht mal im Betastadium. ACE 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.

  5. #5

    Users Awaiting Email Confirmation

    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 ) Zumindest braucht mein Sun Studio Enterprice 8, das ja in Java geschriebne wurde, immer ewig, bis es endlich geöffnet ist.

  6. #6
    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 und eine portable Netzwerkbibliothek (SDL_net? Auf dem Gebiet habe ich gar keine Ahnung...).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •