Python-OSC 是一个用于实现 Open Sound Control(OSC)协议的纯 Python 库。它使得开发者能够方便地与许多音乐设备和控制应用进行交互。本文将详细介绍 Python-OSC 的特性、安装方法及示例代码,帮助你快速上手。
Python-OSC 的核心特性
Python-OSC 提供了多种服务器和客户端实现,包括 UDP 和 TCP 的阻塞、线程、分叉及异步服务器。其主要特性包括:
• 多种服务器实现:支持 UDP 和 TCP 协议,适用于不同的应用场景。
• 协议格式支持:支持 OSC 1.0 和 1.1 协议格式的 TCP 客户端。
• 丰富的数据类型:支持多种 OSC 参数类型,包括整数、浮点数、字符串、MIDI、时间戳等。
• 简单的地址与回调匹配系统:用户可以轻松地将 OSC 地址与处理函数相匹配。
• 回应支持:服务器和客户端都可以从回调处理程序发送响应。
• 全面的单元测试覆盖:确保库的稳定性和可靠性。
安装 Python-OSC
Python-OSC 是一个纯 Python 库,没有外部依赖。可以通过以下命令简单安装:
$ pip install python-osc
简单客户端示例
下面是一个简单的 OSC 客户端示例,该程序向 /filter 地址发送 10 个随机值,每秒发送一次:
import argparseimport randomimport timefrom pythonosc import udp_clientif __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 inrange(10): client.send_message("/filter", random.random()) time.sleep(1)
在这个示例中,客户端会连接到指定的 OSC 服务器并发送随机值。
简单服务器示例
下面是一个简单的 OSC 服务器示例,该程序监听多个地址,并打印接收到的数据:
import argparseimport mathfrom pythonosc.dispatcher importDispatcherfrom pythonosc import osc_serverdef 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:passif __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()
这个服务器将监听来自客户端的消息,并输出相应的值。
构建 OSC Bundles
Python-OSC 还支持构建 OSC Bundles,允许将多个消息组合在一起发送。以下是一个构建 Bundle 的示例:
from pythonosc import osc_bundle_builderfrom pythonosc import osc_message_builderbundle = osc_bundle_builder.OscBundleBuilder(osc_bundle_builder.IMMEDIATELY)msg = osc_message_builder.OscMessageBuilder(address="/SYNC")msg.add_arg(4.0)# 添加多个消息到 Bundlebundle.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()bundle.add_content(sub_bundle)bundle = bundle.build()# 通过客户端发送 Bundleclient.send(bundle)
这个示例展示了如何创建和发送一个包含多个消息的 OSC Bundle。
总结
Python-OSC 是一个强大且易于使用的库,适合任何想要使用 OSC 协议进行交互的开发者。无论是简单的客户端、服务器,还是更复杂的消息处理,它都能满足需求。通过本篇文章的介绍,希望你能快速上手并在项目中应用 Python-OSC。
项目地址:https://github.com/attwad/python-osc