tags: #python #osc #example # Send and Receive Install `pythonosc` via `python -m pip install pythonosc` Sender (host,port hardwired to pair with receiver script below) ```python from pythonosc import udp_client client = udp_client.SimpleUDPClient("localhost",7001) def s(path,*args): print(f"Sending {path=} {args=}") client.send_message(path,args) # either add code to send messages here, or run with python -i (interactive) # so that you can e.g. s("/hello","world") ``` ## Blocking Receiver ```python from pythonosc.dispatcher import Dispatcher from pythonosc.osc_server import BlockingOSCUDPServer def default_handler(address, *args): print(f"DEFAULT {address}: {args}") dispatcher = Dispatcher() dispatcher.set_default_handler(default_handler) ip = "0.0.0.0" port = 9000 server = BlockingOSCUDPServer((ip, port), dispatcher) server.serve_forever() # Blocks forever ``` ## Threading Receiver Receiver (note that host and port are hardwired to save writing code to handle env vars and command line params). ```python import os from pythonosc import dispatcher,osc_server def fmt(x): 'turn numbers into strings, and add "quotes" to strings' if type(x) in (int,float): return str(x) elif type(x) is str: if '"' in x and not "'" in x: return f"'{x}'" else: x = x.replace('"',r'\"') return f'"{x}"' def dump(*xs): n,*ys = xs print(f"{n}: {', '.join(map(fmt,ys))}") def main(): port = int(os.getenv("port",8000)) disp = dispatcher.Dispatcher() disp.set_default_handler(dump) serv = osc_server.ThreadingOSCUDPServer(("0.0.0.0",port),disp) print(f"Serving on port {port}") serv.serve_forever() if __name__ == "__main__": main() ```