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

Я совершенно новичок в Max и изо всех сил пытаюсь понять, как использовать массивы и параметры 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 получает неопределенные входные данные.

введите здесь описание изображения


person Richard    schedule 21.05.2017    source источник


Ответы (1)


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

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

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

var inlets = 2;
var outlets = 1;

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

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

person Niccolò Granieri    schedule 13.06.2017