Mein IPS System ist in den letzten Tagen auf einen neuen Rechner mit Windows 8.1 umgezogen. Gleichzeitig habe ich auf die neueste IPS Version aktualisiert. Seitdem habe ich das Problem, dass meine mit TTS_GenerateFile erzeugten Dateien zwar mit WAC_PlayFile wiedergegeben werden können, nicht jedoch mit dem Medienplayer und auch nicht mit SONOS.
Mir sieht es so aus, als ob die erzeugten Dateien nicht korrekt sind. Wenn ich z.B. die Datei mit einem Audiotool wie WavePad öffne, so zeigt es mir eine leere Datei an.
Auffällig ist, dass auch der Explorer bei den Dateieigenschaften keine Bitrate anzeigt. Bei älteren auf diese Weise erstellten Dateien wird eine Bitrate angezeigt.
Zum Test verwende ich die folgenden Codeschnipsel:
evtl. am Thema vorbei…aber wenn du Sonos verwendest, dann könntest du einfach IPSSonos für deine Sprachausgaben verwenden. Ich verwende das wie folgt beschrieben und bin damit SEHR zufrieden!
Beispiel:
// Sprachausgabe
$params = array (
"Rooms" => 'Schlafzimmer,Flur', // List of rooms to play the messages
"Volume_Ramp" => 'fast', // Type of volume ramp-up/down: slow, fast
"Text" => 'Ich bin ein Text', // Message
"Type" => 'TTS', // Type of engine: TTS_Simple (Google), TTS (IPS instance)
"TTS_Simple_Language" => 'de', // For TTS_Simple only, possible entries: de, fr, en, en-gb, ... also check google translate service for more languages
"Sound" => '', // Additional sound to play; *.wav/*.mp3 files must be available in the file folder specified in IPSSonos_Configuration
"Sound_Repeat" => '1', // Play the sound for # times
"Sound_Delay" => '10', // Delay in miliseconds; adds a pause after playing a sound
"Sound_Volume_Offset" => '0', // Adjust volume (for sound files only)
);
IPSSonos_PlayMessage($params);
Ich habe mir dazu eine Funktion angelegt, damit kann ich dann in allen Skripten ganz einfach Sprachausgaben machen. Wenn gerade was auf den Sonos läuft, dann wird das gespeichert, dann meine Sprachausgabe mit bestimmter Lautstärke gemacht, dann die alte Lautstärke wiederhergestellt und die alte Playlist oder was auch immer davor war, wiederhergestellt.
Beispiel:
<?
include 'SonosOWN.ips.php';
sprachausgabe_sonos('Flur', 'Die Waschmaschine ist fertig', 'de', 'zzz_doorbell2.mp3');
?>
Dabei wird mir erst ein Signalton (die MP3) abgespielt und dann wird mir der Text vorgelesen.
Das Wav-File wird angelegt. Ohne Bitrate. Wird nicht von z.B. Sonos via Script abgespielt oder es kommt kein Ton.
Von Hand mit VLC wirds abgespielt u. kommt Ton.
Oh, ja. Das erklärt auch, warum die Dateien alle gleich groß waren:D. Habe ich nun korrigiert, aber es gilt dennoch weiterhin: alle Formate (Bitraten) sind mit dem Medienplayer oder Sonos nicht abspielbar.
Momentan verwende ich PHPSonos. Deinen Vorschlag werde ich ausprobieren, aber verwendet IPSSonos nicht ebenfalls TTS_GenerateFile? Verwendest du Windows 8.1?
Besten Dank für deinen Hinweis. Dann scheint es wohl wirklich ein Problem mit Windows 8.1 zu sein. Das sollte sich dann wohl paresy mal anschauen.
Bei IPSSonos kannst du zwei Funktionen verwenden, um dir eine Sprachdatei generieren zu lassen. Zum einen wie oben erwähnt die Funktion IPSSonos_PlayMessage($params) und zum anderen IPSSonos_PlayTTSByRoomSimple(…). Bei der letzten Funktion wird Googles Übersetzungsdienst genutzt. Dort wird die generierte Sprachdatei runtergeladen. Ist somit Betriebssystem unabhängig. Klingt meiner Meinung nach auch ganz gut. Schau dir mal im Wiki das IPSSonos Modul „6.2 Nachrichten ausgeben“ an.
Der von Vitali beschriebene Weg wäre auf jeden Fall ein guter workaround, falls es bei Windows 8.1 und TTS wirklich noch Probleme gibt…
Dazu einfach den von mir beschriebenen Code verwenden, nur TTS in TTS_Simple ändern:
// Sprachausgabe
$params = array (
"Rooms" => 'Schlafzimmer,Flur', // List of rooms to play the messages
"Volume_Ramp" => 'fast', // Type of volume ramp-up/down: slow, fast
"Text" => 'Ich bin ein Text', // Message
"Type" => 'TTS_Simple', // Type of engine: TTS_Simple (Google), TTS (IPS instance)
"TTS_Simple_Language" => 'de', // For TTS_Simple only, possible entries: de, fr, en, en-gb, ... also check google translate service for more languages
"Sound" => '', // Additional sound to play; *.wav/*.mp3 files must be available in the file folder specified in IPSSonos_Configuration
"Sound_Repeat" => '1', // Play the sound for # times
"Sound_Delay" => '10', // Delay in miliseconds; adds a pause after playing a sound
"Sound_Volume_Offset" => '0', // Adjust volume (for sound files only)
);
IPSSonos_PlayMessage($params);
…hab ich selbst einige Zeit so verwendet, bevor ich mir dann eine Stimme gekauft hatte. Klingt nicht schlecht, meiner Meinung nach besser als die Windows TTS.
Danke für eure Tipps. Habe mir die relevanten Zeilen aus IPSSonos genommen und nun einen fast kompatiblen Behelf gebastelt:
function TTS_GenerateFile_Google($InstanzID, $Text, $Filename, $Format){
//Workaround for TTS_GenerateFile problem with Windows 8.1.
// $InstanzID and $Format are ignored
$text_utf8 = urlencode(utf8_encode($Text));
if (strlen($text_utf8)>100) return false; // google throws an error if the text is longer than 100
$mp3 = @file_get_contents('http://translate.google.com/translate_tts?tl=de&ie=UTF-8&q='.$text_utf8);
if((strpos($http_response_header[0], "200") != false)) {
file_put_contents($Filename, $mp3);
return true;
} else {
return false;
}
}
Funktioniert ganz ordentlich, kommt aber an die Qualität meiner gekauften Stimme (Hans von IVONA) nicht ran. Außerdem ist leider bei 100 Zeichen Schluss
Als Ergebnis wird hier eine mp3 Datei und nicht wie im Original eine wav Datei erzeugt.
Aber zumindest funktioniert die Ausgabe in den meisten Fällen wieder … Und ich hoffe auf eine Lösung durch IPS.
Hi,
der Sonos-Workaround ist ja keine Lösung für das eigentliche Problem.
Auch bei mir werden mit Windows Server 2012 R2 mit TTS_GenerateFile nur WAV-Dateien erzeugt, die nicht von üblichen Playern abspielbar sind. Mit einigen wenigen Playern oder auch Konvertierungstools geht es - die Dateien sind also nicht etwa leer oder dergleichen!
Danke für den Workaround und Danke an r4m3u5 für die Zweitdoku im Forum (weil sich bei mir der Bugtracker nur ewig kringelt ohne ein Ergebnis zu liefern…).
Nach dem Upgrade auf Windows 10 ist auch bei mir das Sonos-Schweigen eingetreten und ich hab erstmal stundenlang rumgesucht. Trotzdem bin ich der Meinung, es hat sich gelohnt, denn neben der besseren Bedienbarkeit mit Touchscreen ist die CPU-Auslastung im Leerlauf um einige Prozent abgesunken im Vergleich zum Betrieb mit Windows 7.
Wer übrigens als Stimme Steffi verwendet, kann das Ausgabeformat auch kleiner halten, indem man „48kHz16BitStereo“ durch „22kHz16BitMono“ ersetzt. Das wird etwas schneller berechnet, die Dateigröße schrumpft um ca. 75% und akustisch ist kein Unterschied (Stimmen werden sowieso nur mono generiert und ab 10 kHz passiert im Frequenzgang eh nix mehr).