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 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 inrange(10):
client.send_message("/filter", random.random())
time.sleep(1)
在这个示例中,客户端会连接到指定的 OSC 服务器并发送随机值。
简单服务器示例
下面是一个简单的 OSC 服务器示例,该程序监听多个地址,并打印接收到的数据:
import argparse
import math
from pythonosc.dispatcher importDispatcher
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()
这个服务器将监听来自客户端的消息,并输出相应的值。
构建 OSC Bundles
Python-OSC 还支持构建 OSC Bundles,允许将多个消息组合在一起发送。以下是一个构建 Bundle 的示例:
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)
# 添加多个消息到 Bundle
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"x01x02x03")
bundle.add_content(msg.build())
sub_bundle = bundle.build()
bundle.add_content(sub_bundle)
bundle = bundle.build()
# 通过客户端发送 Bundle
client.send(bundle)
这个示例展示了如何创建和发送一个包含多个消息的 OSC Bundle。
总结
Python-OSC 是一个强大且易于使用的库,适合任何想要使用 OSC 协议进行交互的开发者。无论是简单的客户端、服务器,还是更复杂的消息处理,它都能满足需求。通过本篇文章的介绍,希望你能快速上手并在项目中应用 Python-OSC。
项目地址:https://github.com/attwad/python-osc
原文始发于微信公众号(小白这样学Python):Python-OSC :一个用于实现 OSC 协议的纯 Python 库,帮助开发者与音乐设备和控制应用进行交互
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/308653.html