当前位置:首页>python>Python-OSC :一个用于实现 OSC 协议的纯 Python 库,帮助开发者与音乐设备和控制应用进行交互

Python-OSC :一个用于实现 OSC 协议的纯 Python 库,帮助开发者与音乐设备和控制应用进行交互

  • 2026-10-21 13:27:26
Python-OSC :一个用于实现 OSC 协议的纯 Python 库,帮助开发者与音乐设备和控制应用进行交互

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

最新文章

随机文章