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 global broadcast, exit
text = v.name.upper() + ":\n" text = f"{v.name.upper()} : {v.temp}\n"
broadcast.utterance(text, v.channel) broadcast.utterance(text, v.channel)
terminal_utterance(text) terminal_utterance(text)
@ -85,6 +85,11 @@ def find_candidates(v, uv_vec, voices, results):
lapse = time.time() - start lapse = time.time() - start
logging.info(f"LOOP::done - {lapse} secs") 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): def signal_terminate(signum, frame):
@ -128,8 +133,18 @@ def main() -> int:
# NET # NET
#--------------------# #--------------------#
logging.info(f"INIT::setting up OSC") 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 # METRIC
@ -144,6 +159,9 @@ def main() -> int:
random.seed(time.time()) random.seed(time.time())
v = random.choice(voices) v = random.choice(voices)
uv, uv_vec = utter_one_vectorise(v) uv, uv_vec = utter_one_vectorise(v)
t_update = threading.Thread(target=update)
t_update.start()
while not exit: while not exit:
@ -164,9 +182,10 @@ def main() -> int:
uv_vec = metric.vector(uv) uv_vec = metric.vector(uv)
logging.info(f"LOOP::next {v.name}") logging.info(f"LOOP::next {v.name}")
t_update.join()
logging.info(f"TERMINATE::terminating OSC") logging.info(f"TERMINATE::terminating OSC")
broadcast.terminate_osc() utterance.osc.terminate_osc()
logging.info(f"FIN") logging.info(f"FIN")

View File

@ -1,6 +1,18 @@
from osc4py3.as_eventloop import * from osc4py3.as_eventloop import *
from osc4py3 import oscbuildparse 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: class OscBroadcaster:
def __init__(self, name: str, host: str, port: str, command_channel: str): def __init__(self, name: str, host: str, port: str, command_channel: str):
@ -8,7 +20,7 @@ class OscBroadcaster:
self.host = host self.host = host
self.port = port self.port = port
self.cmd = command_channel self.cmd = command_channel
osc_udp_client(self.host, self.port, self.name) osc_udp_client(self.host, self.port, self.name)
def utterance(self, utterance: str, channel: str): def utterance(self, utterance: str, channel: str):
msg = oscbuildparse.OSCMessage(channel, None, [utterance]) msg = oscbuildparse.OSCMessage(channel, None, [utterance])
@ -20,15 +32,17 @@ class OscBroadcaster:
osc_send(msg, self.name) osc_send(msg, self.name)
osc_process() osc_process()
@staticmethod class OscReceiver:
def start_osc():
osc_startup()
@staticmethod
def terminate_osc():
osc_terminate()
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) self.v = aitextgen(model_folder=model, tokenizer_file=tokenizer)
def utter_n(self, n: int, temp: float = None, lenght: int = None): def utter_n(self, n: int, temp: float = None, lenght: int = None):
t = self.temp if temp != None else temp t = self.temp if temp == None else temp
l = self.lenght if lenght != None else lenght l = self.lenght if lenght == None else lenght
return self.v.generate(n=n, max_lenght=l, temperature=t, return_as_list=True) 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: 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] return self.utter_n(n=1, temp=temp, lenght=lenght)[0]
def set_channel(self, root: str, endpoint: str): def set_channel(self, root: str, endpoint: str):