Examples
From the Docs
Client
"""Small example OSC client
This program sends 10 random values between 0.0 and 1.0 to the /filter address,
waiting for 1 seconds between each value.
"""
import argparse
import random
import time
from pythonosc import udp_client
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="127.0.0.1",
help="The ip of the OSC server")
parser.add_argument("--port", type=int, default=5005,
help="The port the OSC server is listening on")
args = parser.parse_args()
client = udp_client.SimpleUDPClient(args.ip, args.port)
for x in range(10):
client.send_message("/filter", random.random())
time.sleep(1)
Server
"""Small example OSC server
This program listens to several addresses, and prints some information about
received packets.
"""
import argparse
import math
from pythonosc.dispatcher import Dispatcher
from pythonosc import osc_server
def print_volume_handler(unused_addr, args, volume):
print("[{0}] ~ {1}".format(args[0], volume))
def print_compute_handler(unused_addr, args, volume):
try:
print("[{0}] ~ {1}".format(args[0], args[1](volume)))
except ValueError: pass
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip",
default="127.0.0.1", help="The ip to listen on")
parser.add_argument("--port",
type=int, default=5005, help="The port to listen on")
args = parser.parse_args()
dispatcher = Dispatcher()
dispatcher.map("/filter", print)
dispatcher.map("/volume", print_volume_handler, "Volume")
dispatcher.map("/logvolume", print_compute_handler, "Log volume", math.log)
server = osc_server.ThreadingOSCUDPServer(
(args.ip, args.port), dispatcher)
print("Serving on {}".format(server.server_address))
server.serve_forever()
Other Examples
Another trivial sender (give messages as command line args)
#!/usr/bin/env python3
import re
import os
import sys
import argparse
import socket
from pythonosc import udp_client
default_port = 5005
host = os.getenv("PHOST",os.getenv("HOST","localhost"))
port = os.getenv("PPORT",os.getenv("PORT",default_port))
try:
port = int(port)
except ValueError:
print(f"Invalid PORT variable, defaulting to {default_port}")
port = default_port
def parse_arg(x):
for t in [int,float]:
try:
return t(x)
except ValueError:
pass
return x
if __name__ == "__main__":
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument("-h","--ip", default=host,
help="The ip of the OSC server")
parser.add_argument("-p","--port", type=int, default=port,
help="The port the OSC server is listening on")
parser.add_argument("--help", action="help", help="show this help message and exit")
args, other = parser.parse_known_args()
# we need only send empty messages
client = udp_client.SimpleUDPClient(args.ip, args.port, family=socket.AF_INET)
for x in other:
xs = re.split(r"\s+",x.strip())
addr = "/"+xs[0]
ys = [parse_arg(y) for y in xs[1:]]
print(f"Sending {addr} {ys} to {args.ip}:{args.port}")
client.send_message(f"/{addr}", ys)
and a receiver
#!/usr/bin/env python3
import os
from subprocess import run
from pythonosc.dispatcher import Dispatcher
from pythonosc import osc_server
import argparse
def handle_osc(*xs,**kw):
cmd = xs[0][1:]
args = xs[1:]
print(f"Got {cmd=} {args=} {kw=}")
def main():
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument("-h","--ip",
default="0.0.0.0", help="The ip to listen on")
parser.add_argument("-p","--port",
type=int, default=5005, help="The port to listen on")
parser.add_argument("--help",action="help",help="show this help")
args, other = parser.parse_known_args()
dispatcher = Dispatcher()
dispatcher.set_default_handler(handle_osc)
server = osc_server.ThreadingOSCUDPServer(
(args.ip, args.port), dispatcher)
print("Serving on {}".format(server.server_address))
server.serve_forever()
if __name__ == "__main__":
main()