Как передать два параметра объекту js, включая массив?

Я абсолютно новичок в Максе и пытаюсь понять, как использовать массивы и параметры Javascript.

У меня есть один рабочий объект JS, который выводит массив:

var inlets = 1;
var outlets = 1;

function getRandomChordProgression()
{       
    outlet(0, [1,4,5]);
    return [1,4,5];
}

А потом позже я хочу использовать этот массив в другом объекте js, который принимает массив и целое число:

var inlets = 2;
var outlets = 1;

function getCurrentChord(chords, barNumber)
{
    var chord = chords[barNumber % 3];
    outlet(0, chord);
    return chord;
}

Я попробовал ниже, но JS получает неопределенные входные данные.

1 ответ

Решение

Первое, на что нужно обратить внимание, это то, что в Max Msp, чтобы назначить список одному символу, вам нужно использовать объект "tosymbol". Даже если списки эффективно считаются одномерными массивами в Max Msp, для понимания в javascript их сначала необходимо преобразовать. Как только список преобразуется в символ, мы можем присоединить его к целому числу, полученному из числового поля, упаковать его с сообщением getCurrentChord и передать его в объект getCurrentChord.js.

Скриншот патча Max-Msp с использованием объекта

Вы увидите, что при преобразовании списка в символ каждый символ в массиве, включая пробелы, рассматривается как часть массива. Итак, на вашем примере массив, состоящий из 3 целых чисел, будет занимать 5 позиций, от 0 до 4. Для того, чтобы это работало, во втором скрипте.js необходимо установить для оператора modulo значение 5, чтобы иметь максимум остаток от 4. Это означает, что при установке числового поля на 1 или 3 у вас будет пустой вывод. Таким образом, вам нужно решить, как и если анализировать входные или выходные данные, чтобы получить только нужные значения.

var inlets = 2;
var outlets = 1;

function getCurrentChord(chords, barNumber)
{ 
 var chord = chords[barNumber % 5];
 outlet(0, chord);
}

Надеюсь, это поможет!

Другие вопросы по тегам