Raspberry 5, Bookworm & text2speach

Begonnen von Andy_C, 10 Juni 2024, 18:28:07

Vorheriges Thema - Nächstes Thema

Andy_C

Hallo Zusammen,

Ich habe meine Fhem-Umgebung auf den neuen Raspberry 5 umgezogen. Komplette Neuinstallation und Einstellungen und DB vom alten PI verwendet. Soweit hat Alles geklappt, aber das Text2Speach mag nicht...

Da der PI5 keinen Audio-Eingang per Klinkenstecker mehr hat, wollte ich das Ganze gern per Bluetooth machen...

funktioniert: - mplayer -ao pulse http://stream01.iloveradio.de/iloveradio1.mp3
funktioniert: - speaker-test -c2 -twav -l7
funktioniert: - paplay /usr/share/sounds/alsa/Front_Left.wav

text2speach habe ich die konfiguration übernommen. Rein theoretisch würde er abspielen. Allerdings findet er das Device nicht.
Hier das log:

2024.06.10 14:29:16 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:endTime Val:00:00:00
MPlayer UNKNOWN-12 (C) 2000-2023 MPlayer Team
Terminal type `unknown' is not defined.

Playing cache/7eeaf5d31f2d133e877f90996f3fdbad.mp3.
libavformat version 59.27.100 (external)
Audio only file format detected.
Load subtitles in cache/
==========================================================================
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 24000 Hz, 2 ch, s16le, 32.0 kbit/4.17% (ratio: 4000->96000)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==========================================================================
[AO_ALSA] alsa-lib: pcm_hw.c:1722:(snd_pcm_hw_open) open '/dev/snd/pcmC0D0p' failed (-524): Unknown error 524
[AO_ALSA] Playback open error: Unknown error 524
Failed to initialize audio driver 'alsa:device=hw=0.0'
Could not open/initialize audio device -> no sound.
Audio: no sound
Video: no video


Exiting... (End of file)
2024.06.10 14:29:17 4: MyTTS: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.


Über Pulse funktioniert. Ich denke es liegt am Zusammenspiel zwischen Pulse und alsa.... die Hardwareadresse hw:0.0 wird ja nicht gefunden. Ich habe das vor Ewigkeiten gemacht und versucht mich durchzubeißen... von Alsa funktioniert nicht mehr mit Bt bis was weis ich... finde gerade keinen Ansatz und bin da auch nicht wirklich fit. Im Alsamixer erscheinen auch nur die beiden hdmi-Audioquellen... vielleicht hat Jemand einen Tip.


lG, Andy

Wernieman

Du musst pulseaudio mit BT verbinden. Alsa ist tiefer als pulseaudio, mit alsamixer wirst Du deshalb die BT-Quelle niemals sehen können (meines Wissens). Bin da aber auch überhaupt nicht drin ...

Was ich nicht bei Dir sehe, kannst Du per pulseaudio Sachen abspielen?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Andy_C

#2
Hallo Wernieman,

über pulseaudio funktioniert. Da habe ich ja das Beispiel oben eingesetzt:

funktioniert: - mplayer -ao pulse http://stream01.iloveradio.de/iloveradio1.mp3


Evtl hilft das noch?

pi@fhem:~ $ sudo pactl list sinks
Sink #1
        State: SUSPENDED
        Name: bluez_sink.FC_58_FA_22_B4_48.a2dp_sink
        Description: Anker A7908
        Driver: module-bluez5-device.c
        Sample Specification: s16le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 15
        Mute: no
        Volume: front-left: 65536 / 100% / 0.00 dB,   front-right: 65536 / 100% / 0.00 dB
                balance 0.00
        Base Volume: 65536 / 100% / 0.00 dB
        Monitor Source: bluez_sink.FC_58_FA_22_B4_48.a2dp_sink.monitor
        Latency: 0 usec, configured 0 usec
        Flags: HARDWARE DECIBEL_VOLUME LATENCY
        Properties:
                bluetooth.protocol = "a2dp_sink"
                bluetooth.codec = "sbc"
                device.description = "Anker A7908"
                device.string = "FC:58:FA:22:B4:48"
                device.api = "bluez"
                device.class = "sound"
                device.bus = "bluetooth"
                device.form_factor = "headset"
                bluez.path = "/org/bluez/hci0/dev_FC_58_FA_22_B4_48"
                bluez.class = "0x240404"
                bluez.alias = "Anker A7908"
                bluetooth.battery = "100%"
                device.icon_name = "audio-headset-bluetooth"
                device.intended_roles = "phone"
        Ports:
                headset-output: Headset (type: Headset, priority: 0, availability unknown)
        Active Port: headset-output
        Formats:
                pcm


Im Modul text2speach steht ja viel mit Alsa... so auch das Device mit hw:0.0 .... muss ich das Modul noch mal von vorne machen um Pulseaudio selektieren zu können?

lG, Andy

rob

Hi.

Wie genau hast Du das TTS-Device definiert?
Den konkreten Aufruf legst Du darin über das Attribut "TTS_MplayerCall" fest. Und darin kannst genau den verwenden, der bei Dir bereits auf Cli-Ebene tut.

Beispiel von mir:
define myText2Speech2 Text2Speech hw:1,0
attr myText2Speech2 TTS_Language Deutsch
attr myText2Speech2 TTS_MplayerCall AUDIODEV={device} /usr/bin/play -q -v $(({volume}*{volumeadjust}/10000)).$(({volume}*{volumeadjust}%10000)) {file} 2>/dev/null
attr myText2Speech2 TTS_UseMP3Wrap 1
attr myText2Speech2 TTS_VolumeAdjust 90
attr myText2Speech2 verbose 0


Könnte bei Dir dann vielleicht so aussehen:
attr yourText2Speech TTS_MplayerCall mplayer -ao pulse {file} 2>/dev/null

VG
rob

Andy_C

#4
Hallo Rob,

das ist bei mir wie gesagt uralt und hat bis zum Ende seinen Dienst per Klinke mit dem Raspberry 4 getan....

Attribut: (vielleicht da schon der Fehler?)
TTS_MplayerCall /usr/bin/mplayer

unter Internals steht noch:

ALSADEVICE hw=0.0
DEF   hw=0.0

was mich etwas irritiert hatte und ich dachte... scheint nur über alsa zu gehen.

Da hätte ich nur "-ao pulse" hinzugefügt:
da werden im Logfile beide ao geschrieben... also ein guter Ansatz....
MyTTS: /usr/bin/mplayer -ao pulse -ao alsa:device=hw=0.0.....
und hier das kompette komando:
2024.06.10 23:16:48 4: MyTTS: MaxChar = 200, Delimiter = (?<=[\.!?])\s*, ForceSplit = 0, AddDelimiter =
2024.06.10 23:16:48 4: MyTTS: Auflistung der Textbausteine nach Aufbereitung:
2024.06.10 23:16:48 4: MyTTS: 0 => Das ist ein Test.
2024.06.10 23:16:48 4: MyTTS: 1 => Jetzt prüfen wir, ob wir etwas aus dem angeschlossenen Lautsprecher hören.
2024.06.10 23:16:48 4: MyTTS: 2 => Beim ersten Mal haben wir allerdings noch Sprechpausen.
2024.06.10 23:16:48 4: MyTTS: 3 => Spätestens beim zweiten Durchlauf ist der Textfluss flüssiger.
2024.06.10 23:16:49 4: MyTTS: Verwende TTS Spracheinstellung: Deutsch
2024.06.10 23:16:49 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: f54bc089ed1c5253e8d782cff086d376.mp3
2024.06.10 23:16:49 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: a6764280ff259a96af57fd1dbf8a118f.mp3
2024.06.10 23:16:49 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: fbe6848ac890dd0345fa646c10be4cb2.mp3
2024.06.10 23:16:49 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 276a08c43182a7fc1af742eb085b8c9e.mp3
2024.06.10 23:16:49 4: MyTTS: Bearbeite per MP3Wrap jetzt den Text: Das ist ein Test. Jetzt prüfen wir, ob wir etwas aus dem angeschlossenen Lautsprecher hören. Beim ersten Mal haben wir a>
2024.06.10 23:16:49 4: MyTTS: cache/e797875fd0ef59ddca4ad6fd04652ed3.mp3 hat eine Länge von 16 Sekunden.
2024.06.10 23:16:49 4: MyTTS: mplayer -ao pulse {file} 2>/dev/null -ao alsa:device=hw=0.0  -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 100 cache/e797875fd0ef59ddca4ad6fd04>
2024.06.10 23:16:49 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:duration Val:16
2024.06.10 23:16:49 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:endTime Val:00:00:00
MPlayer UNKNOWN-12 (C) 2000-2023 MPlayer Team
Terminal type `unknown' is not defined.

Playing {file}.


Playing cache/e797875fd0ef59ddca4ad6fd04652ed3.mp3.
libavformat version 59.27.100 (external)
Audio only file format detected.
Load subtitles in cache/
==========================================================================
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 24000 Hz, 2 ch, s16le, 64.0 kbit/8.33% (ratio: 8000->96000)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==========================================================================
Audio: no sound
Video: no video


Exiting... (End of file)
2024.06.10 23:16:49 4: MyTTS: Es wurden alle Teile ausgegeben und der Befehl ist abgearbeitet.

lG, Andy

Otto123

Hi,
Was zeigtaplay -l?
Und ist pulseaudio denn für User fhem eingerichtet?
Funktioniert dein Test als user fhem?
sudo -u fhem mplayer...
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Andy_C

Hallo Otto,




aplay -l:

**** List of PLAYBACK Hardware Devices ****
card 0: vc4hdmi0 [vc4-hdmi-0], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: vc4hdmi1 [vc4-hdmi-1], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0


sudo -u fhem mplayer (funktioniert):

sudo -u fhem mplayer
MPlayer UNKNOWN-12 (C) 2000-2023 MPlayer Team
Usage:   mplayer [options] [url|path/]filename

Basic options: (complete list in the man page)
 -vo <drv>        select video output driver ('-vo help' for a list)
 -ao <drv>        select audio output driver ('-ao help' for a list)
 vcd://<trackno>  play (S)VCD (Super Video CD) track (raw device, no mount)
 dvd://<titleno>  play DVD title from device instead of plain file
 -alang/-slang    select DVD audio/subtitle language (by 2-char country code)
 -ss <position>   seek to given (seconds or hh:mm:ss) position
 -nosound         do not play sound
 -fs              fullscreen playback (or -vm, -zoom, details in the man page)
 -x <x> -y <y>    set display resolution (for use with -vm or -zoom)
 -sub <file>      specify subtitle file to use (also see -subfps, -subdelay)
 -playlist <file> specify playlist file
 -vid x -aid y    select video (x) and audio (y) stream to play
 -fps x -srate y  change video (x fps) and audio (y Hz) rate
 -pp <quality>    enable postprocessing filter (details in the man page)
 -framedrop       enable frame dropping (for slow machines)

Basic keys: (complete list in the man page, also check input.conf)
 <-  or  ->       seek backward/forward 10 seconds
 down or up       seek backward/forward  1 minute
 pgdown or pgup   seek backward/forward 10 minutes
 < or >           step backward/forward in playlist
 p or SPACE       pause movie (press any key to continue)
 q or ESC         stop playing and quit program
 + or -           adjust audio delay by +/- 0.1 second
 o                cycle OSD mode:  none / seekbar / seekbar + timer
 * or /           increase or decrease PCM volume
 x or z           adjust subtitle delay by +/- 0.1 second
 r or t           adjust subtitle position up/down, also see -vf expand

 * * * SEE THE MAN PAGE FOR DETAILS, FURTHER (ADVANCED) OPTIONS AND KEYS * * *

lG, Andy

Otto123

#7
Müsste man nicht bei aplay das pulseaudio device sehen - wenn das über ein alsa device und Text2speech funktionieren soll?

Und ich meinte nicht nur den Aufruf mplayer, ich meinte den kompletten Aufruf der bei Dir Sound ausgibt!

In meinen bisherigen Versuchen hatte pulseaudio nichts mit alsa zu tun, aber kann sein ich habe es nie verstanden. Der Ansatz von rob mit dem TTS_MplayerCall könnte funktionieren , wenn fhem das darf.
Ich hatte hier Mal pulseaudio Server eingerichtet. Ich glaube ich habe es noch nicht mit Text2speech in Betrieb genommen.
Soweit ich weiß, wird pulseaudio device aber nur für den aktiven user eingerichtet. Will man es userunabhängig machen, muss man pulseaudio Server einrichten.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Andy_C

Hallo Otto,

mittlerweile bin ich etwas weiter:

ich muss unter def nicht die Hardware hw:0,0 angeben, sondern default... hatte ich im Wiki überlesen. Dann ist das 2te device raus ud ich kann es mit der Comadozeile eingeben. Das Kommando kommt jetzt richtig raus... aber er kennt pulse da auch nicht ...

über die Komandozeile funktioniert es:

2024.06.10 23:40:23 4: MyTTS: Verwende TTS Spracheinstellung: Deutsch
2024.06.10 23:40:23 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: f54bc089ed1c5253e8d782cff086d376.mp3
2024.06.10 23:40:23 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: a6764280ff259a96af57fd1dbf8a118f.mp3
2024.06.10 23:40:23 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: fbe6848ac890dd0345fa646c10be4cb2.mp3
2024.06.10 23:40:23 4: MyTTS: Textbaustein ist keine direkte MP3 Datei, ermittle MD5 CacheNamen: 276a08c43182a7fc1af742eb085b8c9e.mp3
2024.06.10 23:40:23 4: MyTTS: Bearbeite per MP3Wrap jetzt den Text: Das ist ein Test. Jetzt prüfen wir, ob wir etwas aus dem angeschlossenen Lautsprecher hören. Beim ersten Mal haben wir a>
2024.06.10 23:40:23 4: MyTTS: cache/e797875fd0ef59ddca4ad6fd04652ed3.mp3 hat eine Länge von 16 Sekunden.
2024.06.10 23:40:23 4: MyTTS: /usr/bin/mplayer -ao pulse   -nolirc -noconsolecontrols -softvol -softvol-max 110 -volume 100 cache/e797875fd0ef59ddca4ad6fd04652ed3.mp3
2024.06.10 23:40:23 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:duration Val:16
2024.06.10 23:40:23 5: MyTTS: readingsSingleUpdateByName: Dev:MyTTS Reading:endTime Val:00:00:00
MPlayer UNKNOWN-12 (C) 2000-2023 MPlayer Team
Terminal type `unknown' is not defined.

Playing cache/e797875fd0ef59ddca4ad6fd04652ed3.mp3.
libavformat version 59.27.100 (external)
Audio only file format detected.
Load subtitles in cache/
==========================================================================
Opening audio decoder: [mpg123] MPEG 1.0/2.0/2.5 layers I, II, III
AUDIO: 24000 Hz, 2 ch, s16le, 64.0 kbit/8.33% (ratio: 8000->96000)
Selected audio codec: [mpg123] afm: mpg123 (MPEG 1.0/2.0/2.5 layers I, II, III)
==========================================================================
AO: [pulse] Init failed: Access denied
Failed to initialize audio driver 'pulse'
Could not open/initialize audio device -> no sound.
Audio: no sound
Video: no video


lG, Andy

Otto123

#9
ZitatAccess denied
ich denke meine Vermutung mit dem user ist richtig. Ich habe oben noch editiert, lies bitte den Beitrag noch einmal.
Zitatüber die Komandozeile funktioniert es:
als user fhem?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Andy_C

#10
Hallo Otto,
genau so sieht es aus...

als User "pi" funktiert es und als root... als User fhem nicht.... definitiv eine Rechtesache....


Bei aplay -l sehe ich weder als "pi", nocht als "root" das device


lG, Andy

Andy_C

#11
Pulseaudio läuft als Multiuser-Service:
pulseaudio.service:
[Unit]
Description=PulseAudio Sound System
Before=sound.target
[Service]
BusName=org.pulseaudio.Server
ExecStart=/usr/bin/pulseaudio
Restart=always
[Install]
WantedBy=multi-user.target


bei den Usern root und pi befindet sich die config im home verzeichnis.:
pi@fhem:~ $ ls ~/.config/pulse/
57b844dfaa7948d48d545e76d1eb8977-card-database.tdb  57b844dfaa7948d48d545e76d1eb8977-default-source      57b844dfaa7948d48d545e76d1eb8977-runtime             cookie
57b844dfaa7948d48d545e76d1eb8977-default-sink       57b844dfaa7948d48d545e76d1eb8977-device-volumes.tdb  57b844dfaa7948d48d545e76d1eb8977-stream-volumes.tdb
pi@fhem:~ $ sudo su
root@fhem:/home/pi# ls ~/.config/pulse/
57b844dfaa7948d48d545e76d1eb8977-card-database.tdb  57b844dfaa7948d48d545e76d1eb8977-default-source      57b844dfaa7948d48d545e76d1eb8977-runtime             cookie
57b844dfaa7948d48d545e76d1eb8977-default-sink       57b844dfaa7948d48d545e76d1eb8977-device-volumes.tdb  57b844dfaa7948d48d545e76d1eb8977-stream-volumes.tdb
root@fhem:/home/pi#


lG, Andy

Otto123

Moin,
Das Homeverzeichnis von fhem ist /opt/fhem - ich weiß nicht ob es ein Weg ist die config einfach dort zur Verfügung zu stellen.
Weiterhin gab es eine Gruppe pulse wegen Berechtigung an Pulseaudio? Ob die relevant ist kann ich aber auch nicht sagen.
Ich kann derzeit nicht testen, nur in meinen Gedanken kramen  ;)
Du kannst jederzeit die Funktion einfach testen in dem Du deinen mplayer Aufruf in Anführungszeichen in der Kommandozeile von FHEM absetzt und musst nicht den Umweg über T2S gehen.

Grüße von der kalten, verregneten Nordsee  :-\
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Andy_C

#13
Hallo Otto,

hab so Einiges getestet...

nachdem ich nicht vorwärts kam habe ich fhem zum Test ein Login gegönnt. Danach wurde auch unter /usr/fhem/.config/pulse/ angelegt...
allerdings mit weniger Daten und ich habe das gleiche Ergebnis... AO: [pulse] Init failed: Access denied

fhem@fhem:~/.config/pulse$ ls -l
total 4
lrwxrwxrwx 1 fhem dialout  23 Jun 11 17:04 57b844dfaa7948d48d545e76d1eb8977-runtime -> /tmp/pulse-pMcD6769qbiF
-rw------- 1 fhem dialout 256 Jun 11 16:50 cookie

Fhem ist in der Gruppe audio & pulse....

Danke für den Tip ohne den Umweg text2speach... allerdings klappt das ja auch erst wenn das Rechteproblem gelöst werden kann.

lG, Andy

Wernieman

Vergleiche doch mal die Reche von fhem und pi ....
groups fhem
groups pi

Hinweis: Bitte nicht ohne Nachdenken die Rechte gleich setzen! Bitte immer nachdenken vor dem Umsetzen. Sonst ist das System schnell "kaputkonfiguriert"
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html