尝试创建具有锁定功能的简单按钮推送播放

时间:2019-08-28 16:08:30

标签: python raspberry-pi pygame

新手在这里。尝试编写简单的代码,将播放加载的音频文件并进一步“锁定”按钮,直到文件完成付款为止。我正在使用GPIO输入。我在Thonny中使用python在Raspberry Pi 3b +上编写。使用当前文件,我可以加载文件,并初始化音频和GPIO按钮,但是我无法弄清楚如何锁定另一个按钮的输入。按下其他按钮可触发音频在已经播放的文件上再次播放。

我尝试了pygame事件等待和睡眠功能,但是我找不到有关如何使用它们的明确信息。

import pygame

pygame.init()

from gpiozero import Button, LED


btn_playaudio = Button(27)

playaudio = pygame.mixer.Sound('/home/pi/folder/folder2/audiofile.wav')

btn_playaudio.when_pressed = playaudio.play

我希望文件播放一次直到完成,然后在按下按钮时准备再次播放。

最终,该程序将被加载到无头Pi并使用rc.local自动运行,以便在设备启动时启动,加载程序并准备按下按钮。 (基本上是一个在按下按钮时便会播放音频的按钮信息亭-它将以24/7运行)

1 个答案:

答案 0 :(得分:0)

您可以这样做:

import pygame
import time
from gpiozero import Button


pygame.init()
btn_playaudio = Button(27)
playaudio = pygame.mixer.Sound('/home/pi/folder/folder2/audiofile.wav')


def my_player():
    global btn_playaudio # We want changes to this to occur in the global scope
    length = playaudio.get_length() # Returns the length of the sound, in seconds
    btn_playaudio.when_pressed = None # Remove the handler while the sound is playing
    playaudio.play()
    time.sleep(length)
    btn_playaudio.when_pressed = my_player # Restore the handler


btn_playaudio.when_pressed = my_player

策略是在播放声音时删除处理程序,然后在完成处理后将其重新添加。我尚未实际测试过,因此您可能需要对其进行调试。