Я пишу программу для записи звука с использованием Tkinter GUI. Для записи самого аудио я использую этот код: https://gist.github.com/sloria/5693955 в неблокирующем режиме.
Теперь я хочу реализовать что-то вроде кнопки пуска / остановки, но чувствую, что мне не хватает что-то. Следующие предположения:
Я не могу использовать оператор while True
или функцию time.sleep()
, потому что она сломает Tkinter mainloop()
В результате мне, вероятно, придется использовать глобальный bool
, чтобы проверить, работает ли моя start_recording()
функция
Мне нужно будет вызвать stop_recording
в та же функция, что и start_recording
, потому что оба должны использовать один и тот же объект
Я не могу использовать root.after()
вызов, потому что я хочу, чтобы запись определялась пользователем.
Найдите приведенный ниже фрагмент кода проблемы:
import tkinter as tk
from tkinter import Button
import recorder
running = False
button_rec = Button(self, text='Aufnehmen', command=self.record)
button_rec.pack()
button_stop = Button(self, text='Stop', command=self.stop)
self.button_stop.pack()
rec = recorder.Recorder(channels=2)
def stop(self):
self.running = False
def record(self):
running = True
if running:
with self.rec.open('nonblocking.wav', 'wb') as file:
file.start_recording()
if self.running == False:
file.stop_recording()
root = tk.Tk()
root.mainloop()
Я знаю, что где-то должно быть все oop, но я не знаю, где (и как).