Komfortable TTS Ausgabe Funktion

Ist das erledigt?

eine Mediaplayerinstanz für Musik anlegen

eine Mediaplayerinstanz für Sprache/Ton anlegen

eine TTS Instanz anlegen

Mache mal bitte ein Screenshot von Deinem Objektbaum mit den Instanzen und zeige Dein Script.

eine Mediaplayerinstanz für Musik anlegen

eine Mediaplayerinstanz für Sprache/Ton anlegen

eine TTS Instanz anlegen

Hallo Ferengi,

Ja, das war alles schon vorhanden.
Ich habe es gerade noch auf einem 2. PC ausprobiert, mit gleichem Resultat.

Die Variablen sind so definiert:

       $id1_musik_status = 44347 /*[Haus global\Media Player Musik\Status]*/;
        $id1_ton_status = 56496 /*[Haus global\Media Player\Status]*/;
        $id1_musik_vol = 30876 /*[Haus global\Media Player Musik\Lautstärke]*/;
        $sk1 = 46969 /*[Haus global\Media Player Musik]*/;
        $sk1_wav = 44789 /*[Haus global\Media Player]*/;
        $tts_sk1 = 54417 /*[Haus global\Media Player\TTS Stefan]*/;

Ich rufe es so auf:

include "28027.ips.php";
TTS_Play(46969 /*[Haus global\Media Player Musik]*/,"Das ist ein Test","Gitarre04",3);

Ein Screenshot der Instanzen ist angehängt.
Danke für die Hilfe!

Muß bei der TTS Stimme vielleicht irgendwas mit dem Mediaplayer verknüpft werden? Mit TTS Speak/Generatefile habe ich jedenfalls keine Probleme.

instanzen.png

Das scheint soweit ok. Bitte poste mal das include Script.

<?

  function TTS_Play($sk,$ansagetext,$ton,$modus)
     {
        $wav = array
        (
         "Gitarre04"  => IPS_GetKernelDir()."media/Gitarre04.mp3",
//         "meldung"  => IPS_GetKernelDir()."media/meldung.wav",
//         "abmelden" => IPS_GetKernelDir()."media/abmelden.wav",
//         "aus"      => IPS_GetKernelDir()."media/aus.wav",
//         "coin"     => IPS_GetKernelDir()."media/coin-fall.wav",
//         "thunder"  => IPS_GetKernelDir()."media/thunder.wav",
//         "clock"    => IPS_GetKernelDir()."media/clock.wav",
//         "bell"     => IPS_GetKernelDir()."media/bell.wav"
        );
        $id1_musik_status = 44347 /*[Haus global\Media Player Musik\Status]*/;
        $id1_ton_status = 56496 /*[Haus global\Media Player\Status]*/;
        $id1_musik_vol = 30876 /*[Haus global\Media Player Musik\Lautstärke]*/;
        $sk1 = 46969 /*[Haus global\Media Player Musik]*/;
        $sk1_wav = 44789 /*[Haus global\Media Player]*/;
        $tts_sk1 = 54417 /*[Haus global\Media Player\TTS Stefan]*/;

        switch ($sk)
        {
            /*
            modus == 1 ==> Sprache = on / Ton = off / Musik = play / Slider = off / Script Wait = off
            modus == 2 ==> Sprache = on / Ton = on / Musik = pause / Slider = off / Script Wait = on
            modus == 3 ==> Sprache = on / Ton = on / Musik = play  / Slider = on  / Script Wait = on
            */

            case $sk1:
           $status = getvalue($id1_ton_status);
           if($status == 1) break;

            //Lautstärke von Musik am Anfang speichern
            $merken = $musik_vol = GetValue($id1_musik_vol);

            if($modus == 2) WAC_Pause($sk1);

            if($modus == 3)
            {
                //Fader
                 for ($musik_vol; $musik_vol>=0; $musik_vol--)
                 {
                    WAC_SetVolume ($sk1, $musik_vol);
                    $slider = 3000; //Zeit des Faders in ms
                    if($merken>0) $warten = $slider/$merken; else $warten = 0;
                    IPS_Sleep($warten);
                 }
             }

            if($ton != "" and $modus != 1)
            {
                 WAC_Stop($sk1_wav);
                 WAC_SetRepeat($sk1_wav, false);
                 WAC_ClearPlaylist($sk1_wav);
                 WAC_AddFile($sk1_wav,$wav[$ton]);
                 WAC_Play($sk1_wav);

                //solange in Schleife bleiben wie 1 = play
                 sleep(1);
                 $status = getvalue($id1_ton_status);
                 while ($status == 1)
                 {
                    $status = getvalue($id1_ton_status);
                 }
             }

            if($ansagetext !="")
            {
                $filename = IPS_GetKernelDir()."media/Sprache1.wav";
                if(is_writable($filename))
                {
                   WAC_Stop($sk1_wav);
                   WAC_SetRepeat($sk1_wav, false);
                   WAC_ClearPlaylist($sk1_wav);
                   TTS_GenerateFile($tts_sk1, $ansagetext,IPS_GetKernelDir()."media/Sprache1.wav",39);
                   IPS_Sleep(50);
                   WAC_SetRepeat($sk1_wav, false);
                   WAC_AddFile($sk1_wav,IPS_GetKernelDir()."media/Sprache1.wav");
                   IPS_Sleep(50);
                   WAC_Play($sk1_wav);
                }
                else
                {
                   break;
                }
            }

            //Script solange anghalten wie Sprachausgabe läuft
            if($modus != 1)
            {
               sleep(1);
                $status = getvalue($id1_ton_status);
                 while ($status == 1)
                 {
                    $status = getvalue($id1_ton_status);
                 }
             }

             if($modus == 3)
            {

              $musik_vol = GetValueInteger($id1_musik_vol);
              for ($musik_vol=0; $musik_vol<=$merken; $musik_vol++)
              {
                    WAC_SetVolume ($sk1, $musik_vol);
                    $slider = 3000; //Zeit des Faders in ms
                    if($merken>0) $warten = $slider/$merken; else $warten = 0;
                    IPS_Sleep($warten);
              }
            }
            if($modus == 2) WAC_Pause($sk1);
            break;

            case $sk2:
            //für weitere Soundkarten entsprechend aus case 1 kopieren und Werte anpassen
            break;
        }
     }

?>

Ich habe eigentlich nur die IDs verändert und den Sound Gitarre eingefügt.

Was passiert wenn Du:


$id1_musik_status = 44347 /*[Haus global\Media Player Musik\Status]*/;
$id1_ton_status = 56496 /*[Haus global\Media Player\Status]*/;
$id1_musik_vol = 30876 /*[Haus global\Media Player Musik\Lautstärke]*/;
$sk1 = 46969 /*[Haus global\Media Player Musik]*/;
$sk1_wav = 44789 /*[Haus global\Media Player]*/;
$tts_sk1 = 54417 /*[Haus global\Media Player\TTS Stefan]*/;

$ansagetext ="Das ist ein Test";

WAC_Stop($sk1_wav);
WAC_SetRepeat($sk1_wav, false);
WAC_ClearPlaylist($sk1_wav);
TTS_GenerateFile($tts_sk1, $ansagetext,IPS_GetKernelDir()."media/Sprache1.wav",39);
IPS_Sleep(50);
WAC_SetRepeat($sk1_wav, false);
WAC_AddFile($sk1_wav,IPS_GetKernelDir()."media/Sprache1.wav");
IPS_Sleep(50);
WAC_Play($sk1_wav);

in einem Script ausführst?

Was passiert wenn Du:
Dann spricht mein Computer zu mir:
„Das ist ein Test“ :rolleyes:

Hmmm, überschattet vielleicht die Musik die Sprache?
Oder könnte es damit zusammenhängen, das die Gitarre ein mp3 ist?

Ich hab da so eine Idee.
Entferne mal bitte und probiere neu:


$filename = IPS_GetKernelDir()."media/Sprache1.wav";
if(is_writable($filename))
{
}

Entferne mal bitte und probiere neu:
Keine Text-Ausgabe.

Eine Datei „Sprache1“ ist im media Verzeichnis nicht vorhanden.

Wenn ich das probieren kommt auch keine Text-Ausgabe:

$filename = IPS_GetKernelDir()."media/Sprache1.wav";
if(is_writable($filename))
{
echo "test";
}

Die Musik wird aber leise und danach wieder laut?

Die Musik wird aber leise und danach wieder laut?
Mit dem Originalskript und Aufruf:

TTS_Play(46969 /*[Haus global\Media Player für Musik]*/,"Das ist ein Test","Gitarre04",2);

spielt er nur den Sound sofort ohne Lautstärkenänderung.

mit:

TTS_Play(46969 /*[Haus global\Media Player für Musik]*/,"Das ist ein Test","Gitarre04",3);

spielt er nur den Sound ohne Lautstärkenänderung nach ca. 2s Verzögerung.

Schau mal in die Volumenvariable der Musik Mediaplayerinstanz und starte mal:
TTS_Play(46969 /[Haus global\Media Player für Musik]/,„Das ist ein Test“,„Gitarre04“,3);

Ändert sich der Wert?

Ich glaube wir kommen der Sache näher:

Die Volume vom MediaPlayer für Musik wird von 100% auf 0% herunter gefahren.
Die Volume vom MediaPlayer für TTS steht konstant auf 100%.

Die Musik spielt er über den MediaPlayer für TTS, evtl. die TTS über den Mediaplayer für Musik (die hört man bei 0% nicht).

Hmmm: TTS Stefan Speaking blebt die ganze Zeit auf: False.
Muß ich denn der TTS Stimme einen Mediaplayer zuordnen?

Aber ich finde die fehlerhaft eingetragenen Instanzen nicht:confused:

@Ferengi
Ich will Dir jetzt aber auch nicht zuviel Zeit stehlen, notfalls ändere ich alles manuell auf TTS GenerateFile, damit es bei meinem neuen Windows7 Rechner funktioniert. Vielen Dank jedenfalls für die bisherige Mühe!

Muß ich denn der TTS Stimme einen Mediaplayer zuordnen?

Nein. die TTS Instanz ist nur für diese Zeile notwendig, damit das wave File generiert wird.
TTS_GenerateFile($tts_sk1, $ansagetext,IPS_GetKernelDir().„media/Sprache1.wav“,39);

Existiert die Sprache1.wav im media Vz.?

Nein, die Sprache1.wav exististiert nicht im media Verzeichnis.

Du hast ne PN, muß mir das mal per Teamviewer anschauen.

Hallo zusammen,

hab bis jetzt alle Infos die ich brauche im Forum finden können. Mit der TTS Funktion komme ich aber nicht weiter.
Habe windows 7 und die aktuelle IP-Symcon Software. Habe 2 Mediaplayer Instanzen und 1 TTS Instanz angelegt. Ein neues Script erstellt und die Vorlage von Thomas rein kopiert. Die ID´s angepasst und ein Test Script erstellt das ich ebenfalls aus dem Forum habe. Beim ausführen bekomme ich die Fehlermeldung Das SK2 im in der Line 115 nicht bekannt ist. (Siehe Bild)
Was mach ich falsch?

Gruß Thomas

6.jpg

5.jpg

4.jpg

Hallo Hüsi und willkommen im Forum.

Verwendest du Win7 64Bit? Dann funktionieren die normalen 32Bit Stimmen nicht.

Gruß,

Toni

Ich habe Win7 32 Bit. Die TTS funktion von Windows funktioniert mit der Stimme.

Hab die Letzten 2 tage mit Testen verbracht (soweit es die Zeit zulässt) aber keinen Ton bzw Sprache raus bekommen :frowning:


case $sk2:
//für weitere Soundkarten entsprechend aus case 1 kopieren und Werte anpassen
break;

…mußt Du bei Dir natürlich rauswerfen, denn Du hast ja nur eine Soundkarte.

Stimmt, jetzt kommt kein Fehler mehr :), aber auch immer noch keine stimme die sagt „Das ist ein Test“ :confused: Im Media Verzeichnis wird auch keine Datei angelegt!? sollte doch oder?

Das Script „Test“ läuft in 8ms durch.