跳转到主要内容

纯Python实现的Open Sound Control服务器和客户端

项目描述

纯Python实现的Open Sound Control服务器和客户端。

https://github.com/attwad/python-osc/actions/workflows/python-test.yml/badge.svg

当前状态

该库遵循OpenSoundControl规范1.0 开发,目前处于稳定状态。

功能

  • UDP阻塞/线程/分叉/asyncio服务器实现

  • UDP客户端

  • int, int64, float, string, double, MIDI, 时间戳,blob,nil OSC参数

  • 简单的OSC地址<->回调匹配系统

  • 广泛的单元测试覆盖率

  • 基本的客户端和服务器示例

文档

可在https://python-osc.readthedocs.io/ 查找。

安装

python-osc是一个没有外部依赖的纯Python库,要安装它只需使用pip(首选)

https://img.shields.io/pypi/v/python-osc.svg
$ pip install python-osc

示例

简单客户端

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

简单服务器

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

构建捆绑包

from pythonosc import osc_bundle_builder
from pythonosc import osc_message_builder

bundle = osc_bundle_builder.OscBundleBuilder(
    osc_bundle_builder.IMMEDIATELY)
msg = osc_message_builder.OscMessageBuilder(address="/SYNC")
msg.add_arg(4.0)
# Add 4 messages in the bundle, each with more arguments.
bundle.add_content(msg.build())
msg.add_arg(2)
bundle.add_content(msg.build())
msg.add_arg("value")
bundle.add_content(msg.build())
msg.add_arg(b"\x01\x02\x03")
bundle.add_content(msg.build())

sub_bundle = bundle.build()
# Now add the same bundle inside itself.
bundle.add_content(sub_bundle)
# The bundle has 5 elements in total now.

bundle = bundle.build()
# You can now send it via a client as described in other examples.

许可证?

未经授权,请随意使用。(http://unlicense.org

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

python_osc-1.9.0.tar.gz (33.0 kB 查看哈希)

上传时间 源代码

构建分发

python_osc-1.9.0-py3-none-any.whl (43.7 kB 查看哈希)

上传时间 Python 3

支持者