如果歌曲仍在播放,如何使用按钮开始歌曲并使用相同的按钮停止歌曲

2024-06-25 23:50:59 发布

您现在位置:Python中文网/ 问答频道 /正文

Python 3.7.3和Raspberry Pi 4控制台应用程序和1个瞬时按钮

我当前的python脚本将启动,并等待按下按钮开始播放硬编码的歌曲

我需要的是让我的python脚本在按下按钮时开始播放硬编码的歌曲,并且能够再次按下相同的按钮停止该歌曲。或者,至少使用第二个按钮“重置”歌曲,并使系统返回到等待第一个按钮按下开始播放歌曲的状态

我使用gpiozero按钮和when_pressed事件调用函数来播放歌曲

有什么想法吗

from pydub import AudioSegment
from pydub.playback import play
from gpiozero import Button
from signal import pause

alarm = AudioSegment.from_file("alarm.mp3")
alarmState = False

buttonReset = Button(20)
buttonAlarm = Button(21)

def alarmOn():
    global alarmState
    alarmState = True
    print("Play: " + str(alarmState))
    
    while alarmState:
        play(alarm)

def alarmReset():
    global alarmState
    print("Alarm Reset: " + str(alarmState))
    
    alarmState = False
    
try:
    print("Program Start: " + str(alarmState))
    
    buttonAlarm.when_pressed = alarmOn
    
    buttonReset.when_pressed = alarmReset
    
    pause()
finally:
    pass
    

Tags: fromimport脚本编码button歌曲按钮when
1条回答
网友
1楼 · 发布于 2024-06-25 23:50:59

最终找到了一个解决方案,换了一个包含“停止”功能的不同播放器。请参阅下面的代码

from omxplayer.player import OMXPlayer
from time import sleep
from signal import pause
from gpiozero import Button

alarmState = False
player = None

def playerExit(exit_code):
    global alarmState
    
    alarmState = False

def alarmOn():
    global alarmState
    global player
    
    alarmState = True
    player = OMXPlayer(alarmFile)
    player.set_volume(1)
    player.exitEvent += lambda _, exit_code: playerExit(exit_code)

def alarmReset():
    global alarmState
    global player

    if player != None:
        if alarmState:
            player.stop()

try:
    alarmFile = "alarm-long.mp3"

    buttonReset = Button(20)
    buttonAlarm = Button(21)
    
    buttonAlarm.when_pressed = alarmOn
    buttonReset.when_pressed = alarmReset
    
    pause()
finally:
    pass
    

相关问题 更多 >