diff --git a/speak_broadcast.py b/speak_broadcast.py index 61e6634..88bb97a 100644 --- a/speak_broadcast.py +++ b/speak_broadcast.py @@ -4,7 +4,7 @@ import utterance.utils import utterance.osc import examine.metric -logging.basicConfig(level=logging.ERROR) +logging.basicConfig(level=logging.INFO) UTTERANCE_LEN = 16 #<--------------- these should be in config NUM_METRIC_GEN = 50 @@ -13,6 +13,7 @@ broadcast = None metric = None exit = False terminal = False +debug = False def format_str(text) -> str: t = utterance.utils.clean(text) @@ -45,9 +46,13 @@ def terminal_utterance(utterance): def broadcast_utterance(v, utterance): - global broadcast, exit + global broadcast, exit, debug - text = f"{v.name.upper()} : {v.temp}\n" + if debug: + temp = format(v.temp, '.2f') + text = f"{v.name.upper()}: {temp}\n" + else: + text = f"{v.name.upper()}:\n" broadcast.utterance(text, v.channel) terminal_utterance(text) @@ -88,10 +93,14 @@ def find_candidates(v, uv_vec, voices, results): def update(): global exit while not exit: - utterance.osc.update() + try: + utterance.osc.update() + except Exception as e: + logging.error(e) + pass + time.sleep(0.2) - def signal_terminate(signum, frame): global exit logging.warning("::SIGNAL TERMINATE::") @@ -99,7 +108,7 @@ def signal_terminate(signum, frame): def main() -> int: - global broadcast, metric, terminal + global broadcast, metric, terminal, debug p = argparse.ArgumentParser() p.add_argument("-c", "--config", type=str, default="voice.config.json", help="configuratin file") @@ -138,12 +147,18 @@ def main() -> int: 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 + def receiver_cb(temp, name): + global debug + if type(temp) == str and temp == "DEBUG": + debug = name + logging.info(f"DEBUG MODE: {debug}") + else: + for v in voices: + if v.name == name: + print(f'{name} - {temp}') + v.temp = temp - receiver = utterance.osc.OscReceiver(name="osc_receiver", host=conf['host_machinespeak'], port=conf['port_machinespeak'], callback_fn=temperature_cb) + receiver = utterance.osc.OscReceiver(name="osc_receiver", host=conf['host_machinespeak'], port=conf['port_machinespeak'], callback_fn=receiver_cb) #--------------------# @@ -152,11 +167,26 @@ def main() -> int: logging.info(f"INIT::loading doc2vec metrics") metric = examine.metric.Metric(model_input='data/models/doc2vec.model') + #--------------------# + # RANDOM + #--------------------# + + def random_seed(): + global t_random_seed + logging.info("INIT::SEEDING RANDOM") + random.seed(time.time()) + if not exit: + t_random_seed = threading.Timer(random.randint(60, 60 * 4), random_seed) + t_random_seed.start() + + t_random_seed = threading.Timer(random.randint(60, 60 * 4), random_seed) + t_random_seed.start() + #--------------------# # A #--------------------# logging.info(f"INIT::generating first utterance") - random.seed(time.time()) + v = random.choice(voices) uv, uv_vec = utter_one_vectorise(v) @@ -187,6 +217,11 @@ def main() -> int: logging.info(f"TERMINATE::terminating OSC") utterance.osc.terminate_osc() + # if t_random_seed: + logging.info(f"TERMINATE::random seed") + t_random_seed.cancel() + t_random_seed.join() + logging.info(f"FIN") diff --git a/utterance/osc.py b/utterance/osc.py index 5f81f89..785b206 100644 --- a/utterance/osc.py +++ b/utterance/osc.py @@ -1,5 +1,8 @@ from osc4py3.as_eventloop import * from osc4py3 import oscbuildparse +from threading import Lock + +mutex = Lock() def start_osc(): osc_startup() @@ -11,7 +14,9 @@ def temperature(temp, name): print(f'{temp} - {name}') def update(): - osc_process() + global mutex + with mutex: + osc_process() class OscBroadcaster: @@ -25,12 +30,12 @@ class OscBroadcaster: def utterance(self, utterance: str, channel: str): msg = oscbuildparse.OSCMessage(channel, None, [utterance]) osc_send(msg, self.name) - osc_process() + update() def command(self, command: str): msg = oscbuildparse.OSCMessage(self.cmd, None, [command]) osc_send(msg, self.name) - osc_process() + update() class OscReceiver: diff --git a/utterance/voice.py b/utterance/voice.py index 4223dc7..2550d04 100644 --- a/utterance/voice.py +++ b/utterance/voice.py @@ -1,6 +1,6 @@ from aitextgen import aitextgen import utterance.utils -import regex, string +import regex, string, time class Voice: @@ -13,7 +13,7 @@ class Voice: 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 - 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, seed=int(time.time()), return_as_list=True) def utter_one(self, temp: int = None, lenght: float = None) -> str: t = self.temp if temp == None else temp