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