如何在 sclang 中使用数组值作为函数参数(在通过 OSC 发送大量浮点数的上下文中)

How to use array values as function arguments in sclang (in the context of sending lots of floats via OSC)

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

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

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

对于固定的数组大小/参数计数,我想出了这个:

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

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

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