2014-10-17 3 views
0

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

код до сих пор:

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() 
+0

почему вы проводите опрос каждые 10 мс, когда знаете, что время будет только когда-либо шанс раз в секунду? –

ответ

0

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

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

Спасибо за ответ :) Я пробовал это, и он побежал playProcess один раз, к счастью, кроме звука, который на самом деле не играл. – Mel

Смежные вопросы