AO2XP/tts.py

54 lines
1.6 KiB
Python

from PyQt4 import QtCore
import random
# WIP - DON'T USE
class SpeechThread(QtCore.QThread):
say = QtCore.pyqtSignal(unicode, str)
interrupt = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(SpeechThread, self).__init__(parent)
self._queue = []
self._running = True
self.say.connect(self._enqueue)
self.interrupt.connect(self._interrupt)
self.maleVoices = [0, 1, 4, 7]
self.femaleVoices = [5, 6, 8, 9, 10]
self.speaker = None
def run(self):
import win32com.client
import pythoncom
pythoncom.CoInitialize()
self.speaker = win32com.client.Dispatch("SAPI.SpVoice")
voices = self.speaker.GetVoices()
while self._running:
if self._queue:
text, gender = self._queue.pop(0)
if "http" in text:
continue
if "female" in gender:
self.speaker.Voice = voices.Item(random.choice(self.femaleVoices))
else:
self.speaker.Voice = voices.Item(random.choice(self.maleVoices))
text = unicode(text.toUtf8(), 'utf-8')
self.speaker.Speak(text, 1)
else:
self.msleep(20)
pythoncom.CoUninitialize()
def _interrupt(self):
if self.speaker:
self.speaker.Speak("", 2)
self._queue[:] = []
def _enqueue(self, text, gender):
self._queue.append([text, gender])
def stop(self):
self._interrupt()
self._running = False