我正在使用python3中的语音控制家庭助手。 启动时,会创建一个侦听用户语音输入的线程。 listen()方法使用谷歌语音识别,并将文本传递给解析语音和执行用户请求的方法。
class ListenThread(threading.Thread):
def __init__(self):
super(ListenThread, self).__init__()
self._stop_event = threading.Event()
self._deaf_event = threading.Event()
def run(self):
while not self.stopped():
if self.deaf():
print('sleeping')
sleep(5)
print('waking up')
self._deaf_event.clear()
# Change for silent / listening mode
# listen_keyboard()
listen()
def deafen(self, time):
self._deaf_event.set()
def deaf(self):
return self._deaf_event.is_set()
def stop(self):
self._stop_event.set()
def stopped(self):
return self._stop_event.is_set()
如果用户没有使用所需的代码字启动请求,例如" Alexa"在Amazon echo或" Okay Google"在谷歌助手,线程睡眠5秒钟后再听。这可以防止执行错误的请求。
到目前为止一切顺利。 问题在于,在播放音乐时,线程倾向于使用播放的音频作为音频输入,并且一次又一次地睡眠5秒或者将真实的语音输入与播放的歌曲混合,最终导致再次睡眠,因为来自用户。 我认为这将是问题,因为线程在"静音模式下运行良好"输入来自键盘,而不是来自麦克风。
解决这个问题的唯一问题就是从整个音频输入中减去音乐曲目中的音频,其中包含来自用户语音和歌曲本身的混合音频。我们最近在大学确实有过一些傅里叶变换等,但这似乎有点过头了。你还有其他想法如何解决这个问题吗?