【问题标题】:Open Sound Control (OSC) Arrays in Rug.OSC in C#在 C# 中的 Rug.OSC 中打开声音控制 (OSC) 数组
【发布时间】:2026-01-28 04:20:03
【问题描述】:

我正在使用用于 Open Sound Control 或 OSC 的 Rug.OSC 库在 C# 中编写一些代码。我已经成功地将 OSC 消息从它发送到处理等中的其他代码,但只有浮点数或整数的单个或短列表,而不是数组。我有一个相当大的数组(1462 个浮点数),我想在一个消息中作为一个数组发送,而不是 1462 个单个浮点消息,但我在 MSVS 中得到的只是错误。

我想用 C# 代码做的基本上是这样的:

float[] myArray = new float[1462]; myOscMessage = new OscMessage("/array", myArray);

我查看了这里的语法:

https://bitbucket.org/rugcode/rug.osc/wiki/Message%20arguments%20as%20Rug.Osc%20understands%20them

并尝试过如下语法:

myOscMessage = new OscMessage("/array", {myArray});

--或--

myOscMessage = new OscMessage("/array", new float[]{myArray});

--或--

myOscMessage = new OscMessage("/array", new float[]{new float[]{myArray}});

但我收到如下错误:

Rug.Osc.dll 中出现“System.ArgumentException”类型的未处理异常

-- 或--

无法将 float[] 转换为 float

我可能在这里遗漏了简单,但我似乎无法弄清楚。有关如何使用 Rug.OSC 库在 C# 中通过 OSC 发送浮点数组的任何建议?

【问题讨论】:

  • 另外应该注意的是,在默认设置中使用 Rug.Osc 时,不可能通过 UDP 在单个消息中发送 1462 个浮点数,因为它会超过最大数据包大小。它总计超过 7310 个字节,因为为每个数组元素写入了一个类型标签条目。以byte[] (blob) 形式发送可能会更好,因为类型标签开销最小。您可能还需要考虑对阵列进行切片或使用 TCP 等非 udp 传输层。

标签: c# arrays osc


【解决方案1】:

目前无法在OscMessage 构造函数中使用float 类型的数组作为参数。但是可以使用object[]

您可以使用下面的代码将float[] 转换为object[]

float[] floats = new float[] { 1f, 2f, 3f, 4f, 5f, 6f, 7f, 9f, 10f }; 

// cast float array into an object array            
object[] objects = floats.Cast<object>().ToArray();            

OscMessage message = new OscMessage("/test", objects);

message 的内容将是/test, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 9f, 10f

我将考虑在下一版本中添加使用任何有效 OSC 类型的数组参数创建消息的功能。

免责声明:我是 Rug.Osc 的作者

【讨论】:

    最近更新 更多