Sound (autom.) abspielen ?

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Wanderfalke17
User
Beiträge: 4
Registriert: Sonntag 7. November 2021, 17:38

Hi,

ich bin ein Neuer ... hallo :D ... hatte zwar schon anno '73 etwas mit EDV zu tun - mache aber erst jetzt meine ersten Schritte in Python...

... anscheinend hänge ich bei einem ähnlichen Problem wie DoktorWho_15 im Thread weiter unten (Playsound): ich möchte gerne in einem Python-Programm das Abspielen eines Sounds anstoßen, wenn das klappt, soll - abhängig von irgendwelchen GPIO-Inputs - mal die eine und mal die andere Sounddatei abgespielt werden.

Nach Installation von sox kann ich auf der RasPi 2B Konsole mit 'play *.mp3' einen Sound ausgeben - aus Python heraus funktioniert es noch nicht.

Habe mir auch die Möglichkeit mit Playsound gesucht (link) - funktioniert aber nicht:

Code: Alles auswählen

pi@raspberrypi:~/python $ python3 main.py
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 "main.py", line 4, in <module>
    playsound(mp3File)
  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', '/home/pi/Music/Desfado.mp3']' returned non-zero exit status 1.
Und wenn ich ihm das angemeckerte pygobject nach zu installieren versuche, kommt:

Code: Alles auswählen

pi@raspberrypi:~/python $ pip install pygobject
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pygobject in /usr/lib/python2.7/dist-packages (3.30.4)
Requirement already satisfied: pycairo>=1.11.1 in /usr/lib/python2.7/dist-packages (from pygobject) (1.16.2)
pi@raspberrypi:~/python $
Was tut der unbelecket Anfänger, damit aus dem Python-Prgramm der Sound tönt?

Danke für Hinweise
Reinhard
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

pip3 benutzen, damit pygobject auch für die richtige Python Version installiert wird.
Wanderfalke17
User
Beiträge: 4
Registriert: Sonntag 7. November 2021, 17:38

Leider dasselbe - scheint ja da zu sein:

Code: Alles auswählen

pi@raspberrypi:~/python $ pip3 install pygobject
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pygobject in /usr/lib/python3/dist-packages (3.30.4)
Requirement already satisfied: pycairo>=1.11.1 in /usr/lib/python3/dist-packages (from pygobject) (1.16.2)
Trotzdem will die Testdatei

Code: Alles auswählen

from playsound import playsound
playsound('/home/pi/Music/Desfado.mp3')
nicht.

Code: Alles auswählen

pi@raspberrypi:~/python $ python3 main.py
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')........
???

Thx
Benutzeravatar
__blackjack__
User
Beiträge: 13157
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Es scheint GStreamer und/oder die gir-Dateien dafür zu fehlen. Das Debian-Package müsste gir1.2-gstreamer-1.0 heissen.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Wanderfalke17
User
Beiträge: 4
Registriert: Sonntag 7. November 2021, 17:38

Super - danke, das war's ... ' sudo apt install gir1.2-gstreamer-1.0' hat geholfen :D

FYI: die nächsten Schritte sollten sein: 1.) das Python-Programm automatisch starten und einen loop bauen - es soll auf das Schließen eines Kontaktes am GPIO warten - und wenn der Tastendruck kommt, den Soundfile abspielen. 2.) Mehrere Soundfiles installieren und per Smartphone die verschiedenen Soundfiles (Geräusche) aufrufen. Und wenn das alles funzt könnte das Abspielen des richtigen Sounds von einem RFID angestoßen werden ... also noch einige Möglichkeiten sich zu verlaufen...

.. aber heute nicht mehr.

Thx & lG
Reinhard
Benutzeravatar
hyle
User
Beiträge: 96
Registriert: Sonntag 22. Dezember 2019, 23:19
Wohnort: Leipzig

Wanderfalke17 hat geschrieben: Sonntag 7. November 2021, 20:34 1.) das Python-Programm automatisch starten und einen loop bauen - es soll auf das Schließen eines Kontaktes am GPIO warten - und wenn der Tastendruck kommt, den Soundfile abspielen.
Bevor Du an diesem Punkt mit dem ollen RPi.GPIO anfängst, solltest Du Dir auch mal gpiozero ansehen. Da gibt es auch schon ein fast fertiges Beispiel, zwar mit pygame, kannst Du ja aber für Dich anpassen.
Alles was wir sind ist Sand im Wind Hoschi.
Wanderfalke17
User
Beiträge: 4
Registriert: Sonntag 7. November 2021, 17:38

Danke für den Hinweis - werd' ich mir anschauen.

Allerdings wenn ich per Knöpfchendrücken meine Sounds abrufen möchte, ist HW-Bastelei notwendig - und Änderung hinterher schwierig. Werde daher erst mal versuchen mit dem Smartphone die Geräusche abspielen zu lassen, habe dazu ein Video gefunden (link) - sieht auf den 1. Blick machbar aus mit 'Raspi SSH' ein paar Buttons am Smartphone zu bauen und damit Befehle (= eine 'Abspiel.py') am Raspi aufzurufen. Vielleicht gelingt's mir sogar am Smartphone die erforderliche Sounddatei als Parameter gleich mit zu übergeben - dann braucht's nur ein einziges 'Abspiel.py'.

Ich werde mich demnächst damit beschäftigen (vorher muss ich noch ein anderes Projekt fertigstellen).

Thx
Antworten