如何使用python-osc发送OSC Bundle?
如何用python-osc发送OSC Bundle?
我按照python-osc仓库里的示例构建了OSC 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里添加4条消息,每条消息参数递增 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() # 把这个Bundle嵌套进去 bundle.add_content(sub_bundle) # 现在Bundle里总共有5个元素 bundle = bundle.build()
但按照提示“通过其他示例中的客户端发送”时遇到了问题:
- 尝试
client.send_message(bundle),报错:SimpleUDPClient.send_message() missing 1 required positional argument: 'value'
- 尝试
client.send_message("/test", bundle),报错:Infered arg_value type is not supported
我的客户端代码是参考官方示例写的:
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="OSC服务器的IP地址") parser.add_argument("--port", type=int, default=5005, help="OSC服务器监听的端口") 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)
请问发送OSC Bundle的正确语法是什么?
正确解决方法
SimpleUDPClient提供了专门用于发送Bundle的方法send_bundle(),不需要用send_message()。把构建Bundle的代码和客户端代码结合,完整示例如下:
import argparse from pythonosc import udp_client from pythonosc import osc_bundle_builder from pythonosc import osc_message_builder if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--ip", default="127.0.0.1", help="OSC服务器的IP地址") parser.add_argument("--port", type=int, default=5005, help="OSC服务器监听的端口") args = parser.parse_args() client = udp_client.SimpleUDPClient(args.ip, args.port) # 构建Bundle bundle = osc_bundle_builder.OscBundleBuilder( osc_bundle_builder.IMMEDIATELY) msg = osc_message_builder.OscMessageBuilder(address="/SYNC") msg.add_arg(4.0) 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() bundle.add_content(sub_bundle) bundle = bundle.build() # 发送Bundle client.send_bundle(bundle)
核心区别是:
send_message()用于发送单条OSC消息,需要传入地址和参数send_bundle()用于发送OSC Bundle,直接传入构建好的Bundle对象即可
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

