如何在sclang中将数组值用作函数参数(在通过OSC发送大量浮点的情况下)

时间:2019-05-08 15:56:41

标签: osc supercollider

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

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

如果有更好的方法可以实现此目标,我也乐于提出建议,因为我的理解是,对于我可以打包到1个OSC消息中的值的数量可能存在一些限制,也许我必须处理碎片化/跨越多个对象自己发消息。

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

copy-of()

但是我需要针对不同阵列大小的更通用的解决方案。

1 个答案:

答案 0 :(得分:0)

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");