Как использовать многопоточность для воспроизведения аудио в Raspberry pi с использованием Python - PullRequest
0 голосов
/ 24 октября 2018

Я новичок в питоне.Я пытаюсь написать программу, которая будет продолжать воспроизводить звук при включении 21-контактного светодиода GPIO.Я хочу, чтобы весь аудиофайл воспроизводился, а не только 2 секунды.Когда светодиод включается, файл должен начать воспроизводиться (Примечание: он не должен прерываться, если звук уже воспроизводится).Я не мог понять, как работает многопоточность в моей ситуации.Теперь звук воспроизводится в течение 2 секунд и останавливается

import threading
import pygame
import time
from time import sleep
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(20,GPIO.OUT)
pygame.init()
pygame.mixer.init()

ring = pygame.mixer.Sound("odo.wav")

def audio_play():
    global pygame
    ring.play()
    sleep(5)

def led():
    while(1):
        GPIO.output(21,GPIO.HIGH)
        GPIO.output(20,GPIO.LOW)
        time.sleep(10)
        GPIO.output(21,GPIO.LOW)
        GPIO.output(20,GPIO.HIGH)
        try:
            audio.start()
        except RuntimeError:
            audio = threading.Thread(target=audio_play)
            audio.start()
        time.sleep(10)

led=threading.Thread(target=led)
audio=threading.Thread(target=audio_play)

led.start()

led.join()
audio.join()
...