You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:08:26