From 992d96f6e090096f5cde3f273ab7f408461b7c2e Mon Sep 17 00:00:00 2001 From: Ben Savage Date: Fri, 23 Jul 2021 21:20:24 +1000 Subject: [PATCH] updates --- osc_jem_client.py => osc_client.py | 24 ++++--- osc_jem_server.py | 45 ------------ osc_server.py | 107 +++++++++++++++++++++++++++++ 3 files changed, 123 insertions(+), 53 deletions(-) rename osc_jem_client.py => osc_client.py (60%) delete mode 100755 osc_jem_server.py create mode 100755 osc_server.py diff --git a/osc_jem_client.py b/osc_client.py similarity index 60% rename from osc_jem_client.py rename to osc_client.py index 42b869c..d3722c9 100755 --- a/osc_jem_client.py +++ b/osc_client.py @@ -7,8 +7,8 @@ import argparse logging.basicConfig(format='%(asctime)s - %(threadName)s ø %(name)s - ' '%(levelname)s - %(message)s') -logger = logging.getLogger("osc") -logger.setLevel(logging.DEBUG) +log = logging.getLogger("osc") +log.setLevel(logging.DEBUG) clientname="ledclient" @@ -17,26 +17,34 @@ def osc_msg_send(path,struct,data): osc_send(msg,clientname) osc_process() -def play(): +def cmd_play(): osc_msg_send("/play","i",1) -def stop(): +def cmd_stop(): osc_msg_send("/stop","i",1) -def restart(): +def cmd_restart(): stop() osc_msg_send("/gotomarker","i",1) play() -parser = argparse.ArgumentParser(description='OSC controller for LEDs') -parser.add_argument('--server',action='store',default='127.0.0.1:8000') + +parser = argparse.ArgumentParser(description='OSC controller for REAPER') +parser.add_argument('command', action='store',choices=[cmd.replace("cmd_",'') for cmd in globals() if 'cmd_' in cmd],help='Command to send via OSC') +parser.add_argument('--debug-osc',action='store_true',default=False,help='Debug OSC messages') +parser.add_argument('--server',action='store',default='127.0.0.1:8000',help="Server to connect to :. Defaults to localhost:8000",metavar='server:port') args=parser.parse_args() # Start the system. -osc_startup(logger=logger) +if args.debug_osc: + osc_startup(logger=log) +else: + osc_startup() # Make client channels to send packets. server_address=args.server.split(':')[0] server_port=args.server.split(':')[1] osc_udp_client(server_address,server_port, clientname) +if __name__ == '__main__': + globals()['cmd_'+args.command]() diff --git a/osc_jem_server.py b/osc_jem_server.py deleted file mode 100755 index 79c0482..0000000 --- a/osc_jem_server.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/python3 -# Import needed modules from osc4py3 -from osc4py3.as_eventloop import * -from osc4py3 import oscbuildparse -from osc4py3.oscmethod import * -import logging -from pprint import pprint - -logging.basicConfig(format='%(asctime)s - %(threadName)s ø %(name)s - ' - '%(levelname)s - %(message)s') -logger = logging.getLogger("osc") -logger.setLevel(logging.ERROR) -clientname="ledserver" - - - -def led_colour(value): - print("Setting colour to {}".format(value)) - -def led_brightness(value): - print("Setting brightness to {}".format(value)) - -def led_state(addr,value): - led=addr.split("/")[6] - pprint(value) - state=['off','on'] - print("Setting LED {} {}".format(led,state[int(value)])) - -# Start the system. -osc_startup(logger=logger) -server_address='127.0.0.1' -server_port='9000' - -osc_udp_server(server_address,server_port, clientname) - -osc_method("/track/2/fx/1/fxparam/1/value",led_colour) -osc_method("/track/2/fx/1/fxparam/2/value",led_brightness) -osc_method("/track/2/fx/1/fxparam/[!12]/value",led_state,argscheme=OSCARG_ADDRESS+OSCARG_DATAUNPACK) - - -finished=False -while not finished: - osc_process() - - diff --git a/osc_server.py b/osc_server.py new file mode 100755 index 0000000..c11b1d8 --- /dev/null +++ b/osc_server.py @@ -0,0 +1,107 @@ +#!/usr/bin/python3 +# Import needed modules from osc4py3 +from osc4py3.as_eventloop import * +from osc4py3 import oscbuildparse +from osc4py3.oscmethod import * +import logging +from pprint import pprint +import argparse +import colorsys + +logging.basicConfig(format='%(asctime)s - %(threadName)s ø %(name)s - ' + '%(levelname)s - %(message)s') +log = logging.getLogger("osc") +log.setLevel(logging.INFO) +clientname="ledserver" + +def hsv2rgb(h,s,v): + return tuple(round(i*255) for i in colorsys.hsv_to_rgb(h,s,v)) + +def termrgb(rgb): + return "\033[38;2;{};{};{}m".format(rgb[0],rgb[1],rgb[2]) +def termendc(): + return '\033[0m' +def output_led_colour(rgb): + return termrgb(rgb)+"█"+termendc() + + +class LED: + brightness=0 + colour=[0,0,0] + hue=0 + state=True + pin=None + mode=["off","on"] + + + def __init__(self,pin): + self.pin=pin + + def set_brightness(self,value): + if abs(self.brightness-value) > .005: + self.brightness=value + print("Setting brightness for LED on pin {} to {}".format(self.pin, self.brightness)) + + def set_colour(self,value): + if abs(self.hue-value) > .01: + self.colour=hsv2rgb(value,1,1) + self.hue=value + log.info("Setting colour for LED on pin {} to {} ({})".format(self.pin,self.colour,output_led_colour(self.colour))) + + def set_state(self,value): + self.state=value + log.info("Turning LED {} {}".format(self.pin, self.mode[self.state])) + + def toggle_state(self,value): + if (value): + self.state=not self.state + log.info("Turning LED {} {}".format(self.pin, self.mode[self.state])) + + +def led_colour(value): + leds[0].set_colour(value) + +def led_brightness(value): + leds[0].set_brightness(value) + +def led_state(addr,value): + led=addr.split("/")[6] + leds[int(led)-3].toggle_state(bool(value)) + +parser = argparse.ArgumentParser(description='OSC listener for LEDs') +parser.add_argument('--listen',action='store',default='127.0.0.1:9000') +parser.add_argument('--debug-osc',action='store_true',default=False) +args=parser.parse_args() + +# Start the system. +log.info("Starting OSC...") + + +pprint(args) + +if args.debug_osc: + osc_startup(logger=log) +else: + osc_startup() + + +listen_address=args.listen.split(':')[0] +listen_port=args.listen.split(':')[1] + +osc_udp_server(listen_address,listen_port, clientname) +# Set up osc paths +log.info("Binding targets...") +osc_method("/track/2/fx/1/fxparam/1/value",led_colour) +osc_method("/track/2/fx/1/fxparam/2/value",led_brightness) +osc_method("/track/2/fx/1/fxparam/[!12]/value",led_state,argscheme=OSCARG_ADDRESS+OSCARG_DATAUNPACK) + +log.info("Creating LEDs...") +# Create LEDs +leds=[LED(i) for i in range(0,4)] + +finished=False +log.info("Starting loop") +while not finished: + osc_process() + +