Как сделать так, чтоб функция работала вечно?
Хотел сделать код на sr pyttsx, используя библиотеку гугла, и пока успехи нормальные. Но хотелось бы, чтобы прослушивание после функции speak не останавливалась. Что я пробовал: Ставить while True:
Подробно: Когда я начинаю использовать данную программу, то даю команду, ну допустим, " вк " - он открывает вк. Если бы просто было open.web...(vk.com, new=2), то он открыл и продолжил работу, но вот если в выполнении используется функция speak, то в этом случае код останавливает работу.
import speech_recognition as sr
import pyttsx3
import sys
import datetime
import pyaudio
from fuzzywuzzy import fuzz
import time
import webbrowser
import os
opts = {
"alias": ('ангелина', 'ангелин', 'анька', 'ангелюсик', 'анг', 'angelina'),
"cmds": {
"ctime": ('время', 'сколько время', 'часы', 'какой сейчас час'),
"relax": ('я устал', 'боже я так устал', 'включи музыку', 'хочу отдохнуть',
'вруби музыку', 'я хочу устать', 'хочу отдохнуть','я реально задолбался') ,
"food": ('хочу приготовить курочку', 'хотел бы приготовить', 'может приготовить?' ) ,
"vk": ('вк', 'включи вк', 'включить вк', 'зайди в вк', 'вконтакте'),
"league": ('лига легенд', 'лол', 'лоляха', 'лолиха', 'лал', 'лул', 'включи лол', 'зайди в лол', 'включи лигу легенд'),
"search": ('найди', 'поиск', 'запусти поиск'),
"bd": ('плохо прошёл день', 'плохо', 'ничего нового', 'плохой')
}
}
def speak(what):
print("[Keylin]" + what)
speak_engine.say( what )
speak_engine.runAndWait()
speak_engine.stop()
def callback(recognizer, audio):
try:
voice = r.recognize_google(audio, language='ru-RU').lower()
print('Услышала: ' + voice)
if voice.startswith(opts["alias"]):
cmd = voice
for x in opts["alias"]:
cmd = cmd.replace(x, "").strip()
cmd = recognize_cmd(cmd)
execute_cmd(cmd['cmd'])
except sr.UnknownValueError:
print("Неизвестная комманда")
def recognize_cmd(cmd):
RC = {'cmd': '', 'percent': 0}
for c,v in opts['cmds'].items():
for x in v:
vrt = fuzz.ratio(cmd, x)
if vrt > RC['percent']:
RC['cmd'] = c
RC['percent'] = vrt
return RC
def execute_cmd(cmd):
if cmd == 'ctime':
now = datetime.datetime.now()
speak ("Сейчас " + str(now.hour) + ":" + str(now.minute))
elif cmd == 'relax':
webbrowser.open('https://www.youtube.com/watch?v=5qap5aO4i9A', new=2)
speak ("Намёк понят, Никита")
elif cmd == 'food':
speak ("Эх, может быть, я когда нибудь попробую человеческую еду. А так незнаю.")
elif cmd == 'vk':
webbrowser.open('http://vk.com', new=2)
speak("Открываю, сэр.")
elif cmd == 'league':
os.startfile(r'C:/Riot Games/League of Legends/LeagueClient.exe')
speak('Запускаю.')
elif cmd == 'search':
text = input(str("Введите текст для перевода: "))
webbrowser.open('https://translate.google.com/?hl=ru#view=home&op=translate&sl=en&tl=ru&text=' + text, new=2)
elif cmd == 'bd':
speak('Сочувствую. ')
else:
print ("Не раслышала")
r = sr.Recognizer()
m = sr.Microphone(device_index=2)
with m as source:
r.adjust_for_ambient_noise(source)
speak_engine = pyttsx3.init()
speak("Приветствую хозяин, как прошёл день?")
stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1)