Как использовать значения массива в качестве аргументов функции в sclang (в контексте отправки большого числа чисел с плавающей запятой через OSC) - PullRequest
0 голосов
/ 08 мая 2019

Я хотел бы использовать массив с плавающей точкой в ​​качестве аргументов функции для 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);
)

Но мне нужно более общее решение для разных размеров массива.

1 Ответ

0 голосов
/ 08 мая 2019

В SuperCollider есть синтаксический сахар для распаковки массивов -

  1. Для вызовов функций:
(
var list = [1, 2, 3];
func(*list);  // equivalent to func(list[0], list[1], list[2])
)
Для назначения:
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");
...