54 lines
1.6 KiB
Python
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 |