Sprachausgabe erzählt mir immer das gleiche

Hallo,

ich spiele gerade ein wenig mit der Sprachausgabe herum und habe dabei folgendes Problem.

Mit dem Script:

<?

$Fenster = GetValueBoolean(24577 /*[Fenster\Fenster Schlafzimmer\Status]*/);

if ($Fenster == True) {
	$Fstatus = "geschlossen";
	}
else {
	$Fstatus = "geöffnet";
	}
TTS_GenerateFile(23485 /*[Text To Speech]*/, "Das Fenster im Schlafzimmer wurde $Fstatus.",IPS_GetKernelDir()."media/Sprache1.wav",39);
IPS_Sleep(50);
WAC_SetRepeat(29669 /*[Media Player TTS]*/, false);
WAC_ClearPlaylist(29669 /*[Media Player TTS]*/);
WAC_AddFile(29669 /*[Media Player TTS]*/,IPS_GetKernelDir()."media/Sprache1.wav");
WAC_Play(29669 /*[Media Player TTS]*/);

?>

funktioniert alles wunderbar. Von diesem Script habe ich halt jeweils eins pro Fenster und alle sagen mir Korrekt an, wenn ein Fenster geschlossen oder geöffnet wird. Auch wenn ich „Steffi“ nicht ausreden lasse und schnell die Fenster auf und zu mache, funktioniert noch alles wunderbar.

Sobald aber einmal das Script:

<?

TTS_GenerateFile(23485 /*[Text To Speech]*/, "Ich quatsch mir den Wolf.",IPS_GetKernelDir()."media/Sprache1.wav",39);
IPS_Sleep(50);
WAC_SetRepeat(29669 /*[Media Player TTS]*/, false);
WAC_ClearPlaylist(29669 /*[Media Player TTS]*/);
WAC_AddFile(29669 /*[Media Player TTS]*/,IPS_GetKernelDir()."media/Sprache1.wav");
WAC_Play(29669 /*[Media Player TTS]*/);

?>

ausgeführt wird, wird anschliessend nur noch dieser Satz gesprochen, egal welches Skript ausgeführt wird.

Es macht also den Eindruck, als wenn die Datei „Sprache1.wav“ noch geöffnet ist und nicht mehr neu geschrieben werden kann. Wenn ich das obere Script dann manuell ausführe, entsteht auch eine Fehlermeldung in der Form, das die Datei nicht vorhanden sei.

Jetzt fällt mir hier beim Erstellen dieses Threads auf, daß ich am Ende des Satzes „Ich quatsch mir den Wolf“ einen Punkt gesetzt habe. Kann das vielleicht der Fehler sein?

Ansonsten funtioniert das ganze erst wieder wenn ich einmal den IPS Dienst beendet habe und dann neu gestartet habe.

Nun mus ich das mit dem Punkt heute abend mal ausprobieren aber vielleicht fällt ja jemandem noch ein anderes Problem auf.

Gruß
Smudo

Hallo Smudo,

bitte für PHP-Code nicht die Code-Tags sondern die PHP-Tags verwenden.

Ich habe es erst einmal für Dich ausgebessert.

Gruß
HJH

Hallo Smudo,

gibt es einen Grund, warum Du den Player als Ausgabemedium verwendest?

Es geht doch viel einfacher:

$Fstatus = ($IPS_VALUE) ? "geschlossen" : "geöffnet";
TTS_Speak(29669, "Das Fenster im Schlafzimmer wurde ". $Fstatus, true);

Du musst lediglich das Skript durch die Variable mit der ID 24577 OnChange triggern lassen. Das ist schon alles.

Gruß
HJH

bitte für PHP-Code nicht die Code-Tags sondern die PHP-Tags verwenden.

Ich habe es erst einmal für Dich ausgebessert.

Jo, alles klar. Danke.

gibt es einen Grund, warum Du den Player als Ausgabemedium verwendest?

Es geht doch viel einfacher:

PHP-Code:
$Fstatus = ($IPS_VALUE) ? „geschlossen“ : „geöffnet“;
TTS_Speak(29669, "Das Fenster im Schlafzimmer wurde ". $Fstatus, true);

Du musst lediglich das Skript durch die Variable mit der ID 24577 OnChange triggern lassen. Das ist schon alles.

Ich dachte TTS_Speak geht unter Vista nicht. Probiert hab ich es nicht, hab es nur hier so gelesen.

Gruß
Smudo

Das selbe Probleme hatte Ferengi-Master irgendwo schon gepostet - finde es aber nicht mehr.

Du musst vor dem TTS_GenerateFile die Soundausgabe stoppen. Das kannst du mit WAC_Stop($id) erreichen. Dann sollte TTS_GenerateFile auch keine Fehlermeldung mehr ausgeben.

@HJH: TTS_Speak sollte nicht mehr verwendet werden, da es unter Vista nicht geht. Siehe: TTS_Speak - IP-Symcon :: Automatisierungssoftware

paresy

Hi,

dann werde ich das auf jeden Fall jetzt so machen. Auffällig ist aber trotzdem das es nur bei den Script auftritt. Liegt es vielleicht trotzdem an dem „.“ ?
Rein Interesse halber.
Trotzdem natürlich schon mal Danke für die Lösung.

Gruß
Smudo

Hmm,

hab gerade mal ein Script per Hand ausgeführt und bekomme immer noch

Warning: % wurde nicht gefunden in [Sonstiges.LS Status Jalousien] on line 3

als Fehlermeldung wobei die Zeile 3 die Zeile mit dem TTS_GenerateFile ist. In der Zeile davor hab ich

WAC_Stop(29669);

eingefügt.
Scheint also doch noch nicht ganz die Lösung gewesen zu sein. (Ich hab den Dienst noch nicht wieder neu gestartet, was ja auch nicht nötig sein sollte wenn WAC_Stop die Lösung gewesen wäre)

Gruß
Smudo

Du könntest noch versuchen das „WAC_ClearPlaylist($id);“ davor auszuführen.

paresy

Das hatte ich vorher schon mal ausprobiert aber nicht mit Stop zusammen.
Es sieht jetzt so aus:

<?
WAC_Stop(29669 /*[Media Player TTS]*/);
WAC_ClearPlaylist(29669 /*[Media Player TTS]*/);
TTS_GenerateFile(23485 /*[Text To Speech]*/, "Ich quatsch mir den Wolf",IPS_GetKernelDir()."media/Sprache1.wav",39);
IPS_Sleep(50);
WAC_SetRepeat(29669 /*[Media Player TTS]*/, false);
WAC_AddFile(29669 /*[Media Player TTS]*/,IPS_GetKernelDir()."media/Sprache1.wav");
WAC_Play(29669 /*[Media Player TTS]*/);
?>

Es kommt aber leider immer noch die oben genannte Fehlermeldung.

Ich bin nicht zu Hause, so dass ich die Sache mit dem Punkt mal ausprobieren kann. Ich kann den Dienst von hier nicht neu starten.

Gruß
Smudo

Hallo Smudo,

da habe ich Stunden zugebracht…:rolleyes:
Hier die Lösung:

Die Fehlermeldung kommt, wenn das File das du erzeugen willst durch einen anderen Thread oder andere Software geöffnet ist.

Das Problem hatte ich auch schon.

Gruß Sven

Genau. Mit diesem Sytax habe ich die besten Erfahrungen gemacht:


    if(is_writable($filename))
                {                      
                   WAC_Stop($sk1_wav);
                   WAC_SetRepeat($sk1_wav, false);
                   WAC_ClearPlaylist($sk1_wav);
.....          

Hallo Ferengi-Master,

dein Script hat mir ja als Vorlage gedient als ich angefangen hab damit zu experimentieren. Nur hab ich mir für eine einfache Ansage das wesentliche heraus genommen.
Ich hab mir das ganze heute abend noch einmal angeschaut und musste festellen, dass der Fehler nur dann entsteht, wenn das Script per Event (OnValue der Variable „…Boolean“ mit Grenze True) ausgelöst wird. Wenn ich es von Hand laufen lasse, funktioniert es wunderbar.
Dabei ist mir auch aufgefallen, das der Sound 2 mal hintereinander abgespielt wurde, was auch eigentlich nicht sein kann.
Da ist also der Bock irgendwo anders zu suchen und gar nicht, wie angenommen, in der Art wie die Sounds abgespielt werden.

Im Moment kann ich mir da gar keinen Reim drauf machen, was da abgeht aber alles was ich oben gepostet hat sollte dann ok sein und nichts mit dem Fehler zu tun haben.

Also Danke erst mal an alle, da muss ich mal abwarten was morgen passiert.

Gruß
Smudo