-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathoutput.py
More file actions
69 lines (51 loc) · 1.43 KB
/
output.py
File metadata and controls
69 lines (51 loc) · 1.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import pyttsx3
from pygame import mixer
from gtts import gTTS
import time
import os
class Output:
def __init__(self):
pass
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
pass
def output(self, message):
pass
class ConsoleOutput(Output):
def __init__(self):
pass
def output(self, message):
print('[*] {}'.format(message))
class PyTTSOutput(Output):
def __init__(self):
self.engine = pyttsx3.init()
def output(self, message):
self.engine.say(message)
self.engine.runAndWait()
class GTTSOutput(Output):
def __init__(self):
mixer.init()
self.tempfile = None
self.tempname = 'speech.mp3.temp'
def __enter__(self):
self.tempfile = open(self.tempname, 'wb')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.tempfile.close()
os.remove(self.tempname)
def output(self, message):
tts = gTTS(text=message, lang='en')
if not self.tempfile:
tts.save(self.tempname)
self.playmixer()
os.remove(self.tempname)
else:
self.tempfile.truncate()
tts.write_to_fp(self.tempfile)
self.playmixer()
def playmixer(self):
mixer.music.load(self.tempname)
mixer.music.play()
while mixer.music.get_busy():
pass