Pyttsx3 будет говорить только один раз - PullRequest
0 голосов
/ 02 августа 2020

При запуске следующей программы:

import multiprocessing
import pyttsx3
from multiprocessing import Process


class _TTS:

   def __init__(self):
        self.engine = pyttsx3.init('espeak')
        self.engine.setProperty('rate', 175)

   def start(self,text_):
        self.engine.say(text_)
        self.engine.runAndWait()

def Speakit(words):
    print('running Speakit')
    
    tts = _TTS()
    tts.start(words)
    del(tts)

def testing(n):
    print(n)
    if n == 0:
        words = 'Argument is zero'
        Speakit(words)
        print(words)
    else:
        words = 'Argument is not zero'
        Speakit(words)
        print(words)

if __name__=="__main__":
   words = 'start'
 #  Speakit(words)
   p1=Process(target=testing,args=(0,))
   p1.start()
   p1.join()
   p2=Process(target=testing,args=(5,))
   p2.start()
   p2.join()
   print("We're done")

Если я закомментирую Speakit в основном, скрипт будет работать правильно, говоря, что выводит

Watson $ python3 mp2.py
0
running Speakit
Argument is zero
5
running Speakit
Argument is not zero
We're done

Это я не Не закомментируйте Speakit в основном, скрипт просто произнесет слово "Start", а затем больше не будет говорить и просто зависнет

 python3 mp2.py
running Speakit
0
running Speakit

Не понимаю, почему

1 Ответ

0 голосов
/ 10 августа 2020

Я быстро раскрутил ваш код. Сначала интерпретатор выдавал несколько серьезных ошибок из-за инициализации вашего движка pyttsx. Я удалил аргумент 'espeak', и тогда он сработал, и программа также озвучила обе строки.

Может быть, использовать try/except для устранения неполадок.

...