1

我想使用浮点数组作为 OSC.sendMessage() 的函数参数。例如在 PHP 中,我知道 call_user_func_array()。sclang中有类似的东西吗?

上下文是我想通过 OSC 从 sclang 向 Unity 发送大量浮点值。AFAIK 不可能直接在 OSC 消息中嵌入一组值。

如果有更好的方法来实现这一点,我也愿意提供建议,因为我的理解是,我可以打包到 1 条 OSC 消息中的值的数量可能会受到限制,也许我必须自己处理碎片/跨越多条消息。

对于固定的数组大小/参数计数,我发现了这一点:

(
var floats = [13.37, 31337.1337, 1.0];
{ | a, b, c | o.sendMsg("/LoadAudioData", a, b, c); }.valueArray(floats);
)

但是我需要一个针对不同数组大小的更通用的解决方案。

4

1 回答 1

1

SuperCollider 中有用于解包数组的语法糖 -

  1. 对于函数调用:
(
var list = [1, 2, 3];
func(*list);  // equivalent to func(list[0], list[1], list[2])
)
  1. 对于分配:
var a, b, c;
#a, b, c = [1, 2, 3]; // equivalent to a=1; b=2; c=3;

而且,即使对于您的示例代码,SC 也支持参数包样式语法来处理变量数组:

(
var formatWarning = {
   |string, ...args| // where args becomes an array of all remaining variables
   string.format(*args).warn;
};
formatWarning.value("Too much % %!", "syntactic sugar", "for me");
于 2019-05-08T20:34:06.413 回答