尝试创建带有锁定功能的简单按钮按下播放



新手在这里。尝试编写简单的代码来播放加载的音频文件并"锁定"进一步按下按钮,直到文件完成付款。我正在使用 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 全天候运行(

你可以这样做:

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

策略是在播放声音时删除处理程序,然后在完成后将其添加回来。我还没有实际测试过它,所以你可能需要调试它。