Raspberry Pi и Python (TKinter и Omxplayer)

мы сделали программу будильника на python, которая использует TKinter для отображения слова «ALARM», когда текущее время равно времени будильника, установленному пользователем. Теперь мы пытаемся добавить в программу звук будильника, чтобы звук проигрывался, когда текущее время достигает установленного времени будильника. По какой-то странной причине, когда текущее время достигает времени будильника, звук будильника открывается и воспроизводится примерно 7 раз одновременно, а затем отключается. Мы пробовали несколько разных вещей, чтобы заставить его просто воспроизвести звуковой файл один раз, но ничего не сработало. Ребята, у вас есть какие-нибудь предложения? Я могу опубликовать более конкретную информацию/скриншоты, если это необходимо. :)

Код пока:

import time
import subprocess

#GUI Setup
from Tkinter import *
alarm_window = Tk()
alarm_window.configure(bg = 'lightblue')
alarm_window.title('Alarm Clock!')

display = Label(alarm_window, font = ('Arial', 25), bg = 'lightblue', width = 13, height = 1, borderwidth = 2)
display.grid(row = 1, column = 1, columnspan = 6)

current_time = time.strftime("%H:%M:%S")

def refresh_time():
    global current_time
    current_time = time.strftime("%H:%M:%S")

    if current_time == times.get():
        alarm_window.configure(bg='red')
        timelabel.configure(bg='red')
        alarmdisplay = Label(alarm_window, font = ('Arial', 25), text = 'ALARM', bg='red', width = 13, height = 1, borderwidth = 2,)
        alarmdisplay.grid(row = 2, column = 1, columnspan = 6)

        playProcess = subprocess.Popen(['omxplayer', '/home/pi/Digital Alarm.mp3?dl=0'])

    display.config(text=current_time)
    display.after(10, refresh_time)

timelabel = Label(alarm_window, text = 'Enter H:M:S', bg = 'lightblue')
timelabel.grid(row = 2, column = 1)
times = Entry(alarm_window, width = 10, bg = 'lightgrey', justify = CENTER)
times.grid(row = 2, column = 2, columnspan = 5)

times.focus()

refresh_time()
alarm_window.mainloop()

person Mel    schedule 17.10.2014    source источник
comment
почему вы опрашиваете каждые 10 мс, когда вы знаете, что время будет случаться только один раз в секунду?   -  person Bryan Oakley    schedule 17.10.2014


Ответы (1)


Не знаю omxplayer, но если он останавливается после воспроизведения звука, вы можете просто дождаться его окончания, например:

playProcess = subprocess.Popen(['omxplayer', '/home/pi/Digital Alarm.mp3?dl=0'])
playProcess.wait()
person J. P. Petersen    schedule 17.10.2014
comment
Спасибо за ответ :) Я попробовал это, и, к счастью, он запустил playProcess один раз, за ​​исключением того, что на самом деле не воспроизводился звук. - person Mel; 18.10.2014