ich habe ein kleines Problem. Ich schreibe gerade an einem Programm, welches immer wenn das Wort 'Stopp' gesagt wird, unterbrochen werden soll, um nachzufragen ob der 'Stopp' tatsächlich gewünscht ist. Ist der Stopp nicht gewünscht, soll das Programm an der Stelle fortgesetzt werden, an der es gerade ist. Ist der Stopp erwünscht, soll das Programm dementsprechend abgebrochen werden.
Das ganze habe ich versucht über Threads zu lösen. Bisher bekomme ich es hin, dass Programm bei dem Wort 'Stopp' abzubrechen. Nun fehlt mir noch die Komponente, dass das Programm weiterläuft, wenn der Stopp nicht erwünscht ist. Wie könnte ich das ganze am besten für meinen Code realisieren?
Von Lock habe ich bereits gelesen. Werde daraus aber nicht wirklich schlau. Ich hoffe mir kann jemand helfen.
Hier mal mein Code bisher. Bei der Spracherkennung fehlt noch die init-Methode, ist aber für meine Frage nicht weiter relevant, also hab ich es so gelassen. Das eigentliche Programm habe ich übergangsweise durch das printen einer 1 ersetzt.
Code: Alles auswählen
import time
import threading
import speech_recognition as sr
class Spracherkennung():
def _tester():
r = sr.Recognizer()
mic = sr.Microphone()
#timeout=10
with mic as source:
r.adjust_for_ambient_noise(source)
try:
audio = r.listen(source)
except sr.WaitTimeoutError:
stt='NichtsErkannt'
return stt
try:
stt = r.recognize_google(audio, language='de-DE').strip()
print(stt)
return stt
except sr.UnknownValueError:
stt='Fehler'
print(stt)
return stt
except sr.RequestError:
stt='Fehler'
print(stt)
return stt
class P(threading.Thread):
def __init__(self, stop, hauptprogramm):
threading.Thread.__init__(self)
self.stop=stop
self.hauptprogramm=hauptprogramm
self.lock=lock
def run(self):
while True:
if self.stop.isSet():
print("Programmstopp wurde eingeleitet.")
self.hauptprogramm.set()
break
else:
i=1
print(i)
time.sleep(1)
class PAbbruch(threading.Thread):
def __init__(self,stop):
threading.Thread.__init__(self)
self.stop=stop
def run(self):
while True:
Usereingabe=Spracherkennung._tester()
if Usereingabe=="Stopp":
break
self.stop.set()
print("Stopp wurde erkannt.")
if __name__=="__main__":
hauptprogramm = threading.Event()
stop=threading.Event()
lock=threading.Lock()
t1=P(stop,hauptprogramm)
t2=PAbbruch(stop)
t1.start()
t2.start()
hauptprogramm.wait()
print("Das Progamm wurde beendet.")