Hallo zusammen,
gibt es für IPS/Raspberry bereits eine Möglichkeit, Durchsagen (mit TTS) über Sonos zu machen? Ich hatte eigentlich an diese Lösung gedacht. Sie setzt aber die Funktion „TTS_GenerateFile“ voraus, die unter Linux wohl noch nicht zur Verfügung steht. Da ich neben den Durchsagen keine anderen Sonos-Funktionen benötige, sollte die Umsetzung möglichst schlank sein.
wie hast du denn deine Sonos Schnittstelle bisher umgesetzt? Soweit ich weiß benutzt das IPSSonos Skript google zur Sprachumwandlung: IPSSonos – IP-Symcon
Ansonsten wirst du dich noch etwas auf Text to Speech für die Linuxversion gedulden müssen.
Wie gucky schon sagte, würde ich dir ebenfalls zu IPSSonos raten. Damit kann man mit „TTS_Simple“ die Text2Speech „Funktion“ von Google verwenden, zur Sprachausgabe über Sonos. Hab ich auch einige Zeit gemacht und hat wirklich gut funktioniert.
Hallo Chris und gucky,
IPSSonos hatte ich mir auch schon kurz angeschaut, war dann aber etwas zurückgeschreckt, weil dafür ja die IPSLibrary installiert sein muss. Und nur für Durchsagen erschien mir das Gesamtpaket aus IPSLibrary und IPSSonos doch sehr groß.
Läuft beides auch auf dem Raspberry schon gut?
Brownson hat erst gestern irgendwo geschrieben, dass die IPSLibrary aufm Raspi mittlerweile (bis auf ein paar Ausnahmen) laufen soll.
Aber du kannst dir auch einfach nur die entsprechenden Funktionen/Abschnitte aus IPSSonos selbst suchen, welche für die Google-Speech-Geschichte notwendig sind, und dir eine eigene Funktion bauen. Ist vermutlich für dich der schnellere und einfachere Weg…bissi Text kopieren ist ja nicht so schwer
Ich habe gestern mal spaßeshalber versucht, die IPSLibrary zu installieren. Der Baseloader lief auch komplett durch. Es traten dann aber Fehlermeldungen im Zusammenhang mit HTTP_HOST auf (dies liegt laut paresy wohl daran, dass die IPS-beta bisher nur http-get unterstützt Link). Es gibt zwar einen Workaround von Brownson, um trotzdem Module installeren zu können, aber davon habe ich dann erstmal abgesehen. Kurzum, ich habe die Library erstmal wieder deinstalliert. Entweder warte ich jetzt erstmal ab oder ich versuche (temporär) mit PHPSonos weiterzukommen.
Ich generiere das File auf dem IPS-Windows-Server und übertrage die URL des Files per RPC an die Himbeere und lasse es dann abspielen. Allerdings nutze ich auf der RPI nicht Sonos sonder arbeite über MPD/MPC.
Bei Interesse kann ich auch einige Script-Snippets zur Verfügung stellen. Das gesamte Projekt (generalisierte Entwicklung von plattformunabhängigen Remoten Mediaplayer-Klassen ist leider noch nicht so gut dokumentiert, um es hier zu veröffentlichen.
Vielleicht hilft Dir der Tip aber auch schon weiter.
Hallo Chris,
vielen Dank für den Tipp. Ich habe schon mal angefangen, die Skripte einzubinden. Das mp3-File wird schon erzeugt, es gibt aber noch Fehler bei der Ansteuerung von Sonos. Ich werde mir das am Wochenende weiter anschauen.
@Bonox: danke für die Infos. Bei Bedarf komme ich drauf zurück.
Ich benutze ein ähnliches Skript, habe aber noch ein Caching eingebaut damit die Datei nicht jedes mal von Google geladen werden muss. Häufig sind es ja doch immer die gleichen Ausgaben die man haben will.
define("CACHEPATH", "c:\ip-symcon\webfront\user\ ts-cache\\");
define("URLPATH", "http://ips:82/user/tts-cache/");
function speak($q, $emergency = false) {
if ($q) {
$q = substr($q,0,100); // Translate nimmt max. 100 Zeichen entgegen
$umlaute = array("ä", "ö", "ü","Ä","Ö","Ü","ß"); // Und kommt mit Umlauten nicht klar
$doppelbuchstaben = array("ae", "oe", "ue","AE","OE","UE","ss");
$q = str_replace ($umlaute,$doppelbuchstaben,$q);
$hash = md5($q);
$file = CACHEPATH.$hash.".mp3";
$weburl = URLPATH.$hash.".mp3";
if (file_exists($file)) {
echo("File '".$file."' existiert und wird aus Cache wiedergegeben.");
} else {
$url = "http://translate.google.com/translate_tts?q=" . urlencode($q) . "&tl=de";
$mp3 = @file_get_contents($url);
if ($mp3 === FALSE) {
// Download fehlgeschlagen
$weburl = URLPATH."e48d80e84eef496a38bb6f10c09c4e89.mp3"; // Gespeicherte Datei "Download fehlgeschlagen"
} else {
// Download erfolgreich
file_put_contents($file, $mp3);
//echo("File unter ".$file." gespeichert.");
}
}
return $url;
}
}