Problem mit TTS_GenerateFile

Hallo zusammen und allen ein Frohes Neues Jahr!

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:

define ('ID_MEDIA_PLAYER', 25632 /*[Media Player]*/);
define ('ID_TTS', 48355 /*[Text To Speech]*/);

$testfile = IPS_GetKernelDir()."/sounds/meintest.wav";

TTS_GenerateFile(ID_TTS, 'Es ist 14 Uhr', $testfile, 0);
WAC_PlayFile(ID_MEDIA_PLAYER, $testfile);

Kennt jemand das Problem?

Viele Grüße

Burkhard

Probier mal:



TTS_GenerateFile(ID_TTS, 'Es ist 14 Uhr', $testfile, 39); 

Danke für den Tipp. Bin nun mal alle Formate durchgegangen:

	for ($i=6; $i<=39; $i++){
		TTS_GenerateFile(ID_TTS, 'Es ist 14 Uhr', IPS_GetKernelDir()."/sounds/meintest_".$i.".wav", 39);
	}

Leider ohne Erfolg: bei keiner Datei wird die Bitrate im Explorer angezeigt. Interessanterweise sind auch alle Dateien gleich groß:confused:

Welche Umgebung hast du?

Viele Grüße

Burkhard

Ich arbeite noch mit Windows 7.

Deine Schleife ist übrigens falsch, die Zahl am Ende ist doch die Bitrate.

Hallo Burkhard,

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.

Grüße,
Chris

Unter Windows 7 ging auch bei mir noch alles.

Kann vielleicht jemand mit Windows 8.1 das Problem bestätigen?

Kann ich bestätigen. Win8.1 - IPS 3.3 #3595

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.

Viele Grüße

Burkhard

Ich würde niemals freiwillig auf Windows 8 umsteigen :wink: :stuck_out_tongue: Ich verwende demnach Windows 7.

Hab mal nachgesehen, und ja, hast leider recht, IPSSonos macht es auch so…
…hier die Zeile aus IPSSonos:

TTS_GenerateFile( (int) $MessageConfig[IPSSONOS_VAR_TTSID] , $params["Text"], $file, 39);

Grüße,
Chris

Hi Burkhard.

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.

Grüße

Vitali

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.

Grüße,
Chris

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 :frowning:
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.

Viele Grüße

Burkhard

Für die Begrenzungen werde ich noch eine Lösung posten, die ich verwende

So, wie zuvor angekündigt findet ihr die Lösung hier
IPSSonos - Seite 14

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!

@paresy, könntest du hier bitte mal nachschauen?

Das Problem ist leider auch unter Windows 10 noch immer offen:(

Gruß

Burkhard

Hallo bumaas,

wir mussten das TTS Modul komplett überarbeiten, das ist schon in der 4.0 Beta funktionsfähig. Für die 3.4 wird es dazu leider keinen Fix mehr geben.

Gruß,
gucky

Besten Dank für die Info. Ich kann warten :slight_smile:
Es gibt ja einen Workaraound …

Viele Grüße

Burkhard

Hallo bumaas,

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).