类型错误函数缺少一个参数'self'
问题描述:
我想线程一个speech_recognition函数在后台连续运行,并检查音频函数,看看有什么文字说话,并采取相应的行动,我试着线程2功能运行平行但语音侦察功能一遍又一遍地被调用,我从来没有使用线程,并在YouTube上跟随一个教程来线程我的功能,我得到,我可以犯了一个非常愚蠢的错误,所以我请求谁回答这个问题在他们的答案和我的错误中有点详细。谢谢。类型错误函数缺少一个参数'self'
编辑
所以我删除其造成这个错误使得整个程序冗余我的听力功能的while循环,但现在我得到类型错误:checkingAudio()失踪1个人需要的位置参数:“自我”,我 as explained here要求我实例化一个类,但我做到了这一点,同样的错误仍然存在。
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()
答
你实际上并没有使用任何线程,你在你的主线程调用的函数,而不是使他们的目标由线程调用。即使你有,你从来没有打电话start
开始执行线程。你需要修正几件事:
首先,确保你只执行初始化,但不是正在进行的工作,在__init__
;您需要首先完成创建对象,即使可以使用checkingAudio
也可以使用该对象。
其次,你的线程创建更改为:
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
谢谢你的回答和解释。我很感谢@ ShadowRanger –
在回答您的编辑,你没有实例化'listen'。你忘了父亲;你想'a = listen()'。但是,当然,现在你正在执行你想要在线程之外进行线程工作,并且仍然无法在线程中进行任何工作(因为在定义目标时你不想要这些工作)。阅读我的答案,它涵盖了所有这些。 – ShadowRanger