Отключение звука во время разговора (не работает) - PullRequest
0 голосов
/ 15 марта 2019

Я делаю виртуального помощника для личного использования, используя обнаружение горячих слов 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

Как уже упоминалось, код работает, за исключениемобнаружение горячих слов с резьбой.Пожалуйста, дайте мне знать для предложений и, возможно, что я делаю не так.Заранее спасибо.

...