/
jsonbot_speechdispatch.py
142 lines (130 loc) · 5.24 KB
/
jsonbot_speechdispatch.py
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# jsb/plugs/myplugs/speechnew.py
#
#
# New !speak implementation by The_Niz for remote festival
#jsb imports
from jsb.lib.examples import examples
from jsb.lib.commands import cmnds
from jsb.lib.persist import PlugPersist
user_settings = PlugPersist('espeak_setting')
#basic imports
import socket
import random
import logging
#host and port of speech (proxy) server
HOST = 'vinculum'
PORT = 16016
#defs
def conn_send(line):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(line+'\n')
s.close()
def generate_settings(nick):
voice=random.choice(['en+m3','en+m2','en+m1','en+','en+f1','en+f2','en+f3'])
pitch=str(random.randint(0,99))
speed=str(random.randint(100,300))
if any(user_settings.data[x]['voice']==voice for x in user_settings.data) and any(user_settings.data[x]['pitch']==pitch for x in user_settings.data) and any(user_settings.data[x]['speed']==speed for x in user_settings.data):
voice=random.choice(['en+m3','en+m2','en+m1','en+','en+f1','en+f2','en+f3'])
pitch=str(random.randint(0,99))
speed=str(random.randint(100,300))
if nick not in user_settings.data:
user_settings.data[nick]={}
user_settings.data[nick]['voice']=voice
user_settings.data[nick]['pitch']=pitch
user_settings.data[nick]['speed']=speed
user_settings.save()
def handle_settings(bot, event):
if event.nick not in user_settings.data:
generate_settings(event.nick)
set = user_settings.data[event.nick]
if not event.rest:
event.reply(', '.join([a+'='+b for a,b in set.items()]))
return
type,setting = event.rest.strip().split('=')
if type in ['voice','pitch','speed']:
user_settings.data[event.nick][type]=setting
user_settings.save()
event.reply('Set '+type+' to '+setting)
def handle_speech(bot, event):
if not event.rest: event.missing("<text-to-speak>") ; return
if event.nick not in user_settings.data:
generate_settings(event.nick)
v = user_settings.data[event.nick]['voice']
s = user_settings.data[event.nick]['speed']
p = user_settings.data[event.nick]['pitch']
a = str(100)
k = str(50)
speechline = event.rest
try:
logging.warning(v+' '+s+' '+p+' '+a+' '+k+' '+speechline)
conn_send(v+'\t'+s+'\t'+p+'\t'+a+'\t'+k+'\t'+event.nick+'\t'+speechline)
except:
event.reply("Cannot connect to host " + HOST + " on port " + str(PORT) )
def handle_spreek(bot, event):
if not event.rest: event.missing("<text-to-speak>") ; return
if event.nick not in user_settings.data:
generate_settings(event.nick)
v = user_settings.data[event.nick]['voice']
s = user_settings.data[event.nick]['speed']
p = user_settings.data[event.nick]['pitch']
a = str(100)
k = str(50)
if '+' in v:
v = 'nl'+'+'+v.split('+')[-1]
else:
v = 'nl'
speechline = event.rest
try:
logging.warning(v+' '+s+' '+p+' '+a+' '+k+' '+speechline)
conn_send(v+'\t'+s+'\t'+p+'\t'+a+'\t'+k+'\t'+event.nick+'\t'+speechline)
except:
event.reply("Cannot connect to host " + HOST + " on port " + str(PORT) )
def handle_sprech(bot, event):
if not event.rest: event.missing("<text-to-speak>") ; return
if event.nick not in user_settings.data:
generate_settings(event.nick)
v = user_settings.data[event.nick]['voice']
s = user_settings.data[event.nick]['speed']
p = user_settings.data[event.nick]['pitch']
a = str(100)
k = str(50)
if '+' in v:
v = 'de'+'+'+v.split('+')[-1]
else:
v = 'de'
speechline = event.rest
try:
logging.warning(v+' '+s+' '+p+' '+a+' '+k+' '+speechline)
conn_send(v+'\t'+s+'\t'+p+'\t'+a+'\t'+k+'\t'+event.nick+'\t'+speechline)
except:
event.reply("Cannot connect to host " + HOST + " on port " + str(PORT) )
def handle_dire(bot, event):
if not event.rest: event.missing("<text-to-speak>") ; return
if event.nick not in user_settings.data:
generate_settings(event.nick)
v = user_settings.data[event.nick]['voice']
s = user_settings.data[event.nick]['speed']
p = user_settings.data[event.nick]['pitch']
a = str(100)
k = str(50)
if '+' in v:
v = 'fr'+'+'+v.split('+')[-1]
else:
v = 'fr'
speechline = event.rest
try:
logging.warning(v+' '+s+' '+p+' '+a+' '+k+' '+speechline)
conn_send(v+'\t'+s+'\t'+p+'\t'+a+'\t'+k+'\t'+event.nick+'\t'+speechline)
except:
event.reply("Cannot connect to host " + HOST + " on port " + str(PORT) )
cmnds.add("espeak", handle_speech, ["SPACE","SPEAK"])
examples.add("espeak", "use espeak to output sound!", "espeak I use espeak.")
cmnds.add("espreek", handle_spreek, ["SPACE","SPEAK"])
examples.add("espreek", "gebruik espeak om te irritieren!", "espreek Ik gebruik espeak.")
cmnds.add("esprech", handle_sprech, ["SPACE","SPEAK"])
examples.add("esprech", "benutzen espeak zur Ausgangrauschen!", "esprech Ich benutze espeak.")
cmnds.add("edire", handle_dire, ["SPACE","SPEAK"])
examples.add("edire", "utilize espeak pour generer du son!", "esprech Je utilise espeak.")
cmnds.add("espeak-settings", handle_settings, ["SPACE","SPEAK"])
examples.add("espeak-settings", "modify espeak settings", "espeak-settings voice=en+f3")