NEWS
Sprachausgabe mit sayit auf 3.5mm Buchse funktioniert nicht
-
Ich versuche es nochmal neu, nachdem ich nun Tage lang wirklich alles gelesen und versucht habe (weitere sayit-Instanz, Konfigurationsdatei Alsa-Mixer mit neuem default-Ausgang, iob-Fixer, sayit-Adapter neu installiert, etc. etc.)
Ergebnis: Exakt identisches Fehlverhalten.Ausgangssituation: Aktuelle iob Installation auf Raspi4.
Problem: Die Sprachausgabe aus einem Blockly Script scheint alles richtig zu machen, zumindest die Logausgaben auf debug-Level legen das nahe.
ABER: die von sayit ausgeführten Kommandos (Execute...) erzeugen im iob Log nur "errors", die eigentlich keine sind, denn es sind genau die selben Rückmeldungen, die die aufgerufenen Kommandos auch auf der Kommandozeile geben wenn ich das jeweilige Kommando aus dem iob Log kopiere und ausführe.
Bei der Blockly-gesteuerten Wiedergabe des auszugebenden Textes wird der Text von sayit mittels PicoTTS zunächst in eine wav geschrieben und dann korrekt in /opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3 gewandelt und geschrieben und soll danach
über mpg123 oder mpg321 (Ergebnis ist identisch) wiedergegeben werden.
Was mich nun wundert, sind folgende Punkte:- warum sind alle Log-Ausgaben von sayit als "error" deklariert, wenn doch die dahinter stehenden Kommandos korrekt abgearbeitet werden? (zumindest bis zur Erzeugung einer mp3 Datei)
- warum funktioniert die Wiedergabe der mp3 datei durch sayit nicht (kein Ton), obwohl der mp3-Player ja aufgerufen wird (und laut Log 1,5 Sekunden läuft) und das von sayit geloggte Kommando auf der Kommandozeile eingegeben funktioniert (Wiedergabe mit Ton)?
Hier noch ein paar Screenshots und Logs. Vielleicht hat ja jemand eine Idee die mich vor der Verzweiflung rettet
admin.0 2025-01-07 08:59:24.646 info <== Disconnect system.user.admin from ::ffff:192.168.10.23 javascript sayit.0 2025-01-07 08:58:01.884 error stderr: [0:01] Decoding of sayit.0.say.mp3 finished. sayit.0 2025-01-07 08:58:00.380 error stderr: MPEG 2.0 L III cbr24 16000 mono sayit.0 2025-01-07 08:58:00.377 error stderr: Directory: /opt/iobroker/iobroker-data/sayit/Playing MPEG stream 1 of 1: sayit.0.say.mp3 ... sayit.0 2025-01-07 08:58:00.350 error stderr: High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3 version 1.31.2; written and copyright by Michael Hipp and others free software (LGPL) without any warranty but with best wishes sayit.0 2025-01-07 08:58:00.342 debug Execute mpg123 /opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3 sayit.0 2025-01-07 08:58:00.272 error stderr: 47/47 (100%)| 0:00/ 0:00| 0:00/ 0:00| 102.04x| 0:00 ------------------------------------------------------------------------------- kbps mono % long switch short % 24.0 100.0 93.6 4.3 2.1 ReplayGain: -4.5dB sayit.0 2025-01-07 08:58:00.271 error stderr: [A[A[A sayit.0 2025-01-07 08:58:00.256 error stderr: [A[A[A 0/47 ( 0%)| 0:00/ 0:00| 0:00/ 0:00| 0.0000x| 0:00 00:01-------------------------------------------------------------------------- kbps % % 0.0 sayit.0 2025-01-07 08:58:00.255 error stderr: LAME 3.100 64bits (http://lame.sf.net)Using polyphase lowpass filter, transition band: 5742 Hz - 5935 HzEncoding /opt/iobroker/node_modules/iobroker.sayit/lib/say.wav to /opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3Encoding as 16 kHz single-ch MPEG-2 Layer III (10.7x) 24 kbps qval=3 Frame | CPU time/estim | REAL time/estim | play/CPU | ETA 0/ ( 0%)| 0:00/ : | 0:00/ : | x| : 00:01-------------------------------------------------------------------------- kbps % % 0.0 sayit.0 2025-01-07 08:58:00.207 info saying: Es ist kurz vor neun javascript.0 2025-01-07 08:58:00.201 info script.js.Tests.TTS-Test: Eine Minute später
-
@purehunter Hast Du Dir schon die erzeugten Audiodateien angesehen?
Lassen die sich auf dem Raspberry abspielen?
Wenn nicht, auf dem PC, nach dem Herunterladen?Man sollte ein großes Problem eingrenzen, um den Fehler zu finden.
Wenn die Dateien o. k. sind, würde ich schauen, ob sie mit dem Pi unter Umgehung von Sayit direkt ausgespielt werden können.
Bei einen "Mixer" kann auch simpel der Regler des Mixer - Kanals ganz unten stehen ... hast Du das schon nachgeschaut?
-
In deinem Text habe ich jetzt keinen Hinweis aus deiner Überschrift gefunden.
Also ist das Problem das die mp3 nicht auf Klinke ausgegeben wird? -
Das hatte ich ja alles beschrieben ging in der Menge vielleicht unter.
Es wird eine mp3 mit dem korrekten Inhalt erzeugt:
/opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3gebe ich auf der Konsole
mpg123 /opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3
ein, wird die Uhrzeit wie gewünscht laut und deutlich angesagt.
Genau dieses Komando wird ja von sayit geloggt:
2025-01-07 08:58:00.342 debug Execute mpg123 /opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3
Offensichtlich (Log) wird auch der mp3-Player gestartet; und 1,5 Sekunden später ist er fertig mit der (leider stummen) Wiedergabe:
[0:01] Decoding of sayit.0.say.mp3 finished.
-
-
Also ist das Problem das die mp3 nicht auf Klinke ausgegeben wird?
ganz genau. Aber nur wenn sayit das ganze steuert. Ich kann genau die von sayit erzeugte mp3 mit genau dem selben Kommando wiedergeben lassen. Auf die Klinke.
-
@purehunter Ich kenne mich mit dem Alsamixer nicht aus, aber vielleicht unterstützt der Userspezifische Mixer-Einstellungen.
Der Unterschied zwischen beiden Fällen ist ja, dass es unterschiedliche User sind, die da das Ausspiel starten...
Nach Gruppenzugehörigkeiten der User solltest Du auch schauen.
-
Den Link schaue ich mir gleich mal an.
Bisher habe ich folgendes gemacht:
/etc/alsa.conf angelegt, mit dem Inhalt
defaults.pcm.card 1 defaults.ctl.card 1
in /usr/share/alsa/alsa.conf
Die Zeile
pcm.front cards.pcm.front
geändert in
pcm.front cards.pcm.default
Damit soll Audio auf der Klinke ausgegeben werden. Tut es auch.
-
@martinp said in Sprachausgabe mit sayit auf 3.5mm Buchse funktioniert nicht:
Der Unterschied zwischen beiden Fällen ist ja, dass es unterschiedliche User sind, die da das Ausspiel starten...
Ja, das ist mir klar.
Was mir noch nicht klar ist, wie der Mixer überhaupt ins spiel kommt. Ich habe nirgendwo etwas umkonfiguriert und bin bis jetzt davon ausgegangen, dass der alsa Mixer quasi "default" ist. -
@martinp said in Sprachausgabe mit sayit auf 3.5mm Buchse funktioniert nicht:
Nach Gruppenzugehörigkeiten der User solltest Du auch schauen.
Das habe ich eigentlich schon gemacht. iobroker gehört u.a. zu "audio". Die hätte ich jetzt als die notwendige erachtet.
Aber sämtliche ausführbaren Dateien in /usr/bin/ dürfen ja von "allen" ausgeführt werden. Und auch sonst habe ich keine Hinweise gefunden, dass es ein Rechteproblem gibt.Leider gibt sayit im Log selbst im "debug" Level nichts sinnvolles aus, warum er in einen Fehlerzustand kommt.
-
Den Link mal durchgelesen?
-
@haselchen
Ja. Hatte das Problem, dass auf meinem Lite OS gar kein raspi-config drauf war. Nachinstalliert.
Damit bin ich jetzt auf folgendes (Problem?) gestoßen:
im raspi-config Menü/6/A7 Set Audio Control System
steht "No audio systems installed".
Da ist mir jetzt nicht klar, was das bedeutet. Ich kann ja mp3's abspielen. und hörenNachtrag:
im raspi-config Menü/1/S2
ist bcm2835 ausgewählt. Das ist ja richtig. Habe ich wie oben beschrieben in configs geändert. War ursprünglich hdmi. -
Ich habe jetzt noch Pulseaudio installiert und im raspi-config Menü
/6/A7 Set Audio Control System
aktiviert.
Das hat 2 Fehlermeldungen ausgespuckt:Failed to disable unit, unit pipewire-pulse.service does not exist. Failed to disable unit, unit wireplumber.service does not exist.
Vermutlich einfach, weil die per default deaktiviert werden sollen aber nicht da sind.
Aber auch nach einem Neustart des sayit Adapters und nach einem Reboot hat sich leider nichts verändert.
Wenn ich das was ich in der Kürze der Zeit gelesen habe richtig verstehe, brauche ich Pulseaudio gar nicht, da ja nicht mehrere "Programme" gleichzeitig etwas wiedergeben sollen. Aber schaden wird's hoffentlich auch nicht. -
Es ist definitiv möglich
Hatte vor ein paar Jahren Alexa auf nem Raspi installiert mit Audio Ausgabe über Klinke.
Meine grauen Zellen erinnern sich das es über raspi config und zusammensuchen von Befehlen aus dem Netz ging. -
@haselchen said in Sprachausgabe mit sayit auf 3.5mm Buchse funktioniert nicht:
Hatte vor ein paar Jahren Alexa auf nem Raspi installiert mit Audio Ausgabe über Klinke.
Das stelle ich ja nicht in Frage . Auf meinem Raspi können ALLE Audio wiedergeben, nur der sayit Adapter nicht... und er hilft mir mit seinen Logs auch nicht, das Problem zu lokalisieren
Ich habe gestern eine komplett neue Raspi Desktop OS Installation aufgesetzt, da war dann auch gleich Pulseaudio und Pipewire mit drauf, und auch raspi-config, was ich aber gar nicht vermisst hatte, da ich die configs ja auch selber bearbeiten kann und dabei gleich noch ein paar andere Sachen sehe.
Auf dem neuen unverdorbenen OS iob installiert, plus die gewünschten Adapter, einmal iob fix laufen lassen, und siehe da: dieser sayit Adapter wirft genau die selben (Fehler! - ) Meldungen raus wie auf der alten Installation, während ich von der Kommandozeile aus den mp3 Gong, die vom sayit-Adapter selbst erzeugte Uhrzeit-mp3, oder noch viel tröstlicher, vom Desktop ohne jegliche Umstände mir im Browser "The Police - Every Breath You Take" anhören kannAus meiner jetzigen Sicht hat dieser Adapter ein massives Problem, entweder in der Programmierung oder in der Dokumentation. Auf jeden Fall aber in den "sinnlosen" (error-) Logausschriften die die Fehlersuche zumindest in diesem Fall nicht unterstützen, noch nicht einmal im "debug" Level.
Da ich die Sprachausgabe "nur zum Spaß" für meine selbstentwickelte Wortuhr als Demo verwenden wollte, aber im normalen Leben nicht von Stimmen aus dem Off irritiert werden möchte gebe ich das "Sayit-Experiment" fürs erste auf.
Ansonsten bin ich mit dem iobroker sehr zufrieden, der Einstieg war nach kleinen Anfangsschwierigkeiten erfolgversprechend. Nach ein paar Jahren mit fhem bin ich doch froh, den Umstieg gewagt und erste Automatisierungen mit Blockly implementiert zu haben.Vielen Dank für die Tipps und Hinweise!
-
Nachtrag:
Nachdem ich wieder von der "Lite-OS" SD gebootet habe, spricht der sayit Adapter doch noch mit mir. Hat wohl Angst bekommen, deinstalliert zu werden .
Allerdings werden die Ansagen mit den immer noch gleichen sinnlosen Fehlermeldungen garniert. Nicht schön, aber das Logging lässt sich ja abschaltensayit.0 2025-01-08 09:40:02.148 error stderr: [0:01] Decoding of sayit.0.say.mp3 finished. sayit.0 2025-01-08 09:40:00.340 error stderr: MPEG 2.0 L III cbr24 16000 mono sayit.0 2025-01-08 09:40:00.337 error stderr: Directory: /opt/iobroker/iobroker-data/sayit/ Playing MPEG stream 1 of 1: sayit.0.say.mp3 ... sayit.0 2025-01-08 09:40:00.308 error stderr: High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3 version 1.31.2; written and copyright by Michael Hipp and others free software (LGPL) without any warranty but with best wishes sayit.0 2025-01-08 09:40:00.301 debug Execute mpg123 /opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3 sayit.0 2025-01-08 09:40:00.229 error stderr: 54/54 (100%)| 0:00/ 0:00| 0:00/ 0:00| 98.276x| 0:00 ------------------------------------------------------------------------------- kbps mono % long switch short % 24.0 100.0 94.4 3.7 1.9 ReplayGain: -4.1dB sayit.0 2025-01-08 09:40:00.227 error stderr: [A[A[A sayit.0 2025-01-08 09:40:00.207 error stderr: LAME 3.100 64bits (http://lame.sf.net) Using polyphase lowpass filter, transition band: 5742 Hz - 5935 Hz Encoding /opt/iobroker/node_modules/iobroker.sayit/lib/say.wav to /opt/iobroker/iobroker-data/sayit/sayit.0.say.mp3 Encoding as 16 kHz single-ch MPEG-2 Layer III (10.7x) 24 kbps qval=3 Frame | CPU time/estim | REAL time/estim | play/CPU | ETA 0/ ( 0%)| 0:00/ : | 0:00/ : | x| : 00:01-------------------------------------------------------------------------- kbps % % 0.0 [A[A[A 0/54 ( 0%)| 0:00/ 0:00| 0:00/ 0:00| 0.0000x| 0:00 00:01-------------------------------------------------------------------------- kbps % % 0.0 sayit.0 2025-01-08 09:40:00.161 info saying: Es ist zwanzig vor zehn javascript.0 2025-01-08 09:40:00.151 info script.js.Tests.TTS-Test: Eine Minute später
-
@purehunter Die Fehlermeldungen scheinen aus Ausgaben z. B. des Lame Encoders gebildet zu werden, enthalten ja sogar Steuerzeichen...
Ist daher die Frage, wieso Lame "normale" Ausgaben auf stderr statt auf stdout rausschiebt ...
Wenn Du System Commands verwendest könntest Du da entsprechende Umleitungen in der Custom-Kommandozeile einrichten...
https://github.com/ioBroker/ioBroker.sayit
System command
If you have some program, that can play audio files locally or somewhere else, you can write this command here. E.g.
myCustomPlayer --option
If System output is selected, the sayit adapter will execute the following command on a local system:
myCustomPlayer --option /opt/iobroker/node_modules/iobroker.sayit/say.mp3
If file name must stay somewhere in the middle, you can use %s to specify where the file name must be placed:
myCustomPlayer --option "%s" > /dev/null
sayIt will make myCustomPlayer --option "/opt/iobroker/node_modules/iobroker.sayit/say.mp3" > /dev/null from it.
-
ich verstehe es so, dass der sayit Adapter in einen Fehlerzustand kommt, und er die (normalen) Ausgaben der von ihm aufgerufenen Kommandos als Fehler uminterpretiert.
Die Ausschriften vom mpg123 kann ich damit unterdrücken - Danke für den Tipp!
Für die Ausschriften von LAME habe ich keine Idee, da der intern (fix?) vom sayit Adapter aufgerufen wird und ich auf den Aufruf keinen Einfluss habe und über ein config File lässt er sich anscheinend nicht konfigurieren.Ja, leider kann man die Logs des Adapters nicht ganz abschalten. "Error" ist das mindeste, was geloggt wird. Und das sind ja "Errors".
-
habe in der text2speech.js auf github die Stelle(n) gefunden, wo LAME aufgerufen wird.
try { await this.exec(`lame ${__dirname}/say.wav ${this.MP3FILE}`) } catch (e) { throw new Error(`Cannot create (lame) "say.mp3": ${e}`); }
da noch ein --quiet einzufügen wäre ein leichtes aber daraus wieder einen fertigen Adapter zu basteln geht mir dann doch zu weit.
-
Hmm, wieso wird eigentlich lame jedes Mal aufgerufen, um aus wave files mp3 files zu machen, und diese dann wiederum auszuspielen - wieso werden nicht direkt die wave files ausgespielt? Oder zumindest direkt MP3 Files als Muster angelegt?