two way comm

This commit is contained in:
Gauthier 2022-03-20 10:45:12 +01:00
parent 72b984bf48
commit e91d3012cb
3 changed files with 50 additions and 15 deletions

View File

@ -47,7 +47,7 @@ def broadcast_utterance(v, utterance):
global broadcast, exit
text = v.name.upper() + ":\n"
text = f"{v.name.upper()} : {v.temp}\n"
broadcast.utterance(text, v.channel)
terminal_utterance(text)
@ -85,6 +85,11 @@ def find_candidates(v, uv_vec, voices, results):
lapse = time.time() - start
logging.info(f"LOOP::done - {lapse} secs")
def update():
global exit
while not exit:
utterance.osc.update()
time.sleep(0.2)
def signal_terminate(signum, frame):
@ -128,8 +133,18 @@ def main() -> int:
# NET
#--------------------#
logging.info(f"INIT::setting up OSC")
broadcast = utterance.osc.OscBroadcaster(name="osc_broadcast", host=conf['host'], port=conf['port'], command_channel=conf['command_osc_channel'])
broadcast.start_osc()
utterance.osc.start_osc()
broadcast = utterance.osc.OscBroadcaster(name="osc_broadcast", host=conf['host_voicemachine'], port=conf['port_voicemachine'], command_channel=conf['command_osc_channel'])
def temperature_cb(temp, name):
for v in voices:
if v.name == name:
v.temp = temp
receiver = utterance.osc.OscReceiver(name="osc_receiver", host=conf['host_machinespeak'], port=conf['port_machinespeak'], callback_fn=temperature_cb)
#--------------------#
# METRIC
@ -145,6 +160,9 @@ def main() -> int:
v = random.choice(voices)
uv, uv_vec = utter_one_vectorise(v)
t_update = threading.Thread(target=update)
t_update.start()
while not exit:
results = []
@ -164,9 +182,10 @@ def main() -> int:
uv_vec = metric.vector(uv)
logging.info(f"LOOP::next {v.name}")
t_update.join()
logging.info(f"TERMINATE::terminating OSC")
broadcast.terminate_osc()
utterance.osc.terminate_osc()
logging.info(f"FIN")

View File

@ -1,6 +1,18 @@
from osc4py3.as_eventloop import *
from osc4py3 import oscbuildparse
def start_osc():
osc_startup()
def terminate_osc():
osc_terminate()
def temperature(temp, name):
print(f'{temp} - {name}')
def update():
osc_process()
class OscBroadcaster:
def __init__(self, name: str, host: str, port: str, command_channel: str):
@ -20,15 +32,17 @@ class OscBroadcaster:
osc_send(msg, self.name)
osc_process()
@staticmethod
def start_osc():
osc_startup()
@staticmethod
def terminate_osc():
osc_terminate()
class OscReceiver:
def __init__(self, name: str, host: str, port: str, callback_fn=None):
self.name = name
self.host = host
self.port = port
osc_udp_server(self.host, self.port, self.name)
if callback_fn:
osc_method('/', callback_fn)
else:
osc_method('/', temperature)

View File

@ -11,11 +11,13 @@ class Voice:
self.v = aitextgen(model_folder=model, tokenizer_file=tokenizer)
def utter_n(self, n: int, temp: float = None, lenght: int = None):
t = self.temp if temp != None else temp
l = self.lenght if lenght != None else lenght
t = self.temp if temp == None else temp
l = self.lenght if lenght == None else lenght
return self.v.generate(n=n, max_lenght=l, temperature=t, return_as_list=True)
def utter_one(self, temp: int = None, lenght: float = None) -> str:
t = self.temp if temp == None else temp
l = self.lenght if lenght == None else lenght
return self.utter_n(n=1, temp=temp, lenght=lenght)[0]
def set_channel(self, root: str, endpoint: str):