hedgehog/software/ OscPythonScripts001


These all use pythonosc. There is a change (recently merged as of Jan 2023) to allow you to specify the address family when sending. See PythonOscAddressFamilyMod. See PythonMidiDevicesToOsc for scripts that translate Midi↔OSc. Note that the current conventions used should in no way be considered stable or final. This (Hedgehog) is all at an early experimental stage.

Trivial send

description = '''
load in interactive mode (i.e. python -i trivial_send.py)
then use s("/osc/message",[1,2,3,4]) to send
'''
import socket
from pythonosc import udp_client
client = udp_client.SimpleUDPClient(host,9000,family=socket.AF_INET) # needs mod with family= optional parameter
def s(path,*args):
  print(f"Sending {path=} {args=}")
  client.send_message(path,args)

Trivial threading receive

description = '''
Receives OSC on port (default is 4567, else specify via port environment variable) 
and dumps to the terminal. Only listens on the IPV4 address.
'''

import os
from pythonosc import dispatcher,osc_server

def dump(*xs):
  n,*ys = xs
  print(f"{n}: {ys}")

def main():
  port = int(os.getenv("port",4567))

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