MP3 Soundfiles wiedergeben und gleichzeitig GPIOs schalten

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Nabbo
User
Beiträge: 2
Registriert: Dienstag 16. Oktober 2018, 16:16

Hallo zusammen,

ich bin langsam am Verzweifeln...
Folgendes Problem: Ich möchte gerne eine MP3 mit dem Raspi wiedergeben und noch während der Wiedergabe LEDs an GPIO blinken lassen.
Wiedergabe funktioniert, LED blinken funktioniert, aber ich bekomme das nur sequentiell hin. Spricht LEDs hören während das MP3 wiedergeben wird auf zu blinken und blicken dann nach der Wiedergabe ihre Sequenz fertig.

hier der Code für die Soundwiedergabe:

Code: Alles auswählen

import os, random
testcmd="mpg321 -g 100 /home/pi/Halloween/Sound/AirHorn.mp3"

def rndmp3():
    randomfile=random.choice(os.listdir("/home/pi/Halloween/Sound/"))
    file ='/home/pi/Halloween/Sound/'+randomfile
    cmd = "mpg321 "+file
    #print (cmd)
    #os.system (testcmd)
    os.system (cmd)
    
rndmp3()
und für das LED-Blinken:

Code: Alles auswählen

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(40,GPIO.OUT)
GPIO.setup(37,GPIO.OUT)
GPIO.setup(38,GPIO.OUT)

KuerbisLED=38
AugenSkelett=40
AugenGespenst=37
Blitz=35

from random import *

for x in range(0, 50):
    wert1=int(random()*10)/100
    wert2=int(random()*10)/100
    GPIO.output(AugenSkelett,GPIO.HIGH)
    GPIO.output(KuerbisLED,GPIO.HIGH)  
    time.sleep(wert1+0.02)
    GPIO.output(AugenSkelett,GPIO.LOW)
    time.sleep(wert2)
    GPIO.output(AugenGespenst,GPIO.HIGH)
    time.sleep(0.05)
    GPIO.output(AugenGespenst,GPIO.LOW)
    GPIO.output(KuerbisLED,GPIO.LOW)  
    time.sleep(wert2)
    #print(wert1)
    #print(wert2)
    
print("Fertig")

Wer möchte mir hier helfen und einen Weg aufzeigen?

Am Ende möchte ich für Halloween einen kleinen Kidschocker bauen:
wenn die Kids in die Nähe der Tür kommen, sollen sie von einem Bewegungsmelder (Sensor ist schon auf dem Weg zu mir :P ) erfasst werden. Dann sollen Creepy-Sounds abgespielt werden und parallel dazu Augen eines Skeletts, einer Fledermaus leuchten und ein Kürbis flackern...
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Statt mit einem externen Prozess kannst du den Sound auch einfach mit pygame abspielen. Das passiert nebenlaeufig. Alternativ kannst du statt os.system subprocess.Popen benutzen, damit du ein Prozess-Objekt fuer das nebenlaeufige abspielen bekommst, dass du dann zB auch beenden und ein neues starten kannst.
Nabbo
User
Beiträge: 2
Registriert: Dienstag 16. Oktober 2018, 16:16

Hallo __deets__,

super! vielen Dank... Das war so einfach, wie ich mir das eigentlich vorgestellt hatte!
Das ist gegen alle meine threading-Versuche mal eine ganz schlanke, einfache Lösung. Hätte ich mich mal gleich für pygame entschieden... :lol:
Antworten