Skip to main content

在纯 Python 中打开声音控制服务器和客户端实现

项目描述

在纯 python (3.5+)中打开声音控制服务器和客户端实现。

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

当前状态

该库是按照 http://opensoundcontrol.org/spec-1_0的规范开发的 ,目前处于稳定状态。

特征

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

  • UDP客户端

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

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

  • 广泛的单元测试覆盖率

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

文档

可在https://python-osc.readthedocs.io/获得。

安装

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

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

或来自开发版本的原始来源:

$ python setup.py test
$ python setup.py install

例子

简单的客户端

"""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 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()
  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.8.0.tar.gz (25.3 kB 查看哈希

已上传 source

内置分布

python_osc-1.8.0-py3-none-any.whl (32.0 kB 查看哈希

已上传 py3