Я делаю виртуального помощника для личного использования, используя обнаружение горячих слов Porcupines и речевой модуль gtts.Я пытаюсь обнаружить горячее слово «приглушение», пока модуль gtts читает файл mp3, но кажется, что созданный мной в модифицированном модуле playsound поток не работает во время разговора.Какие-либо предложения?Вот код:
Это речевой код:
from gtts import gTTS
import sys, playsound
def speak(text):
tts = gTTS(text=str(text), lang='en')
tts.save(r"D:\\Sounds\\speak.mp3")
playsound.playsound(r"D:\\Sounds\\speak.mp3")
Это модифицированный код модуля воспроизведения звука:
class PlaysoundException(Exception):
pass
import threading, os, pyautogui, time
def mute():
pyautogui.keyDown("volumemute")
time.sleep(0.2)
pyautogui.keyUp("volumemute")
def go_sleep():
os.system(r'python D:\\Porcupine\demo\\python\\porcupine_demo.py --
keyword_file_paths ' + os.getcwd() + r'\\Hotwords\\muting_windows.ppn --sensitivities 0.02')
print("muting")
mute()
def start_thread():
thread = threading.Thread(target=go_sleep)
thread.start()
def _playsoundWin(sound):
from ctypes import c_buffer, windll
from random import random
from time import sleep
from sys import getfilesystemencoding
import datetime
def winCommand(*command):
buf = c_buffer(255)
command = ' '.join(command).encode(getfilesystemencoding())
errorCode = int(windll.winmm.mciSendStringA(command, buf, 254, 0))
if errorCode:
errorBuffer = c_buffer(255)
windll.winmm.mciGetErrorStringA(errorCode, errorBuffer, 254)
exceptionMessage = ('\n Error ' + str(errorCode) + ' for
command:'
'\n ' + command.decode() +
'\n ' + errorBuffer.value.decode())
raise PlaysoundException(exceptionMessage)
return buf.value
alias = 'playsound_' + str(random())
winCommand('open "' + sound + '" alias', alias)
winCommand('set', alias, 'time format milliseconds')
durationInMS = winCommand('status', alias, 'length')
now = datetime.datetime.now()
milli = float(durationInMS.decode())
date = now + datetime.timedelta(milliseconds=milli)
start_thread()
while now <= date:
winCommand('play', alias, 'from 0 to', durationInMS.decode())
now = datetime.datetime.now()
playsound = _playsoundWin
Как уже упоминалось, код работает, за исключениемобнаружение горячих слов с резьбой.Пожалуйста, дайте мне знать для предложений и, возможно, что я делаю не так.Заранее спасибо.