Habe leider festgestellt, dass die Polly SSML-Tags im Standardmodul nicht funktionieren.
Damit SSML-Tags funktionieren, muss man in der Datei C:\ProgramData\Symcon\modules.store\de.symcon.ttsawspolly\TTSAWSPolly\module.php eine kleine Ergänzung vornehmen. Hierzu einfach die Zeile mit
'TextType' => 'ssml',
hinzufügen. Das sieht dann so aus:
SSML ermöglicht es Texte mit verschiedenen Emotionen oder geflüstert auszugeben (z.B. abends).
Ein Beispiel wäre <speak><amazon:effect name="whispered">Ich flüstere jetzt mit Dir</amazon:effect></speak>
oder mit aufgeregter Stimme: <speak><amazon:emotion name="excited" intensity="high">Guten Morgen! Wie geht es Dir?</amazon:emotion></speak>
Den kompletten SSML Umfang kann man hier finden: https://docs.aws.amazon.com/de_de/polly/latest/dg/supportedtags.html#whispered-tag
P.S. Alexa im EchoRemote-Modul kann diese Tags von Haus aus…
Gruß
Daniel
Hallo Gemeinde,
ich versuche mich seit Wochen an der Problematik, leider ohne Erfolg.
Alle Ratschläge aus den Beiträgen habe ich umgesetzt.
Systemdienst als Benutzer, Wav im 8K-Mono.
Beim Ausführen des nachfolgenden Codes erscheint keine Fehlermeldung, Die Datei wird auf der Share erzeugt, die laufende Musik wird unterbrochen, dann herrscht Ruhe, danach spielt die Musik mit der voreingestellten Lautstärke weiter.
Die gleiche Datei lässt sich aber mit VoIP_PlayWave ohne Probleme auf einem Telefon abspielen.
Hallo
Ich speichere die Datei nicht auf eine Windows Freigabe sondern
in ein Webfront-User Ordner.
http://… funktioniert auch als $files Variable.
Laut Doku:
Auf den in Symcon integrierten Webserver zuzugreifen ist auch meiner Meinung nach die eleganteste Lösung. Da brauchst du dich um Shares und Zugriffsrechte nicht zu kümmern.
Lediglich auf die korrekten Pfade musst du dich dabei konzentrieren
Vielleicht hilft dir mein Testbeispiel weiter:
<?php
declare(strict_types=1);
$text = 'Dies ist ein Test. Nicht schlecht Herr Specht.';
$mp3Filename = replace_chars($text) . '.mp3';
$file = TTSAWSPOLLY_GenerateFile(27789, $text);
$filename = IPS_GetKernelDir() . 'webfront' . DIRECTORY_SEPARATOR . 'user' . DIRECTORY_SEPARATOR . 'polly' . DIRECTORY_SEPARATOR . $mp3Filename;
rename($file, $filename);
echo sprintf('File: %s, FileName: %s', $file, 'http://nuc:3777/user/polly/' . $mp3Filename);
SNS_PlayFiles(13088, json_encode(['http://nuc:3777/user/polly/' . $mp3Filename]), '0');
//-----------------------------------------------
// siehe hier: https://stackoverflow.com/questions/10444885/php-replace-foreign-characters-in-a-string
function replace_chars($fileSyntax)
{
return strtolower(
preg_replace(
[
'/&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);/i',
"/[^a-zA-Z0-9\s-]/i",
"/\s+/"
],
[
'$1', // remove foreign character accents
'', // remove anything that's not alphanumeric, hyphen or a space
'_' // replace space with underscore
],
htmlentities($fileSyntax, ENT_QUOTES, 'UTF-8')
)
);
}
ich nutze in einem System das Modul über den Modulstore installiert und einmal direkt auf dem Github von Thorsten installiert.
Modul Store= > $mp3_file = TTSAWSPOLLY_GenerateFile(50341, $notification);
github = > $mp3_file = POLLY_saveMP3(13135, $notification );
Bei dem System installiert über github wird SSML korrekt interpretiert. Beim dem System aus Modulstore wird jedes Zeichen vorgelesen ohne interpretation von SSML.
Hier mein Text (aus AWS Doku):
$notification = ‚Ich muss Ihnen ein Geheimnis erzählen, ich werde es Ihnen zuflüstern.<amazon:effect name=„whispered“> Ich bin kein Mensch.</amazon:effect>Können Sie das glauben?‘;
Die Frage ist doch eher, was möchtest du erreichen? Polly erstellt schöne WAV/MP3 Dateien, welche du dann z.B. über Sonos, Alexa oder VoIP ansagen lassen kannst. Oder du sendest dir diese per E-Mail wie eine Art AB Antwort.
Guten Morgen,
ich suche hier bereits eine Weile, finde aber den Thread nicht mehr… Ich hatte gelesen, dass der Polly und Sonos bei einer Symbox einen anderen Workarround haben soll als bei Serverinstallationen. Das hatte etwas damit zu tun, dass bei der Symbox ein Verfahren ohne Zwischenspeichern (Haltbarkeit des Flash) genutzt werden sollte.
Kann mir jemand den Workarround für die Sprachausgabe via polly und Sonos für eine Symbox beschreiben?
Kann ich von POLLY_getMP3 über eine variable direkt an Sonos (ohne Zwischenspeichern) übergeben? Ich hatte mal was über die http-Speicher-Variante gelesen, bin mir aber nicht sicher, ob die hier der richtige Ansatz ist.
Ich glaube eine Code-Beispiel würde mir sehr helfen. Die Module sind installiert und die Sprachausgabe geht ebenfalls über die Testfunktion im Modul
Mir fehlt allerdings der Ansatz für ein Skript für die Symbox.