NEWS
Längenbegrenzung im Datenpunkt alexa2.0....Commands.speak ?
-
<speak> Amtliche WARNUNG vor STARKEM GEWITTER. Es treten Gewitter auf. Dabei gibt es Sturmböen mit Geschwindigkeiten bis 70 k m h (20 Meter pro Sekunde , 38 Knoten , Beaufort 8) sowie Starkregen mit Niederschlagsmengen bis 25 Liter pro Quadratmeter pro Stunde und kleinkörnigen Hagel. </speak>
in den DP ssml:
Dort ist die Grenze ~ 10000 Zeichen.
-
@mcu
Den ssml Datenpukt verwende ich nicht.
Bisher habe ich es so gemacht und das funktiniert auch (also ohne die xml-Tags)
Wenn ich den Text von oben versuche einzugeben, also so:
Dann wird (wenn ich den String manuell wie oben eingebe) der Datenpunkt zwar beschrieben, aber der Echo-Dot bleibt still:
Wenn ich den Datenpunkt über Java-Script setzen würde, dann würde gar nichts passieren und es steht weiterhin der erste Text (der mit der Waschmaschine) im Datenpunkt.
Ich habe manuell auch mal versucht die xml-Tags mit einzubauen, aber gleiches Ergebnis.So ich habe mal rumexperimentiert.
Der Datenpunkt ...command.speak kann scheinbar tatsächlich nur 255 Zeichen.
Das war früher definitiv anders (ich verwende die aktuelle Alexa2 Version)
@apollon77: Kann man das wieder ändern? Also den Datenpunkt von der Stringlänge her erweitern?
Oder anders gefragt: Wie bekomme ich diese langen Texte durchgesagt?
Ich könnte die zwar splitten, aber ich muss dann den Dot nacheinander mit den Textfragmenten ansteuern und weiss ja dann nicht wann er mit dem Ersten fertig ist. Es wird in keinem Fall einen Satz ohne Unterbrechung ergeben...Ich könnte jetzt alle Scripte auf ssml umstellen habe, aber keine Erfahrung mit dem Datenpunkt und laufe vielleicht in neue Probem. Ist DP identisch mit speak?
Bzw. was macht der Anders? Wie kann ich hier die Lautstärke mitgeben?
Gruss Ralf -
@derrapf sagte in Längenbegrenzung im Datenpunkt alexa2.0....Commands.speak ?:
@apollon77: Kann man das wieder ändern? Also den Datenpunkt von der Stringlänge her erweitern?
Also ich zitiere mal aus der Adapter Readme:
Detailed information Speak and Announcement: Type in here what you want Alexa to say. You can also adjust the volume of Alexa by giving a percentage before your text. Example: 10;Alexa is saying Alexa with 10% volume, while 100;Alexa is 100% volume. Normally you only can send 250 characters per speak command. By using the semicolon it is possible to write as much as you want, as long as you separate 250 characters with a semicolon. Alexa will then speak the text after each other with a small break. You also can use the volume together with more 255 blocks by writing #Volume;#Block1;#Block2, a.s.o A volume set here will be used over a defined speak-volume.
Und das ist schon immer so. Frage damit beantwortet?
-
@derrapf ssml Volume mitgeben:
// mögliche Werte // silent, x-soft, soft, medium, loud, x-loud <speak><prosody volume="loud">Test Nachricht</prosody></speak>
-
@apollon77 sagte in Längenbegrenzung im Datenpunkt alexa2.0....Commands.speak ?:
Und das ist schon immer so. Frage damit beantwortet?
Im Grunde ja. Nur frage ich mich warum das früher ohne die Semikolons geklappt hat. Der Adapter hat ja jahrelang die DWD Nachrichten an den Echo-dot geschickt und der hat diese riesigen Texte auch brav vorgelesen. Irgend wann mal hat das dann aufgehört.
Da komme ich natürlich nicht auf die Idee die Syntax des zu sprechenden Textes zu hinterfragen.
Aber Ok.
Ich versuch dann mal die Scripte umzustellen und diese Blöcke zu generieren.
Danke
Gruss Ralf -
@derrapf Das kann ich Dir gerade nicht sagen.
-
@apollon77
Funktioniert.
By the way: Hab mal versuchsweise die Funktion zum Splitten des Texts und einbauen der Semikolons von ChatGPT machen lassen. Was soll ich sagen: Das hat auf Anhieb funktioniert. Spooky das Ding.Gruss Ralf
-
-
@derrapf Stellst du dann auch bitte das Script rein von ChatGPT, damit andere es nutzen können. Danke.
-
@mcu Gerne hier ist es
function prepareTextforAlexa(text) { if (typeof text !== 'string') { throw new Error('Input must be a string.'); } const maxLength = 250; const words = text.match(/\S+/g); let combinedText = ''; let currentPart = ''; for (let i = 0; i < words.length; i++) { const word = words[i]; if ((currentPart.length + word.length + 1) <= maxLength) { currentPart += word + ' '; } else { combinedText += currentPart.trim() + '; '; currentPart = word + ' '; } } combinedText += currentPart.trim(); return combinedText; }
Gruss Ralf