Text to Speech (TTS) ohne DLL - Es ist möglich mittels vbs

    • Skript

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Text to Speech (TTS) ohne DLL - Es ist möglich mittels vbs

      Das Thema Text to Speech mit dem Gamemaker ist immernoch nicht geklärt.
      War man lange auf der Suche nach einer DLL oder versuchte sich selber an einer TTS Software.
      Doch Dank der eingebauten "Visual Basic Script" von Windows ist das jetzt über die eingebaute Sprachausgabeoption von Windows möglich.

      Momentan hat bestimmt jeder von euch diese Trantüte "Microsoft SAM". Alle die eine englische Sprachausgabe wollen, sollten ihn auch behalten.
      Doch diejenigen die eine deutsche Sprachausgabe wollen, können sich die deutsche Stimme Steffi herunterladen.
      Und da diese Stimme relativ schwer zu finden ist ... hier ist der Link RSSolo4GermanSteffi.exe (download)
      Diese Stimme kann zwar nicht zum vorlesen von Desktopereignissen einstellen, ist aber für unsere Zwecke perfekt.

      Einsatz im Gamemaker
      Als erstes erstellen wir ein Script im Stammbaum des Gamemakers namens say_text mit folgendem Inhalt:

      Quellcode

      1. {
      2. var Data;
      3. Data = file_text_open_write(temp_directory+"/"+"speech.vbs")
      4. file_text_write_string(Data,'Set d=CreateObject("SAPI.SpVoice")')
      5. file_text_writeln(Data)
      6. file_text_write_string(Data,'Set d.Voice=d.GetVoices("Name=ScanSoft Steffi_Dri40_16kHz").Item(0)')
      7. file_text_writeln(Data)
      8. file_text_write_string(Data,'d.Speak "'+argument0+'"')
      9. file_text_close(Data)
      10. execute_shell(temp_directory+"/"+"speech.vbs","")
      11. }
      Alles anzeigen

      Der Gamemaker wird dann eine Datei im Temp Ordner anlegen.
      Und weil wir unser Geheimnis niemandem verraten möchten ^^, und um Müll zu vermeiden, wollen wir diese beim beenden eures Spieles oder Programmes wieder löschen. Dazu erstellen wir folgenden Script namens say_delete:

      Quellcode

      1. {
      2. file_delete(temp_directory+"/"+"speech.vbs")
      3. }


      So fertig! :D
      Jetzt müssen wir nurnoch den Script ausführen indem wir irgendwo folgende Zeile aufrufen:

      Quellcode

      1. Satz = "Hallo und Willkommen. Ich bin die deutsche Stimme Steffi!"
      2. say_text(Satz)

      "Satz" ist eine Variable, klar. Das lässt einfach mehr Freiheit. Man könnte aber auch nur say_text("Servus") ausführen.

      Und so sieht dann die VBS aus:

      Quellcode

      1. Set d=CreateObject("SAPI.SpVoice")
      2. Set d.Voice=d.GetVoices("Name=ScanSoft Steffi_Dri40_16kHz").Item(0)
      3. d.Speak "Hallo und Willkommen. Ich bin die deutsche Stimme Steffi!"

      Wer MS SAM haben möchte, der muss nur den Text "ScanSoft Steffi_Dri40_16kHz" zu "Microsoft Sam" ändern.

      Im Game_end Event des Gamemakers sollte man den Script "say_delete" ausführen.
      Wichtig ist auch, dass man diese Funktion nicht im Step oder draw ausführt. Das könnte sonst zu Problemen führen. Einfach warten bis Steffi ausgeredet hat. > Eine Funktion zum unterbrechen des aktuell gesprochenen Textes kenne ich noch nicht.

      Noch Fragen?

      Wer zu faul ist die Codezeilen zu kopieren ... hier das Example:
      Dateien
      • tts.zip

        (1,91 kB, 626 mal heruntergeladen, zuletzt: )
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DanielGM61 ()

    • Wahrscheinlich kommt gleich irgendso ein Kenner und macht mich fertig, aber irgendwie funktioniert das nicht bei mir.
      Jedesmal kommt so eine Fehlermeldung.
      Da steht dann z.B.:
      Script:....
      Zeile:...
      Und soweiter.
      Liegt es vielleicht an Vista?! Oder daran, dass ich keine Pro habe? ?(
      Oder ich bin einfach zu dumm. :pinch:
    • Also das erste bei Fehlermeldungen, zumindest bis 8 Zeilen, solltest du immer ausfühlich hier angeben.
      Zweitens wurde es noch nicht in Windows Vista getestet. Wer hat das schon ;) ^^
      Drittens: DU BRAUCHST AUCH DIE DEUTSCHE STIMME STEFFI. ODER DU ÄNDERST DEN SCRIPT ZU Microsoft Sam.
      Oben steht der Link zu Steffi.
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20
    • Muss ich es noch kleiner vorkauen?
      Die folgende Zeile im Script "say_text" für den Sam wird zu:

      Quellcode

      1. file_text_write_string(Data,'Set d.Voice=d.GetVoices("Name=Microsoft Sam").Item(0)')
      Anderseits einfach die schöne Steffi downloaden. Ihr müsst die ja nicht von diesem Filehoster downloaden. Aber außer Qshare haben die meisten Filehoster ein Speedlimit eingrichtet. Und was sind schon 21 MB.
      Außerdem sind es bis zu 100KB/s und dauert demnach nur 5 Minuten.
      Man kann es niemandem Recht machen. Einfach mal genauer lesen.
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20
    • Wer sagt was von dumm? Es scheint also tatsächlich nicht unter Vista zu funktionieren. Ich habe es unter XP getestet.
      boxxar was meinst du genau mit der Sicherheitslücke?

      Schade das es demnach nicht bei Vista funktioniert.
      Hat jemand ne Lösung?
      Wie sieht es denn unter Vista aus?
      Ist es nicht gleich wie bei XP unter Systemsteuerung?
      Da heißt die Standardstimme doch auch "Microsoft Sam", oder? Wenn er jetzt "MS Sam" heißt muss man halt "MS Sam" im Skript einfügen.
      Aber ich vermute das Vista das ausführen von vbs verhindert. Eine Sicherheitsfrage. Vista ist sowieso ein scheuer Hase.
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von DanielGM61 ()

    • So kommen wir doch schon eher voran. *hust*

      Also die Stimme heißt (bei mir zumindest) unter Vista "Microsoft Anna". Dann funktioniert das Skript auch...allerdings sehe ich darin überhaupt keine Verwendungsmöglichkeiten.


      Aber ich vermute das Vista das ausführen von vbs verhindert. Eine Sicherheitsfrage. Vista ist sowieso ein scheuer Hase.


      Aha, interesant zu Wissen. Mal eine ehrliche Frage: Hast du überhaupt eine Ahnung vom Windows Vista? Nein?
    • Vista? Ne, merkt man das :D. Ich hatte es mal kurz, aber das wars auch schon. Freu mich schon auf Win7.
      @boxxar: Genau, sowas ähnliches dachte ich auch schon, hier.
      Deshalb nicht für Onlinespiele gedacht.
      Aber auch andere die diese Funktion im Gamemaker einbauen, könnten verschidene vbs ausführen.
      Ich finde es eigentlich doch komisch, dass Windows (XP) es zulässt dass im Hintergrund einfach zu mal ein VBS ausgeführt wird.
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20
    • Angenommen man würde folgendes machen:

      GML-Quellcode

      1. Satz = 'Hallo und Willkommen. Ich mache jetzt ganz schlimme Sachen mit vbs :3"
      2. [[ Hier kann ich jetzt alles machen was ich will, zum Beispiel deine Festplatte formatieren >:) ]]
      3. MsgBox "WUHAHA!!'
      4. say_text(Satz)

      Dann steht in der Datei:

      Quellcode

      1. Set d=CreateObject("SAPI.SpVoice")
      2. Set d.Voice=d.GetVoices("Name=ScanSoft Steffi_Dri40_16kHz").Item(0)
      3. d.Speak "Hallo und Willkommen. Ich mache jetzt ganz schlimme Sachen mit deinem PC :3"
      4. [[ Hier kann ich jetzt alles machen was ich will, zum Beispiel deine Festplatte formatieren >:) ]]
      5. MsgBox "WUHAHA!!"
    • @copyboy: Bei mir funktioniert das jetzt nicht. Wie/Wo genau füngst du das ein? Es muss ja nur ein string sein. zB. get_string('','');

      Was kann man überhaupt alles mit vbs? HDD formatieren?

      Wenn ja, dann sollten wir hier eine Lösung finden, um dieses Sicherheitloch zu stopfen.
      Ich meine:
      Gibt es eine Möglichkeit in Windows das ausführen von vbs zu verhindern?
      >>> Ach klar, mir fällt da auch gerade was ein:
      Man könnte doch einfach der Erweiterung *.vbs das ausführen verhindern.
      Indem wir unter Explorer > Extras > Ordneroptionien > Datentype > vbs >> löscht.
      Aber ob das eine Lösung ist? Immerhin könnte eine GM-EXE diesen Eintrag in wieder in die Registry schreiben.

      Aber ein aufwändiges Programm am laufen zu lassen, das das ausfühen verhindert, möchte ich auch nicht.

      Wenn nur das oben genannte eine Sicherheitslücke ist, dann kann man diese ja auch ganz leicht lösen wenn man einen Filter in der GM-Exe einbaut. Mit online Spiele mittels Gamemaker kenne ich mich zwar nicht so genau aus, aber wenn jetzt ein Mitspieler etwas sagen will damit es an deinem PC gesprochen wird, sollte der Text nicht erst zu vbs gewandelt werden und zum direkten ausführen auf deinem Rechner gestartet werden.
      Sondern sodass der gesammte Text erst geprüft wird und convertiert wird. Vielleicht nur letters und digitale Zahlen in Buchstaben umwandeln. Und Klammern und derartige Sonderzeichen verbieten.
      Nur mal eine Überlegung.
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DanielGM61 ()

    • Öhm... ich weiß nicht, was ihr mit Sicherheitslücke bei dem System mit VBS meint...
      Immerhin kann man auch mit dem GM selbst beliebige Programme starten und Shell Kommandos absetzen, Registry Keys und Dateien ändern etc.

      Wenn es um Benutzereingaben geht musst du eben unbedingt vor dem Schreiben der VBS die Anführungszeichen ändern. Ansonsten tritt bei einem Onlinespiel das Szenario von boxxar ein - wie bereits er gesagt hat, kann dann jeder Mitspieler auf deinem Rechner beliebigen VBS Code ausführen.

      Aber Prinzipiell ist VBS nicht gefährlicher als jede beliebige Exe aus dubioser Quelle... eher im Gegenteil. Die Exe kann mehr, also auch differenzierteren Schaden anrichten.
      "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
      - Joseph Weizenbaum
    • Jep, hast eigentlich auch wieder recht Windapple.
      Sobald man ua. eine "fremde" EXE startet, kann es immer sein dass was passiert.
      Mit dem Gamemaker kann man schon einen großen Schaden anrichten. Selbst ohne DLL oder sonstige externe Scripts.

      Ihr wolltet eine TTS Sprachausgabe und ich hab sie euch gegeben.
      Soweit gibt es keine Sicherheitslücken. Man muss es nur richtig einsetzen (wie Bsp. oben; Filter).
      Das einzigste was mich jetzt noch stört ist dass, wenn zuviele Scripte ausgeführt werden, dass Sprachprogramm, oder vielmehr die VBS einen Fehler zurückgibt.
      Gibt es keine Funktion um die Sprachausgabe komplett zu stoppen? Windapple du kennst dich doch aus.
      Es gibt soweit ich weiß eine Pause-Funktion. Aber die Sprachausgabe ist dann bestimmt immernoch belegt.
      Und außerdem kann man es nicht in einem 2. Script (vbs) ausführen.
      Also ein Script für ein Text der gesprochen werden soll.
      Und einen der dem System sagt: "Stop".
      57 6F 77 2C 20 64 61 73 20 68 61 73 74 20 64 75 20 67 61 6E 7A 20 61 6C 6C 65 69 6E 20 67 65 73 63 68 61 66 66 74 2E 20