Я пытался создать приложение Tkinter, которое будет работать как сигнал обратной связи для воспроизводимого звука.так, например, когда в библиотеке становится громко, вы получаете красный свет, но когда он нормальный, то зеленый и т. д.
В основном я создал приложение Tkinter с холстом и сделал 3 круга в прямоугольнике.(стоп-сигнал) также сделал функцию для получения входного сигнала от вашего микрофона, чтобы увидеть, насколько высок или низок звук.
Этот код сделан в отдельном файле для получения входного звука:
def decide_colour():
def print_sound(indata, outdata, frames,tijd, status):
global colour
volume_norm = np.linalg.norm(indata)
print(volume_norm)
time.sleep(1)
#set fill colour
if volume_norm > 2 and volume_norm <4:
colour = "yellow"
elif volume_norm > 4:
colour = "red"
else:
colour = "green"
print(colour)
with sd.Stream(callback=print_sound):
sd.sleep(duration * 1000)
decide_colour()
И это приложение tkinter, которое должно отображать его:
class TrafficLights:
def __init__(self):
root = Tk()
root.title("Stoplicht")
root.configure(bg='black')
root.geometry('460x400')
# Frame voor widgets
frame = Frame(root)
frame.grid()
self.colour = StringVar()
# canvas voor lichten
self.canvas = Canvas(root, width=460, height=400, bg="black")
self.canvas.create_rectangle(190, 10, 310, 350, outline='white', fill='black')
self.canvas.grid()
self.oval_red = self.canvas.create_oval(200, 20, 300, 120, fill="white")
self.oval_yellow = self.canvas.create_oval(200, 130, 300, 230, fill="white")
self.oval_green = self.canvas.create_oval(200, 240, 300, 340, fill="white")
# kleurbepaling voor de cirkels
def change_color(self):
if colour == 'red':
self.canvas.itemconfig(self.oval_red, fill="red")
self.canvas.itemconfig(self.oval_yellow, fill="white")
self.canvas.itemconfig(self.oval_green, fill="white")
elif colour == 'yellow':
self.canvas.itemconfig(self.oval_red, fill="white")
self.canvas.itemconfig(self.oval_yellow, fill="yellow")
self.canvas.itemconfig(self.oval_green, fill="white")
elif colour == 'green':
self.canvas.itemconfig(self.oval_red, fill="white")
self.canvas.itemconfig(self.oval_yellow, fill="white")
self.canvas.itemconfig(self.oval_green, fill="green")
change_color(self)
root.after(500, change_color(self))
#root.after(500, TrafficLights)
root.mainloop()
while True:
decide_colour()
TrafficLights()
Но оно застряло в цикле.а также, избавившись от оператора while
, он просто откроет его один раз.Но я хочу, чтобы он продолжал работать, и я хочу, чтобы он менял цвет светофора.Я пытался в течение нескольких дней, в поисках ответов.но я просто сейчас застрял.