Playsound

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
DoctorWho_15
User
Beiträge: 6
Registriert: Sonntag 29. August 2021, 08:35
Kontaktdaten:

Hallo
ich hänge mal wieder an ein Problem fest

Ich habe deb Fehler auch schon eingegrenzt undd es geht um das Modul Playsound

Code: Alles auswählen

import gtts
from playsound import playsound
tts=gtts.gTTS("ich möchte eine Pizza.",lang="de")
tts.save("test.mp3")
playsound("test.mp3")
Die Module gTTS, Playsound, habe ich bereits Installiert
und das Modul pygobject ist bereits istalliert gewesen.

Hier nun die Fehlermeldung:
playsound is relying on another python subprocess. Please use `pip install pygobject` if you want playsound to run more efficiently.
Traceback (most recent call last):
File "/home/pi/.local/lib/python3.7/site-packages/playsound.py", line 261, in <module>
playsound(argv[1])
File "/home/pi/.local/lib/python3.7/site-packages/playsound.py", line 163, in _playsoundNix
gi.require_version('Gst', '1.0')
File "/usr/lib/python3/dist-packages/gi/__init__.py", line 129, in require_version
raise ValueError('Namespace %s not available' % namespace)
ValueError: Namespace Gst not available
Traceback (most recent call last):
File "/media/pi/USB DISK/texttospeech.py", line 5, in <module>
playsound("test.mp3")
File "/home/pi/.local/lib/python3.7/site-packages/playsound.py", line 254, in <lambda>
playsound = lambda sound, block = True: _playsoundAnotherPython('/usr/bin/python3', sound, block, macOS = False)
File "/home/pi/.local/lib/python3.7/site-packages/playsound.py", line 229, in _playsoundAnotherPython
t.join()
File "/home/pi/.local/lib/python3.7/site-packages/playsound.py", line 218, in join
raise self.exc
File "/home/pi/.local/lib/python3.7/site-packages/playsound.py", line 211, in run
self.ret = self._target(*self._args, **self._kwargs)
File "/home/pi/.local/lib/python3.7/site-packages/playsound.py", line 226, in <lambda>
t = PropogatingThread(target = lambda: check_call([otherPython, playsoundPath, _handlePathOSX(sound) if macOS else sound]))
File "/usr/lib/python3.7/subprocess.py", line 347, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/bin/python3', '/home/pi/.local/lib/python3.7/site-packages/playsound.py', 'test.mp3']' returned non-zero exit status 1.
>>>
Ich hoffe mir kann einer sagen wo ich ein Fehler gemacht habe?
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

mal ein Versuch. Wo liegt die test.mp3? Benutze msl absolute Pfade.

Heißt das eig ‚tts.save’ oder ,gtts.save‘?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
DoctorWho_15
User
Beiträge: 6
Registriert: Sonntag 29. August 2021, 08:35
Kontaktdaten:

Hallo Dennis,

Die Datei liegt auf dem USB Laufwerk (/media/pi/USB DISK) und die Datei wird da auch gespeichert.

die MP3 Datei kann ich auch abhören über den VLC Player

Code: Alles auswählen

import gtts
from playsound import playsound
Datei=r"/media/pi/USB DISK/test.mp3"
tts=gtts.gTTS("ich möchte eine Pizza.",lang="de")
tts.save(Datei)
playsound(Datei)
es heisst tts.save da das ergebniss von gtts.GttS gespeichert wird

Der Fehler bleibt also der gleiche.

Gruß Claus
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Ich würde darüber nachdenken ein anderes Modul zu verwenden. Wenn ich das richtig sehe, führt sich das Modul selbst mit Subprocess aus. Das halte ich für ein sehr seltsames Konstrukt.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@Dennis89,
Heißt das eig ‚tts.save’ oder ,gtts.save‘?
Mit

Code: Alles auswählen

tts=gtts.gTTS("ich möchte eine Pizza.",lang="de")
wird eine Instanz der gTTS Klasse erzeugt, hier mit dem Namen "tts". Diese hat eine Instanzmethode "save()" welche den vom gTTS Objekt erzeugten audio stream als mp3 speichert.
Würde man das gTTS Objekt "gtts" nennen, würde man damit das importierte "gtts" Modul überschreiben, was keine gute Idee wäre.

@DoctorWho_15
Das Script funktioniert problemlos auf Windows, hat aber einige Probleme auf Linux (Debian) also auch Raspbian (Raspberry Pi)
Insbesondere "playsound" funktioniert nicht so einfach denn es basiert auf GStreamer.

Informationen findest hier:
https://pypi.org/project/playsound/

und hier:
https://gstreamer.freedesktop.org/docum ... language=c

Auf meinem Kubuntu Linux hat es nach der Installation von GStreamer funktioniert:

Code: Alles auswählen

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
(Das Paket "gstreamer1.0-doc" wird nicht gefunden, braucht man aber auch nicht)

Falls das auch nicht hilft, würde ich einfach ein anderes Python-Paket versuchen um die mp3-Datei abzuspielen. Es sollte mehrere zur Auswahl geben. Das eigentliche konvertieren von Text in Audio funktioniert ja.
Benutzeravatar
Dennis89
User
Beiträge: 1154
Registriert: Freitag 11. Dezember 2020, 15:13

@rogerb Danke, ist mir nach dem Beitrag des TE dann auch aufgefallen 🤭

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten