Komfortable TTS Ausgabe Funktion

$id1_ton_status hat die falsche ID bei Dir.

Ja stimmt ist mir auch aufgefallen, ich hab noch mal alles gelöscht und neu gemacht, hat bei den HM Produkten auch schon oft geholfen. Sind die IS´s so OK (Bild)

Gruß Thomas

Ja so sollte es gehen.

P.S. die wav Dateien nüssen natürlich da sein, wie z.B. gitarre etc. sonst auskommentieren.

Ich hab einfach 1 wav Datei genommen und kopiert und umbenannt. Das gleiche für die anderen Dateien. Das Skript läuft jetzt ohne Fehler durch. Nur Ton kommt keiner.

Hast du noch eine andere Idee bzw muss ich noch irgendwas tuen oder Vorraussetzungen schaffen das dass funktioniert.

Danke schon mal für die Unterstützung

Die zwei mp Volumen mal debuggen (also beim Scriptausführen in zwei Fenstern mitschneiden) und liegt jetzt die Sprache1.wav im media Vz.?

Besten dank für die Hilfe :smiley: funktioniert jetzt soweit. bzw. es kommt die Stimme aus dem Lautsprecher. Alles weitere teste ich heute Abend. Kleiner Tipp für läute die wie ich die Config ihres IP-Symcon Rechners per RDP machen (Weil Rechner hinter dem Touchscreen in der Wand steckt), Sprachausgabe über RDP funktioniert nicht!) Das wahr wohl auch das eigentliche Problem. :rolleyes:

Ich weis nicht ob es hier rein gehört, aber gibt es bzw. wie mach ich ein Script für Sprachausgabe wo alle Texte drin sind und ich beim einschalten einer Lampe der richtige Text gesprochen wird? Ich würde jetzt für jeden Vorgang ein Script anlegen. Das muss doch auch einfacher gehen?

Das sind zwei paar Schuhe die TTS Ausgabefunktion stellt die Sprachausgabe zur Verfügung. Das was gesprochen soll, sprich der Text, liegt bei mir in einem Script in einem array. Dieses Script wird von allen möglichen Triggern angesprochen und sagt dann diverse Sachen in vielen Räumen an, z.B. Licht an/aus, Alarm, Temperatur, Regen, Ausfall von Sensoren, Waschmaschiene fertig, es kommt jemand nach Hause uvm. Sogar per Zufallsgenerator, weil ich möchte ja auch etwas Abwechslung in der Ansage.:smiley:

Kannst Du mir vieleicht das Script zukommen lassen, dann könnte ich es wahrscheinlich leicht für mich anpassen :slight_smile: Bin noch am lernen und würde wahrscheinlich Wochen brauchen um das selbst zu endwerfen. :confused:

Griß Thomas

Das Script ist sehr komplex und auf meinen Bedarf zugeschnitten, hier die wichtigsten Stellen:


	$sprache_kg_wasch_fertig = array
	(
	"Achtung xxx, Automatic meldet die Wäsche ist fertig",
	"Automatic meldet das die Wäsche fertig ist",
	"Achtung die Wäsche kann jetzt aus der Waschmaschine raus",
	"Achtung, der Waschgang wurde beendet und die Wäsche kann jetzt aus der Waschmaschine",
	"Nadine, Automatict meldet aus dem Keller, die Wäsche ist fertig",
	"Automaic meldet, die Wäsche möchte raus aus der Waschmaschine"
	);

	$rand = mt_rand(0,count($sprache_kg_wasch_fertig)-1);


     $sprach_trigger = array
     (
     $id_sz_urlaubsmodus,
     $id_tracker_x1_status,
     $id_tracker_x2_status,
     $id_tracker_x3_status,
     $id_tracker_x4_status,
     $id_last_message_xxx,
    $id_last_message_xxx,
     $id_markise_status,
     $id_xxx,
    $id_fehler_nr,
    $id_wind_alarm,
     $id_aktuelle_nachricht,
     $id_kg_wa_heizung_alarm,
     $id_ram_frei_warnung,
     $id_kg_ger_geragentor_status,
     $id_term_aktuell,
     "vorbereitung",
     "scharf",
     "ausgeloest",
     $id_eg_au_bewegungsmelder_status,
     $id_ruf_xxx_oben,
     $id_ruf_xxx_oben,
     $id_ruf_xxx_unten,
     $id_ruf_xxx_unten,
     $id_kg_wasch_fertig,
     "dunkel",
     "hell",
     $id_mail_erhalten_xxx,
    $id_mail_erhalten_xxx,
     $id_ips_beitr_gewandelt_alt,
     $id_frost,
     $id_temperatur_ansagen,
     $id_regen_warnung,
     $id_sprachbox
     );

     $ansagetext = array
     (
    "Achtung, Urlaubsmodus wurde gestartet! Bitte an das abschalten der Gasheizung denken!",
     $ausgabe,
     $ausgabe,
     $ausgabe,
     $ausgabe,
   "xxx hat seine e-mail gelesen.",
    "xxx hat seine e-mail gelesen.",
     $ausgabe,
    "Achtung, xxx ist aufgestanden!",
    $fehler[$fehler_nr],
   "Achtung, Windstärke über dem zulässigem Wert!.$ausgabe_2",
   "Neue Nachricht eingetroffen. ".GetValueString($id_aktuelle_nachricht_gewandelt),
     "Achtung, Heizung ist ausgefallen",
     "Achtung, Hauptspeicherwarnung des Servers",
     "Achtung $ausgabe",
     "Achtung, Termin jetzt".GetValueString($id_term_aktuell),
     "Achtung, Alarmanlage wird in 5 Minuten aktiviert",
     "Achtung, Alarmanlage wurde aktiviert",
     "Achtung, Alarm wurde ausgelöst. Polizei wurde gerufen. Verlassen Sie sofort das Haus!",
     "Achtung Bewegung vor dem Haus",
     "xxx bitte runter kommen",
     "xxx bitte runter kommen",
     "xxx bitte hoch kommen",
     "xxx bitte hoch kommen",
     $sprache_kg_wasch_fertig[$rand],
     "Licht auf Nachtmodus umgestellt",
     "Licht auf Tagesmodus umgestellt",
     "xxx hat neue Post",
     "xxx hat neue Post",
     $sprache_ips_beitr_gewandelt_alt[$rand],
     "Achtung, Frostgrenze erreicht",
     "Aktuelle Information, Temperatur aktuell bei ".GetValueFloat($id_temperatur_ansagen)." Grad",
     "Achtung, aktuelle Regeninformation: $regenmenge_ansage Regen.$ausgabe",
     "Achtung es kommt eine externe Nachricht an:.........".GetValueString($id_sprachbox),
     );

     $i=0;
 
     foreach($sprach_trigger as $value)
    {
       if($IPS_VARIABLE == $value)
       {
          $ansagetext = $ansagetext[$i];
          if($IPS_VARIABLE == $id_ruf_x_oben or $IPS_VARIABLE == $id_ruf_x_oben)
             {
                    if($sprachausgabe_erlaubt_og_sz)  IPS_RunScriptEx($id_script_sprachausgabe_sk1, array("ansagetext" => $ansagetext));
                  if($sprachausgabe_erlaubt_og_bad) IPS_RunScriptEx($id_script_sprachausgabe_sk3, array("ansagetext" => $ansagetext));
                    if($sprachausgabe_erlaubt_og_zz)  IPS_RunScriptEx($id_script_sprachausgabe_sk4, array("ansagetext" => $ansagetext));
                  if($sprachausgabe_erlaubt_og_sr)  IPS_RunScriptEx($id_script_sprachausgabe_sk5, array("ansagetext" => $ansagetext));
          }
            elseif($IPS_VARIABLE == $id_ruf_x_unten or $IPS_VARIABLE == $id_ruf_x_unten)
             {
             if($sprachausgabe_erlaubt_eg_kue) IPS_RunScriptEx($id_script_sprachausgabe_sk2, array("ansagetext" => $ansagetext));
             IPS_RunScriptEx($id_script_sprachausgabe_sk6, array("ansagetext" => $ansagetext));
         }
         else
         {
                if($sprachausgabe_erlaubt_og_sz     and $nur_sr != 1) IPS_RunScriptEx($id_script_sprachausgabe_sk1, array("ansagetext" => $ansagetext));
              if($sprachausgabe_erlaubt_og_bad and $nur_sr != 1) IPS_RunScriptEx($id_script_sprachausgabe_sk3, array("ansagetext" => $ansagetext));
                if($sprachausgabe_erlaubt_og_zz     and $nur_sr != 1) IPS_RunScriptEx($id_script_sprachausgabe_sk4, array("ansagetext" => $ansagetext));
              if($sprachausgabe_erlaubt_og_sr)                          IPS_RunScriptEx($id_script_sprachausgabe_sk5, array("ansagetext" => $ansagetext));
                if($sprachausgabe_erlaubt_eg_kue and $nur_sr != 1) IPS_RunScriptEx($id_script_sprachausgabe_sk2, array("ansagetext" => $ansagetext));
                if($sprachausgabe_erlaubt_eg_au    and $nur_sr != 1)    IPS_RunScriptEx($id_script_sprachausgabe_sk6, array("ansagetext" => $ansagetext));
            }
        }
       $i=$i+1;
     }

Bensten dank für das Script. Ich werd mal versuchen das für mich brauchbar zu machen bzw mich daran zu orientieren. Hab gerade erfahren das ich erstmal ein neues Kinderzimmer bauen muss :wink:

Gruß und danke Thomas

Glückwunsch! Und einfach fragen wenns weiter geht.:wink:

Erwürdiger Nagus,

Habe da eine Bitte für die anderen User.

Die Informationen welche ID für welche Instanz steht finde ich sehr wichtig.
Habe am Anfang auch nicht gerafft was was ist.




$id1_musik_status = 12345 ; // id des Status der 1. Mediaplayerinstanz für Musik Soundkarte 1
        $id1_ton_status = 10815 ; // id des Status der 2. Mediaplayerinstanz für Sprache/Ton Soundkarte 1
        $id1_musik_vol = 56335 ; // id des Volumen der 1. Mediaplayerinstanz für Musik Soundkarte 1
        $sk1 = 56641 ; // id der 1. Mediaplayerinstanz für Musik Soundkarte 1
        $sk1_wav = 51118 ; // id der 2. Mediaplayerinstanz für Sprache/Ton Soundkarte 1
        $tts_sk1 = 29491 ; // id der TTS Instanz für Musik Soundkarte 1



Wer für das Script im 1. POST.

Nachtrag: Kann das sein das die Wav Datei für die Sprachausgabe vorher angelegt sein musste?
Danach hat es bei mir gefunzt…

Zum leidwesen meiner Holden sein erster Satz war „Mein name ist HAL 9000“ :wink:

Gruß und danke für das Script
Nick

ich schon wieder :wink:

wen ich mir die Mudulreferenz zu TTS anschaue und dort den Befehl „TTS_GenerateFile“ stellt sich mir eine Frage.

Dort wird doch per $Format die KHz angegeben.

Meine Frage: Gibt es im Format Atribut noch weitere Schalter z.B. Stimmhöhe oder Stimmgeschwindigkheit ect,

Oder weiß jwmand einen Trick wie mann das anders umsetzen kann?

Gruß Nick

Hallo Nick,

Die Informationen welche ID für welche Instanz steht finde ich sehr wichtig.

Habs mal hinzugefügt.

Nachtrag: Kann das sein das die Wav Datei für die Sprachausgabe vorher angelegt sein musste?

Ja. Script ist schon älter und ich nutze schon eine sehr überarbeitete neuere Fassung. Allerding muß ich da echt nochmal ran um ein Stack einzubauen der mehrere gleichzeitige Sprachbefehle puffert.

Meine Frage: Gibt es im Format Atribut noch weitere Schalter z.B. Stimmhöhe oder Stimmgeschwindigkheit ect,

Die installierte TTS bringt Unterschiede, Leerzeichen, Sonderzeichen im Text bringen Nuancen. Stimmhöhe oder Stimmgeschwindigkheit ist meines Wissens nur mit externen Sprachausgaben zu verändern, deren Einbindung in IPS nicht so einfach ist.

Ollla Thomas,

Das mit den Nuancen hab ich schon raus.

Nutze die Julia von Acapella die ist recht weit entwickelt. Es wer mal interesannt zu wissen ob ips bei der erstellung der mp3 auf die TTS Api von MS zugreift. Dort kannn man mit SAPI 5 komformen Stimmen „was die heutigen sind“ von haus aus per syntax schon ne menge machen.

Da es ein Standart is muss ich mal damit was rumspielen. Wie ich alles aus den Stimmen mit Balabolka raushole weiss ich mal schauen was mit IPS möglich ist. Melde mich wen ich was weiss.

Wen du eine neuere Version deines Scriptest hast frag ich mich ob die algemeintauglich oder zu speziel ist schnorr

Gruß Nick

Als kleines Weihnachtsgeschenk die aktuelle TTS Funktion, wie schon lange versprochen.:slight_smile:

Hallo, ganz blöde Frage.
wo muß ich denn das eintragen?


TTS_GenerateFile($id_sk1_tts, $ansagetext, IPS_GetKernelDir()."media/wav/sprache_sk1_" . $sk1_counter . ".wav",39);
WAC_AddFile($id_sk1_ton, IPS_GetKernelDir()."media/wav/sprache_sk1_" . $sk1_counter . ".wav");  

Habe das in ein extra Skript gepackt,

<?
include "36786.ips.php";
TTS_GenerateFile($id_sk1_tts, $ansagetext, IPS_GetKernelDir()."media/wav/sprache_sk1_" . $sk1_counter . ".wav",39);
WAC_AddFile($id_sk1_ton, IPS_GetKernelDir()."media/wav/sprache_sk1_" . $sk1_counter . ".wav");
?>

aber bei ausführung, sagt er dies:

Notice: Undefined variable: id_sk1_tts in E:\IP-Symcon\scripts\28686.ips.php on line 3
Notice: Undefined variable: ansagetext in E:\IP-Symcon\scripts\28686.ips.php on line 3
Notice: Undefined variable: sk1_counter in E:\IP-Symcon\scripts\28686.ips.php on line 3
Warning: tts_generatefile: Instance #0 not found! in E:\IP-Symcon\scripts\28686.ips.php on line 3
Notice: Undefined variable: id_sk1_ton in E:\IP-Symcon\scripts\28686.ips.php on line 4
Notice: Undefined variable: sk1_counter in E:\IP-Symcon\scripts\28686.ips.php on line 4
Warning: wac_addfile: Instance #0 not found! in E:\IP-Symcon\scripts\28686.ips.php on line 4

Die Var $sk1_counter verstehe ich gar nicht, wo kommt die her, wie soll ich die einbinden.
Ich habe es so versucht, eine Intege Variable zum Player hinzugefügt und darauf verwiesen unter $sk1_counter,
leider ohne Erfolg.
Vieleicht hat jemand erbarmen mit einem PHP Anfänger.

Gruß Marcus

Allerdings :smiley:

wo muß ich denn das eintragen?

TTS_GenerateFile($id_sk1_tts, $ansagetext, IPS_GetKernelDir().„media/wav/sprache_sk1_“ . $sk1_counter . „.wav“,39);
WAC_AddFile($id_sk1_ton, IPS_GetKernelDir().„media/wav/sprache_sk1_“ . $sk1_counter . „.wav“);

Laut Beschreibung S.1 nur als Beispiel für die Pfadangabe gedacht und die Zeilen müssen im Programm angepasst, bzw. der Pfad so eingerichtet werden.

Habe das in ein extra Skript gepackt

Sinnlos. Aufruf laut S1:

tts_play($sk,$ansagetext,$ton,$modus) Beispiel: tts_play(52345,"Das ist ein Test","bell",2);

$sk = Integer: id der Mediaplayerinstanz für Musik
$ansagetext = String: Ansagetext
$ton = String: abzuspielender Ton aus dem array
$modus = Integer: Modus

Vieleicht hat jemand erbarmen mit einem PHP Anfänger.

Ist normaler Text, der zu beachten ist. Lesen und umsetzen. :smiley:

Da ich das Programm nicht einsetze sind die obigen Dinge geraten. Ergänzung/Korrekturen erwünscht. :cool:

Gruß
Bruno

Schon mal danke, aber es funktioniert nicht.
Die Mediaplayer Instanzen laufen, die Text to Speech Instanz auch.
Wenn ich ein Testskript laufen lasse kommt keine Fehlermeldung, allerdings auch keine Ansage:rolleyes:
Die Funktion läuft auch ohne Fehlermeldung durch!
Aber was ist mit der Variable $sk1_counter, da kann ich alles eintragen aber es kommt kein Fehler.
Bin Ratlos

Lt. meinem Verständnis musst Du da nix eintragen. Sollte das Programm machen. Nur die anderen Vars sind zu füllen.

Gruß
Bruno