Да, не нужно!#tempstr может и не надо писать в скобках, попробуйте.
function setparamvol()
(
match("%s, %d, %d, %f", #tempstr, #trackname, effect_id, param_id, param_vol);
GetExtState(#trackguid, "TrackGUID", #trackname);
track = extension_api("BR_GetMediaTrackByGUID", 0, #trackguid);
i = effect_id - 1;
c = param_id - 1;
TrackFX_SetParam(track, i, c, param_vol);
);
#tempstr = "KEY01_P1, 2, 5, 0.2"; // trackname, порядковый номер эффекта, порядковый номер параметра, величина параметра
setparamvol();
#tempstr = "KEY01_P4, 2, 5, 0.05"; // trackname, порядковый номер эффекта, порядковый номер параметра, величина параметра
setparamvol();
function setparamvol()
(
match("%s, %d, %d, %f", #tempstr1, #trackname, effect_id, param_id, param_vol);
match("%s, %d, %s", #tempstr2, #trackname, effect_id2, #preset);
GetExtState(#trackguid, "TrackGUID", #trackname);
track = extension_api("BR_GetMediaTrackByGUID", 0, #trackguid);
i = effect_id - 1;
a = effect_id2 - 1;
c = param_id - 1;
TrackFX_SetParam(track, i, c, param_vol);
TrackFX_SetPreset(track, a, #preset);
);
#tempstr1 = "KEY01_P1, 2, 5, 0.2"; // trackname, порядковый номер эффекта, порядковый номер параметра, величина параметра
setparamvol();
#tempstr1 = "KEY01_P4, 2, 5, 0.05"; // trackname, порядковый номер эффекта, порядковый номер параметра, величина параметра
setparamvol();
#tempstr2 = "KEY01_P1, 3, P004"; // trackname, порядковый номер эффекта, presetname
setparamvol();
Михаил, вы меня безусловно извините, что нависаю - но у вас уже есть определённый статус на Форуме - по этому и спрашиваю.Опять же, попробуйте. Это намного быстрее, чем постоянно спрашивать))
track = reaper.GetTrack(0,0)
a = reaper.GetMediaTrackInfo_Value(track, "D_VOL") -- get volume
b_set = 1 -- final value
time_to_change = 2 -- time
b = b_set - a
function timer()
time2 = reaper.time_precise()
time_delta = time2 - time1
x = time_delta / time_to_change
b0 = b*x
time_con = true
if time_con == true then
if time2 - time1 < time_to_change then
time_con = true
reaper.defer(timer)
set = a + b0
reaper.SetMediaTrackInfo_Value(track, "D_VOL", set)
else
time_con = false
end
end
end
time1 = reaper.time_precise()
timer()
Думаю, что для точных конечных значений всё равно в конце выполнения заданного параметра нужно делать его корректировку-сравнение с этим самым параметром. Не точность конечная в пределах второго знака, так что это не страшно в общем-то, но лучше корректировку делать в конце выполнения кода.Это только принцип)) Есть тонна нюансов. С самими значениями ещё можно что-то придумать. Гораздо большую проблему представляет собой использование таймера, он выбрасывает разные значения, поэтому придётся подумать над тем, как его использовать для точных конечных значений. На гифке это видно.
Не...... нельзя использовать величины, которыми нельзя управлять и которые могут меняться не предсказуемо (от мощности процессора, например).Хотя мне кажется, есть немного другой способ решения, но его надо тестировать. (условие + приращение переменной + расчёт среднего времени выполнения Рипером строчки скрипта - без понятия насколько криво это работать будет)
такая важная функция как время отсутствует как точный параметр в скриптах
The defer-calls are made with a timer in Reaper that runs in the GUI thread, so you are not guaranteed a stable time interval between the calls. You need to figure out some solution that doesn't depend on the timing of the defer-call being consistent.
//render area of selected tracks
main_oncommand(41716,0);
//cut tracks
main_oncommand(40337,0);
//last track
trcount=CountTracks(0);
lasttr=GetTrack(0, trcount-1);
SetMediaTrackInfo_Value(lasttr, "I_SELECTED",1);
//paste
main_oncommand(40058,0);
function Open_Item_and_Zoom_to_Content()
(
Main_OnCommand(40153, 0); // MAIN section action 40153: "open selected item in MIDI editor"
active_MIDI_editor = MIDIEditor_GetActive(); // Now the MIDI editor is opened -> get MIDI editor ID
MIDIEditor_OnCommand(active_MIDI_editor, 40466); // ME action: "zoom to content"
MIDIEditor_OnCommand(active_MIDI_editor, _cf13e58d303dc541bd14eed46abbf6fd); // ME action: "my custom action"
MIDIEditor_OnCommand(active_MIDI_editor, 40003); // ME action: "select all notes"
);
Open_Item_and_Zoom_to_Content();
MIDIEditor_OnCommand(40466,0);
MIDIEditor_OnCommand(NamedCommandLookup("_cf13e58d303dc541bd14eed46abbf6fd"), 0);
Михаил, я это тоже пробовал - не заработалоValOut == 0 ? (
если равен
) : (
если не равен
);
А это в самом деле работает! Спасибо!TrackFX_GetParam()-как я понимаю,считывает не текущее значение,а возможные макс. и мин. значения определенного параметра.
Нужно TrackFX_GetParamNormalized(),например.
Видимо,узнать допустимые значения,и если,например,устанавливаемое значения выходит за пределы границ допустимого-поставить рамки.Парни, а в каких целях тогда может быть использовано - TrackFX_GetParam()?