0

Ich versuche, eine reade_recognition Funktion im Hintergrund laufen kontinuierlich und die checkingAudio Funktion zu sehen, was Text gesprochen wurde und Maßnahmen entsprechend zu ergreifen, habe ich versucht, die 2 Funktionen zu laufen parallel, aber die Recon-Funktion wird immer und immer wieder aufgerufen, ich habe noch nie mit Threading gearbeitet und ein Tutorial auf Youtube verfolgt, um meine Funktionen zu fädeln, ich habe verstanden, dass ich einen sehr dämlichen Fehler gemacht habe, also frage ich die Person, die antwortet die Frage, ein wenig ausgearbeitet in ihrer Antwort und meinem Fehler. Vielen Dank.type error function fehlendes Argument 'self'

bearbeiten
Also löschte ich eine While-Schleife in meinem Mithören, die diesen Fehler verursacht wurde das gesamte Programm überflüssig zu machen, aber jetzt habe ich Typeerror bin immer: checkingAudio() fehlt 1 erforderlich Positions Argument: ‚Selbst‘ die ich as explained here erfordert, dass ich eine Klasse instanziieren, aber ich habe das und den gleichen Fehler immer noch.

class listen(threading.Thread): 

    def __init__(self): 

     self.playmusicobject = playmusic() 
     self.r = sr.Recognizer() 

     self.listening() 

def listening(self): 

    self.objectspeak = speak() 
    self.apiobject = googleAPI() 
    print("say something") 
    time.sleep(2.0) 
    with sr.Microphone() as source: 
     # self.objectspeak.speaking("say something") 
     self.audio = self.r.listen(source) 


    def checkingAudio(self): 
     time.sleep(0.5) 

     try: 
      a = str(self.r.recognize_google(self.audio)) 
      a = str(self.r.recognize_google(self.audio)) 
      print(a) 

      if a in greetings: 
       self.objectspeak.speaking("I am good how are you?") 

      if a in music: 
       print("playing music") 
       self.playmusicobject.play() 
      if a in stop: 
       print("stopping") 
       self.playmusicobject.b() 

      if a in api: 
       self.apiobject.distance() 

      else: 
       print("error") 

     except sr.UnknownValueError: 
      print("Google Speech Recognition could not understand audio") 

     except sr.RequestError as e: 
      print("Could not request results from Google Speech Recognition service; {0}".format(e)) 


class speak: 
    THIS IS A PYTTS class 




class googleAPI: 
    GOOGLE DISTANCE API function calculates distance between 2 places 

class playmusic: 

    def play(self): 
     self.objectspeak = speak() 
     playsound.playsound('C:\\Users\legion\Downloads\Music\merimeri.mp3') 

    def b(self): 
     self.objectspeak.speaking("music stopped") 

while 1: 
    a = listen 
    t1 = threading.Thread(target=listen()) 
    t2 = threading.Thread(target= a.checkingAudio()) 
    t1.join() 
    t2.join() 
+1

Als Antwort auf Ihre bearbeiten, du hast instanziiert nicht 'Listen'. Du hast Parens vergessen; du wolltest 'a = listen()'. Aber natürlich, jetzt machst du die Arbeit, die du beabsichtigst, außerhalb eines Threads zu fädeln, und trotzdem versäumst du es in den Threads zu arbeiten (weil du Parens hast, die du nicht willst, wenn du ihr Ziel definierst). Lies meine Antwort, es deckt alles ab. – ShadowRanger

Antwort

3

Sie haben eigentlich keinen Threading verwenden, genannt Sie die Funktionen in Ihrem Haupt-Thread, anstatt ihr das Ziel zu machen von dem Thread aufgerufen werden. Selbst wenn Sie hatten, haben Sie nie start aufgerufen, um mit der Ausführung der Threads zu beginnen. Sie müssen ein paar Dinge beheben:

Zuerst sicherstellen, dass Sie nur die Initialisierung, aber nicht die laufende Arbeit ausführen, in __init__; Sie müssen das Objekt erst fertigstellen, um überhaupt eine für checkingAudio zur Verfügung zu haben.

Zweitens, ändern Sie Ihre Thread-Erzeugung zu:

while 1: 
    listener = listen() # Make the object 
    t1 = threading.Thread(target=listener.listening) # Note: No parens or we invoke in main thread 
    t2 = threading.Thread(target=listener.checkingAudio) # Note: No parens 
    t1.start() # Actually launch threads 
    t2.start() 
    t1.join() 
    t2.join() 
+0

danke für die Antwort und die Erklärung. Ich bin dankbar @ShadowRanger –