Browse Source

updates

master
Ben Savage 5 years ago
parent
commit
992d96f6e0
  1. 24
      osc_client.py
  2. 45
      osc_jem_server.py
  3. 107
      osc_server.py

24
osc_jem_client.py → 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 <server>:<port>. 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]()

45
osc_jem_server.py

@ -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()

107
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()
Loading…
Cancel
Save