Dup Ver Goto 📝

Simple OSC Send and Receive

To
154 lines, 410 words, 4118 chars Page 'SendAndReceive' does not exist.

Examples

BobbinsServer

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