Dringende Hilfe zu Linguatec Sprachausgabe gesucht

Ich hatte mal das Problem, daß eine .wav-Datei vom Windows „gesperrt“ war… Insbesondere wenn ich während des Abspielens im ISDN-Modul aufgelegt hatte. Danach wurde diese Datei nicht mehr überschrieben. Deshalb verwende ich einfach

$Dateiname=time();

Sieht es denn wenigstens so aus, als würde der VoiceReader-Direkt die Datei generieren? Dann fehlt jedenfalls nicht mehr viel! :wink:

PS: Ist das auch die Studio-Version?

MfG, douglas882

Nee nee die Meldung kommt, wenn ich direkt in Ausführen eingebe!

Bei IPS kommt :

Wrong parameter count for ips_executeex() in [Squeeze Box\Text To Speech\SpeechTest] on line 6

bei

IPS_ExecuteEx("C:/IP-Symcon/scripts/VoiceReader.exe","Save Test",FALSE,False);

ICH HABS, es fehlte das

,0

am ende bei IPS_ExecuteEX

also

IPS_ExecuteEx("C:/IP-Symcon/scripts/sprache.exe","Save"." "."\"" .$Text. "\""." ".$Dateiname,FALSE,False,0);

SUPER! Das kannte ich noch gar nicht (bin V1-ler). Aber das steht tatsächlich auch in der Befehlsreferenz.

Läuft der Rest denn jetzt wie geplant (Datei speichern)?

Wenn ja, könntest Du es jetzt wieder auf „TRUE“ hinten dran umstellen…

IPS_ExecuteEx("C:/IP-Symcon/scripts/sprache.exe","Save"." "."\"" .$Text. "\""." ".$Dateiname,FALSE,TRUE,0);

Dann kannst Du die generierte .wav-Datei auch im gleichen Script direkt „weiterverarbeiten“.

MfG, douglas882

Speichern geht, aber er überschreibt nicht, da kommt noch das Fenster ob mans überschreiben will, und dann geht net weiter …

Was meinst du mit weiterverarbeiten ?

Oh - ich seh grad: Der „Datei ersetzen“-Klick erfolgt NUR, wenn Parameter 3 (=Dateiname) NICHT angegeben ist! Wenn man also einen Dateinamen angibt, der schon existiert, müsste genau dieser Fehler auftreten.

(PS: Mein Server (und damit die Heizung) läuft wieder und die Wohnung wird langsam wieder warm! :stuck_out_tongue: )

Wie bereits weiter oben beschrieben, gibt es oft Probleme, wenn man versucht eine bestehene Datei zu überschreiben. Eigentlich wollte ich ursprünglich alles als „Neue Datei.wav“ speichern. Leider ist das löschen oder „verändern“ dieser Dateien aber nicht mehr möglich, wenn diese inzwischen in irgendeiner Form aufgerufen (=abgespielt) wurden.

Deshalb verwende ich jetzt den Timecode

$Dateiname=time();

um sicher zu stellen, daß die Datei wirklich neu ist.
Natürlich muß man dann gelegentlich die ganzen .wav-Dateien löschen - das übernimmt bei mir auch ein Script - immer unmittelbar nach jedem Rechner-Neustart.

Wenn gewünscht, kann ich dieses Löschen-Script ja auch noch reinstellen. Das ist aber echt gefährlich: Wenn da jemand „C:/“ als Parameter angibt, ist sein Rechner nachher Fabrik-Neu! :smiley:

MfG, douglas882

lol nee ich such nur einen Befehl, der mir die Datei löscht… bei mir wird nur 4 mal am tag eine mp3 generiert ( wettermeldung ) mehr hab ich erstmal net vor.
Ich muß nur wissen wie die heißt, um sie von einem anderen skript abspielen zu lassen.

Also gut: Jetzt habe ich das Script etwas verändert. Es wartet jetzt IMMER (unabhängig vom dritten Parameter) nach dem „Speichern“-Klich eine Sekunde lang auf das Fenster „…wollen Sie diese Datei ersetzen?“ und klickt ggf. drauf.
Damit läuft es jetzt auch durch, wenn man als Dateinamen (dritter Parameter) eine vorhandene Datei angibt.

Das auskommentieren/deaktivieren einer offenbar überflüssigen Zeile, macht es jetzt noch einen Hauch zuverlässiger, wenn man seeehr kurze Texte generiert. Bei meinen heutigen Tests habe ich festgestellt, daß der VoiceReader-Direkt sonst bereits fertig ist, bevor das Script überhaupt nach dem Statusbalken sucht.

Außerdem habe ich dem Script einen unverfänglicheren Namen gegeben: VR-Remote! :wink:

MfG, douglas882

PS: Die Verknüpfung zum VoiceReader-Direkt in dieser Version lautet auch wieder: „C:\Program Files\linguatec\VoiceReader\VRDirect.exe“ (Von dort wird es gestartet, falls beim Aufruf des Scripts das Programm nicht schon läuft.)

VR-Remote.zip (242 KB)

:rolleyes:Sehr gut, danke :slight_smile:
für alle die die länge in Sekunden des erstellten Files brauchen ( So wie ich ):

$Titel = GetValueString(42285 /*[Squeeze Box\Squeezebox\FileMP3]*/); // Abzuspielender Titel
WAC_PlayFile(14318 /*[Media Player]*/, $Titel);                      // Spiel in Mediaplayer ab...
IPS_Sleep(500);                                                      //... das dauert ein wenig...
$q=GetValueString(42691 /*[Media Player\Track Length]*/);            //...wie lang ist das File ?
WAC_Stop(14318 /*[Media Player]*/);                                  // Stoppe
$feld = explode(':',$q);                                             // so den String in Sekunden...
$time=(($feld[0]*60)+($feld[1])+2);                                  // umwandeln..+2 sekunden
$timems=($time*1000);                                                // Millisekunden brauchen wir auch

If ($timems > 1500 )                                                 // wenn weniger als 1,5 Sekunde, dann per Sleep
	{
   SetValueBoolean(10090 /*[Squeeze Box\Squeezebox\Meldung]*/,true);
	IPS_SetScriptTimer(11869 /*[Squeeze Box\Squeezebox\Meldung false]*/, $time);// Script Meldung false setzt wieder auf false 
	}
else
	{
	SetValueBoolean(10090 /*[Squeeze Box\Squeezebox\Meldung]*/, true);
	IPS_Sleep($timems);
	SetValueBoolean(10090 /*[Squeeze Box\Squeezebox\Meldung]*/, false);
	}

hiermit wird die Variable Meldung, die errechneten Sekunden der Länge eines Audiofiles auf True gehalten, ohne es komplett abspielen zu müssen. ! Ist ne Krücke über den Mediaplayer, geht aber.

Hallo
Bei mir lief das AutoIt Script nicht.
bzw: Voice Reader wurde nicht gestartet.

Hab dann dein Script geaendert von:
WinWait(„Voice“)
in
WinWait(„Voice Reader Direct“)

Dann geht es auch bei mir .
Damit nicht immer das Fenster zu sehen ist
welches sich beim Abspeichern oeffnet hab ich folgendes
hinzugefuegt:
WinSetTrans(„Öffnen“,"",0)

Dann ist das Fenster komplett transparent.
Koennte natuerlich auch mit WinMove irgenwohin geschoben werden.

Hallo
Eben ist mir noch was aufgefallen.
Hab eben mal meinem Dateiname in welches geschrieben werden soll
von test in test.mp3 geaendert.
So weit so gut - danach diese wieder rueckgaengig gemacht dabei aber
den Punkt vergessen.
Dabei passiert folgendes - es wird garnicht mehr nachgefragt ob
ueberschrieben werden soll. Es wird einfach ueberschrieben.

Mein Aufruf in IPS

   $Text = "Hallo";
   $Dateiname = "test.";
   IPS_ExecuteEx("C:/Programme/IP-Symcon2/voicereader/voicereader.exe","Save"." "."\"" .$Text. "\""." ".$Dateiname,false,TRUE,0);

In AutoIt:

if $CmdLine[1] = "Save" Then 
	ControlClick("Voice Reader Direct","",1000)
	WinSetTrans("Öffnen","",128)
	WinWait("Speichern","",30)
	WinActivate("Speichern")
	WinWaitActive("Speichern","",30)
	if($CmdLine[0]=3) Then
		SEND($CmdLine[3])
	EndIf
	Send ("{ENTER}")
EndIf

Hallo 1007,

freut mich, daß Du das anpassen konntest - offenbar kennst Du Dich mit AutoIt aus…

Was mich aber wundert:

Hab dann dein Script geaendert von:
WinWait(„Voice“)
in
WinWait(„Voice Reader Direct“)

…das müsste doch die „Suche“ noch weiter einschränken!? Vermutlich hat das Script vorher schon diesen „Start-PopUp“ von dem Programm als „Voice“ interpretiert und kräftig drauf los geklickt, bevor VoiceReader einsatzbereit war.

WinSetTrans("Öffnen","",128)

Wieso „Öffnen“? Bei heißt das Fenster „Speichern unter“… Liegt vielleicht doch an der anderen Version des VoiceReaders.

Dabei passiert folgendes - es wird garnicht mehr nachgefragt ob
ueberschrieben werden soll. Es wird einfach ueberschrieben.

Wurde jetzt nicht eher eine neue Datei erstellt („Test.mp3“ und „Test…mp3“)? Also wenn dieser „Fehler“ zuverlässig und wiederholt auftritt, hätte man sich den natürlich zu Nutze machen können. (Dann hätte es den Umbau von heute morgen gar nicht gebraucht… :wink: )

MfG, douglas882

Habs mit „Speichern unter“ probiert ging aber nicht.
Hab mir mit dem AutoIt Befehl „WinList“ alle
Fenster mit Namen ausgegeben und da war der Fenstername
„Öffnen“

Beim Filenamen mit Punkt wird keine test…mp3 erstellt sondern test.mp3

Wie auch immer :wink:

PS: Bei WinSetTrans bedeutet der Wert 128 halbdurchsichtig - noch - wegen debugging

Klasse tool. Endlich kann ich mir morgens das Wetter ansagen lassen. Danke. Hatte bis jetzt immer AutoHotkey benutzt. Aber das is eine Glaubendsfrage