TTS_Speak Sprachausgabe Alternative?

Ich hätte möglicherweise eine Alternative zur TTS_Speak Funktion!?

Da unter Windows 7 gewisse Limitierungen herrschen, die eine direkte Sprachausgabe nicht zulassen, muss man ja zuerst den gewünschten Text in eine Datei ausgeben lassen und dann erst per MediaPlayer-Instanz abspielen.

Auf [b]dieser Website[/b] gibt es ein Kommandozeilen-Programm für die Sprachausgabe, welches bei mir unter Windows 7 Home Premium 64 Bit wunderbar funktioniert.

Einfach die .exe-Datei herunterladen, irgendwo speichern und den Pfad zur Datei dann der IPS_ExecuteEx-Funktion angeben; als Parameter den gewünschten Text!
Verwendet wird jeweils die in der Windows Sprachausgabe eingestellte Stimme.

Damit könnte man eventuell (mir fehlt leider die Möglichkeit das zu testen) die direkte Sprachausgabe anwenden:

IPS_ExecuteEx("SayStatic.exe", "Hallo, Welt!", false, false, 0);

Vielleicht hat jemand Lust das zu testen und zu bestätigen oder widerlegen! :wink:
Ich weiß leider nicht, wie es mit dieser Variante mit den Sicherheitsbeschränkungen von Windows aussieht und ob es daher funktioniert… :confused:

LG,
florida

@admins:
Sorry, eventuell was für die Kategorie Scripte, PHP, SQL oder falls es klappt Anleitungen / Nützliche PHP Scripte. :rolleyes:

LG,
florida

Auch wenn es unter Windows 2008 Server (SBS) leider abstürzt, unter Windows 7 fuktioniert es einwandfrei, habe ich es mal in die Anleitungen und nützlichen Skripte verschoben.

Vielleicht kann jemand der Probleme mit TTS_Speak hat das testen, insbesondere auf einem Serversystem wie meines.

@wgreipl: Danke! :slight_smile:
Vielleicht klappt es auf (Windows) Server Systemen mithilfe der auf der Website genannten psexec.exe!? Da diese angeblich auf Telnet-Basis läuft, muss man das vorher halt sicherheitstechnisch abwiegen…
Aber solangs im gesicherten LAN ist, kein Problem!

@all:
Achja: Man könnte die TTS-Variante natürlich nett in eine PHP-Funktion packen, z.B.: :wink:


<?
function Say($text) {
 IPS_ExecuteEx("SayStatic.exe", $text, false, false, 0);
}
?>

Aufruf mit:

Say("Hallo Welt!");

Aber das ist hoffentlich eh allen klar! :stuck_out_tongue:

LG,
florida

Ich habe das mal auf W7x64 ausprobiert.
Klappt ganz gut. In IPS geht es, wenn IPS als Dienst gestartet wird.
Jetzt weiss ich nur nicht, wie ich die einzelnen Soundkarten ansteuern kann.
Außerdem ist mir der Unterschied der beiden „exen“ nicht ersichtlich.

Da es auf Vista läuft find ich es gut.

Hallo zusammen! Ich hab damit doch ein kleines Problem…:
Ich hab auf meinem Vista Pc ein Programm (VisualBasic) erstellt, mit dem ich immer arbeite. Ich hab ne Funktion hinzugefügt, mit der ich mir Erinnerungen schreiben möchte, die später dann mit IPS ausgegeben werden können. Wird gespeichert in erinnerung.txt. Folgenden Code in ISP um die Datei auszulesen:

<?
$handle = fopen ("C:\Ip-Symcon/erinnerung.txt", "r");
while (!feof($handle)) {
    $buffer = fgets($handle, 4096);
    IPS_ExecuteEx("C:\Ip-Symcon\SayStatic.exe", "$buffer", false, false, 1);
    //echo $buffer;
    if ($buffer == ""){
    IPS_ExecuteEx("C:\Ip-Symcon\SayStatic.exe", "Du hast keine Erinnerung gespeichert", false, false, 1);
    }

}
fclose ($handle);
?>

Jetzt kommt als Sprachausgabe immer: „Umgekehrtes Fragezeichen“, und dann erst den Text den ich abgespeichert habe. In der erinnerung.txt ist aber nur der Text den ich haben möchte. Liegts am PHP Code??? Wäre sehr dankbar, wenn jemand ne Antwort hat, weil das stört total! mfg, Bastian

Hallo Bastian,

wieso so kompliziert? :wink:

$fc=file_get_contents('C:\Ip-Symcon\erinnerung.txt');
if(empty($fc)) {
 IPS_ExecuteEx('C:\Ip-Symcon\SayStatic.exe', 'Du hast keine Erinnerung gespeichert', false, false, 1);
} else {
 IPS_ExecuteEx('C:\Ip-Symcon\SayStatic.exe', $fc, false, false, 1);
}

bzw.

$fc=file_get_contents('C:\Ip-Symcon\erinnerung.txt');
if(empty($fc)) {$fc='Du hast keine Erinnerung gespeichert';}
IPS_ExecuteEx('C:\Ip-Symcon\SayStatic.exe', $fc, false, false, 1);

Sonst müsstest mal debuggen, was bei dir als $buffer zurückgegeben wird…

LG,
florida

Hi Florida! Danke für deine Antwort!
Hab den Code ausgetauscht durch deinen eleganteren. Funktioniert leider immer noch nicht. Als Rückgabe von $fc bekomm ich: „Test“. Aber in der txt steht nach wie vor nur „Test“. Hast noch ne Idee?

Hm… Sieht so aus, als ob es ein Problem mit der Zeichenkodierung gäbe.

Mit welcher Kodierung hast du die txt-Datei gespeichert? (Im Notepad kannst du das z.B. im Dialogfeld „Speichern unter“ unten noch zusätzlich auswählen [ANSI, Unicode, UTF-8,…]).

Eventuell hilft dir diese Funktion:

function file_get_contents_utf8($fn) { 
     $content = file_get_contents($fn); 
      return mb_convert_encoding($content, 'UTF-8', 
          mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true)); 
} 

Als Versuch kannst du auch mal file_get_contents so aufrufen (sofern es nur um den Beginn des txt-Files geht):

$fc=file_get_contents('C:\Ip-Symcon\erinnerung.txt',NULL,NULL,3);

Wobei 3 für das Zeichen an der Stelle 3 (beginnend bei 0) steht, ab dem der Dateiinhalt zurückgegeben werden soll.

Wenn das nichts wird, muss man dem Zeichenkodierungsproblem auf die Schliche zu kommen. Eventuell musst du utf8_encode(), bzw. utf8_decode() für deinen Dateiinhalt verwenden.

LG,
florida

Hi Florida!
Du bist klasse!!!

$fc=file_get_contents('C:\Ip-Symcon\erinnerung.txt',NULL,NULL,3);

hat mich zum Ziel gebracht! Danke! Lg, Basti

Das freut mich, dass es funktioniert! :wink:

Allerdings fürchte ich, dass das Grundproblem dadurch nicht gelöst, sondern eher umgangen wurde. Ich würde mich nochmal mit der Zeichenkodierung beschäftigen; nicht dass irgendwann unverhofft bei einem anderen Text in der Datei erneut irgendein Zeichensalat auftritt…

Aber daweil: OK

LG,
florida

Hattest Recht mit Zeichencodierung:
Visual Basic war Schuld:
„As mentioned in the documentation, „When no encoding is specified, UTF-8 is used“. This will cause the file to have additional 3 bytes at the beginning. These 3 bytes are the Byte-Order-Mark (BOM) of UTF-8 encoding.“
Habs jetzt ordentlich mit ASCII gemacht. Dank dir nochmals ganz herzlich. Lg, Bastian

Hi florida stecke praktisch sowas wie in den Kinderschuhen was ips und Programmierung angeht. Aber auch ich mach Fortschritte :).Wenn ich deiner Anweisung Folge:

Einfach die .exe-Datei herunterladen, irgendwo speichern und den Pfad zur Datei dann der IPS_ExecuteEx-Funktion angeben; als Parameter den gewünschten Text!
Verwendet wird jeweils die in der Windows Sprachausgabe eingestellte Stimme.

Damit könnte man eventuell (mir fehlt leider die Möglichkeit das zu testen) die direkte Sprachausgabe anwenden:

PHP-Code:
IPS_ExecuteEx("SayStatic.exe", "Hallo, Welt!", false, false, 0);

Rechnet das Skript ja zeigt aber keine Fehler an und nichts passiert könntest du das bitte mal step bei step erklären.

Quasi für deppen