2017-12-29 160 views
1

pyttsx3과 함께 TTS (text-to-speech) 작업을하고 있습니다. 스레드 내에서 사용할 수 있다는 것을 깨달았습니다. (또는 잘못된 것을하고 있습니다.) 왜 그런지 알아?파이썬 스레드에서 pyttsx를 사용하는 방법

코드 예 :

from threading import Thread 
import pyttsx3 

def myfunc(): 
    engine = pyttsx3.init() 
    engine.say("ok") 
    engine.runAndWait() 

t = Thread(target=myfunc) 
t.start() 

오류 :

File "/usr/local/Cellar/python3/3.6.4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 916, in _bootstrap_inner 
    self.run() 
    File "/usr/local/Cellar/python3/3.6.4/Frameworks/Python.framework/Versions/3.6/lib/python3.6/threading.py", line 864, in run 
    self._target(*self._args, **self._kwargs) 
    File "test.py", line 9, in myfunc 
    engine.runAndWait() #blocks 
    File "/usr/local/lib/python3.6/site-packages/pyttsx3/engine.py", line 188, in runAndWait 
    self.proxy.runAndWait() 
    File "/usr/local/lib/python3.6/site-packages/pyttsx3/driver.py", line 204, in runAndWait 
    self._driver.startLoop() 
    File "/usr/local/lib/python3.6/site-packages/pyttsx3/drivers/nsss.py", line 33, in startLoop 
    AppHelper.runConsoleEventLoop() 
    File "/usr/local/lib/python3.6/site-packages/PyObjCTools/AppHelper.py", line 241, in runConsoleEventLoop 
    nextfire = nextfire.earlierDate_(soon) 
AttributeError: 'NoneType' object has no attribute 'earlierDate_' 
+0

스레드없이 pyttsx3를 실행할 수 있었습니까? 샘플 코드가 나를 위해 올바르게 실행됩니다. – eyllanesc

+0

@eyllanesc 정말요? 물론 스레드 pyttsx3없이 물론 괜찮아요 –

+0

흥미 롭군요. 어쩌면 그것은 OS 기반 일 것입니다 : 광산이 작동하지 않습니다. 그리고 OP와 저는 둘 다 Mac을 사용하고 있습니다. – rassar

답변

1

오류 그것은 OSX에 스레드에서 실행되지 않는 것 같습니다. 여기에 잘 작동 수있는 몇 가지 예입니다

방금 ​​연설에 텍스트를 변환해야하는 경우, 당신은 os.system('say %s')를 사용할 수 있습니다

import os 
def myfunc(): 
    os.system('say ok') 

gTTS 또는 Google의 TextToSpeech 엔진은 이탈리아어를 포함한 64 개 언어를 지원합니다. 사용법 :

from gtts import gTTS 
import os 
tts = gTTS(text='Good morning', lang='it') 
tts.save("good.mp3") 
os.system("mpg321 good.mp3") 
+0

고마워요,하지만 크로스 플랫폼이어야하고 이탈리아어를 지원해야합니다. –

+0

@FrancescoPegoraro 알게되었습니다. – rassar

+0

오프라인이되고 싶습니다. 죄송합니다;) –