function set_parameter() // забиваем свою функцию
( // начинаем забивание
Undo_BeginBlock(); // для того, чтобы можно было отменить действие
GetUserInputs("input?", 4, "track name:, fx name:, parameter number:, value:", #inputdata); // ок, тут поинтереснее. Всё, что в кавычках, запоминается в один string параметр #inputdata через запятую, 4 - количество
match("%s,%s,%d,%f", #inputdata, #track_name, #fx_name, par_num0, value); // раскрываем всё, что было в #inputdata, и привязываем это дело к переменным, которые можно использовать в коде. Переменные соответственно #string, #string, integer, float point
par_num = par_num0 - 1; // отсчёт порядковых номеров эффектов в цепи начинается с нуля, так что мы вбиваем, например, единицу в поле ввода, а эта строка указывает, что нам нужно будет сделать всё на плагине с порядковым индексом 0
i = 0; // стартовый индекс трека для лупа, то есть мы начинаем долбление лупа с первого трека, индексы здесь аналогично начинаются с нуля
trackcount = CountTracks(0); // перебор треков, (ноль здесь и в подобных функциях говорит риперу, что выполнять функцию нужно в активном проекте)
loop(trackcount, // петля для каждого из треков, перечисленных предыдущей функцией, т.е. всех треков в проекте в данном случае (могло быть, скажем, CountSelectedTracks - соответственно был бы перебор выделенных треков)
track = GetTrack(0, i); // берём трек с индексом i, в первый раз он равен нулю (i = 0) перед началом лупа), то есть первый трек в проекте (напомню, исчисление индексов треков с нуля начинается)
GetSetMediaTrackInfo_String(track, "P_NAME", #cur_track, 0); // запоминаем имя трека в переменную #cur_track из его индекса (ранее указанная нами переменная track)
match(#track_name, #cur_track) ? ( // соответствует ли имя трека забитому нами в поле ввода?
fx = TrackFX_GetByName(track, #fx_name, 0); // ок, соответствует, значит достаём индекс нужного эффекта из переменной, которую мы забили в поле ввода
TrackFX_SetParam(track, fx, par_num, value);//ну и применяем параметр в итоге, имея в арсенале все требуемые для этой функции переменные
); // это мы закончили вопрос "соответствует ли имя трека забитому нами?". Если бы не соответствовало, до этой строки всё бы игнорировалось
i += 1; // в первый раз добавляем к нулю единицу. Теперь у нас i=1. Далее код перескакивает на строку, начинающуюся с loop. Прогоняем луп заново уже для второго трека, добавляем ещё единицу, снова прогоняем и т.д.
); // луп пробегает через все треки, завершаем его этой строкой
TrackList_AdjustWindows(0); // обновляет всё, что связано с TCP, на всякий случай
Undo_EndBlock("set parameter", 0); // говорит риперу, что вот он, конец куска кода, начавшегося с Undo_BeginBlock, который если что можно отменить
); // завершаем забивание функции
set_parameter(); // выполняем функцию, благо она у нас одна и без аргументов
UpdateArrange();// на всякий случай обновляет аранж