Помогите создать экшн / кастом экшн / скрипт

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
Последнее редактирование:
Buyan Привет!!!Дружище спасибо тебе за то что "модернизировал" этот замечательный скрипт Freeze selected tracks(only instruments).lua
то @EUGEN27771 и работал он у меня чётко как часы пока не поменял винду....теперь фризит все плагины что находятся на трэке то есть работает как простой фриз трека...может это из за того что я поставил англоязычную винду......? Если подскажеш что, буду благодарен !!!! Скрипт вообще бомба...)
Решил проблему!!! надо было поставить sws ))) а я почемуто был уверен что sws-ки прикручиваются к риперу когда сохраняешь конфиг.....оце я лох)))))))))))))
 
Всем привет. Помогите разобраться со строками в lua. Есть каналы с именами типа FL 1L, FL 2L... и т.д. Нужно как-то сделать идентификацию данных имен. По типу if Track_Name == FL (Любая цифра)L then какое-то действие.
И далее, if что-либо then Track_Name = Track_Name и дописать к имени " (FL [цифра])"
И далее, при повторном вызове скрипта нужно сделать так, чтобы не было повторного дописания имени типа
1) Track_Name (FL*)
2) Track_Name (FL*) (FL*)
3) Track_Name (FL*) (FL*) (FL*)
Думаю ясно объяснил.
 
@J T, Ну просто загадочно объясняешь))!
Что значит И далее, if что-либо then И вот как понимать твое "что либо" ???
JavaScript:
    Track_Name = "FL 5 L"
    anything = true
    numb = 2
    track = reaper.GetTrack( 0, 0 )
    
    
    if Track_Name == Track_Name:match(".-FL%s-%d+%s-L")then;
        Test = true
    end
    
    
    if anything then
        retval, stringNeedBig = reaper.GetSetMediaTrackInfo_String(track,"P_NAME","",0)
        if stringNeedBig ~= stringNeedBig:match(".-FL%s-%d+%s-L")then;
            reaper.GetSetMediaTrackInfo_String(track,"P_NAME",stringNeedBig.." FL "..numb.." L",1);
        end
    end
 
  • Like
Реакции: J T
@Archchie, благодарю. Процесс пошел. Но кое-что не выходит. Что нужно:
Если имя трека пустое или вида {FL *L}, то имя трека должно быть вида {FL *L}, т.е. если пустое то заполнить по шаблону {FL *L}, если совпадает, оставить как есть.
Если имя трека произвольное, то имя трека должно иметь следующий вид: Новое_Имя (FL *). С этим я разобрался.
Но, при повторном запуске скрипта, начинаются неприятности в виде Новое_Имя (FL *) (FL *). Как это победить?
CSS:
if something==true then
  retval, track_name = reaper.GetSetMediaTrackInfo_String(track,"P_NAME","",0)
        if  track_name == "" then
          reaper.GetSetMediaTrackInfo_String(track,"P_NAME",track_name.."FL "..stereo_source.."L",1) 
        end
        if track_name ~= "" and track_name ~= track_name:match("FL%s%dL") then
           reaper.GetSetMediaTrackInfo_String(track,"P_NAME",track_name.." (FL "..stereo_source..")",1) 
        end
if track_name ~= "" and track_name == track_name:match(".%s(FL%s%d)") then --пробовал скобки заменить на %p, совпадение не срабатывает.
  А здесь нужно либо недопустить дописания лишних скобок, либо допустить но после удалить.     
            
        end
  end
 
@J T, Что то странное ты делаешь или я не понимаю что ты хочешь сделать, но для чего ты пытаешься в третьем условии
"не допустить дописания лишних скобок" если они у тебя создаются уже во втором условии ?
Как ты хочешь не допустить этого, если ты уже допустил это ?
JavaScript:
    if something==true then
       retval, track_name = reaper.GetSetMediaTrackInfo_String(track,"P_NAME","",0)
       if  track_name == "" then
          reaper.GetSetMediaTrackInfo_String(track,"P_NAME",track_name.."FL "..stereo_source.." L",1)
       end
       if track_name ~= "" and track_name ~= track_name:match("FL%s%dL") then
         reaper.GetSetMediaTrackInfo_String(track,"P_NAME",track_name.." (FL "..stereo_source..")",1)
       end
       if track_name ~= "" and track_name == track_name:match("^.-%(FL%s-%d+%)%s-$") then --пробовал скобки заменить на %p, совпадение не срабатывает.
    -- А здесь нужно либо недопустить дописания лишних скобок, либо допустить но после удалить.     
       end
    end
JavaScript:
    if something == true then;
       local retval, track_name = reaper.GetSetMediaTrackInfo_String(track,"P_NAME","",0);
       if track_name:gsub(" ","")== "" then;
          reaper.GetSetMediaTrackInfo_String(track,"P_NAME",track_name.."FL "..stereo_source.."L",1);
       end;
       if track_name:gsub(" ","")~= "" and not
         track_name:match("^.-FL%s-%d+%s-L%s-$")and not
         track_name:match("^.-%(FL%s-%d+%)%s-$") then;
          reaper.GetSetMediaTrackInfo_String(track,"P_NAME",track_name.." (FL "..stereo_source..")",1)
       end;
    end;
 
  • Like
Реакции: J T
@Archchie, Совершенно работает) Суть: использую FL Studio в качестве инструмента. Если добавить этот инструмент, по-умолчанию имена каналов флки имеют вид. FL *L. Номер канала в имени трека вполне удобно, но когда используешь более 5 ЭФЭлочных каналов лучше их подписать, лично мне нужно чтобы ещё и номер канала в имени присутствовал, вручную переименовывать муторно и не удобно. А тут благодаря твоей помощи, у меня теперь есть кнопка которая все это делает. Благодарю)
 
Привет! @Archchie, Да, спасибо, разобрался и послал, всё ок.
Есть вот какой вопрос. Можно ли сделать render stem 1xoffline Render (Idle) ExtremeHQ, 64бит, Pre-Fader, Pre-Pan, Post FX?
Надеюсь, понятно объяснил.
 
Парни, кто знает помогите - нужна функция, которая точно показывает, что данная инстанция Рипера активна, что изменения в Рипере сделал пользователь с ним работающий, не они пришли от Ремоутов.
Хотя, поясню задачу подробно, а то сам всегда ругаюсь, когда из середины......

Нужно распознать, что изменение какого либо параметра в Рипере произошло путём штатного воздействия именно на его интерфейс (мышкой или с клавиатуры или с какого-то иного стандартного (штатного) контролера).
Нужно знать, что оно не явилось следствием прихода управляющего сигнала от Ремоута (по сети - посредством OSC или по входам посредством midi, например).
 
@Дима Горелик, Проверяй / На ..... с тебя.
JavaScript:
    -- Render stem-1xoffline Render(Idle)-ExtremeHQ-Wave 64 bit-pre fader-pre pan-post fx
    
    
    
    -------------------------------------------------------
    local function no_undo()reaper.defer(function()end)end;
    -------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------    
    if not reaper.JS_Window_Find then;
        reaper.MB("Extension not installed - reaper_js_ReaScriptAPI!","Render Error",0);
        no_undo() return;
    end;
    
    local CountSelTrack = reaper.CountSelectedTracks(0);
    if CountSelTrack == 0 then reaper.MB("No Track Selected!","Render Error",0)no_undo() return end;
    
    
    local title = "Render stem-1xoffline Render(Idle)-ExtremeHQ-Wave 64 bit-pre fader-pre pan-post fx"
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Save render / ------------------------------------------------------------------------
    local S = {};
    S.RENDER_SETTINGS   = reaper.GetSetProjectInfo  (0,"RENDER_SETTINGS"  ,0,0);--Sourse      --3
    S.RENDER_BOUNDSFLAG = reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",0,0);--Bounds      -- 1-2
    S.RENDER_TAILFLAG   = reaper.GetSetProjectInfo  (0,"RENDER_TAILFLAG"  ,0,0);--Tail        -- 31
    S.RENDER_TAILMS     = reaper.GetSetProjectInfo  (0,"RENDER_TAILMS"    ,0,0);--Tail ms     -- ? 
    S.RENDER_SRATE      = reaper.GetSetProjectInfo  (0,"RENDER_SRATE"     ,0,0);--Sample rate --0 
    S.RENDER_CHANNELS   = reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS"  ,0,0);--channels    --2 
    S.RENDER_SPEED      = reaper.SNM_GetIntConfigVar("projrenderlimit"      ,0);--speed       --4
    S.RENDER_RESAMPLE   = reaper.SNM_GetIntConfigVar("projrenderresample"   ,0);--resample    --9
    S._, S.RENDER_FORMAT  = reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT",0,0)-- render_format
    S.RENDER_ADDTOPROJ   = reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"  ,0,0);-- 1=add rendered files to project
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Подготовить рендер / -----------------------------------------------------------------
    
    local Sourse = (((S.RENDER_SETTINGS&4)+(S.RENDER_SETTINGS&16))+3);
    reaper.GetSetProjectInfo(0,"RENDER_SETTINGS" ,Sourse,1);--Sourse 
    
    startLoop, endLoop = reaper.GetSet_LoopTimeRange(0,0,0,0,0);---
    if startLoop == endLoop then;                               ----
        reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",1,1);  -----Bounds
    else;                                                       ----
        reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",2,1);  ---
    end;                                                        --
    
    --reaper.GetSetProjectInfo  (0,"RENDER_TAILFLAG"  ,0,0);--Tail
    --reaper.GetSetProjectInfo  (0,"RENDER_TAILMS"    ,0,0);--Tail ms
    
    reaper.GetSetProjectInfo(0,"RENDER_SRATE",0,1);--Sample rate --0 default
    reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS",2,1);--channels    -- 2 stereo 
    
    reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT","ZXZhd0ABAA==",1)--render_format--wav 64
    
    reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"   ,1 ,1);--add rendered files to project
    
    ---
    reaper.SNM_SetIntConfigVar("projrenderlimit",4);--speed--4-1x Offline Render (idle)
    reaper.SNM_SetIntConfigVar("projrenderresample",9);--resample--Extreme HQ (768pt HQ Sinc)
    
    
    local Localize = reaper.JS_Localize("Render to File","common");
    local Window_Find = reaper.JS_Window_Find(Localize,true);
    if Window_Find then;
        reaper.JS_Window_Destroy(Window_Find);
        reaper.Main_OnCommand(40015,0);--Render project to disk... 
    end;
    ---
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Подготовить треки и рендер / ---------------------------------------------------------
    
    reaper.PreventUIRefresh(1);
    reaper.Undo_BeginBlock();
    
    ----
    local SV = {};
    local CountSelTrack = reaper.CountSelectedTracks(0);
    for i = 1,CountSelTrack do;
        SV[i] = {};
        SV[i].SelTr = reaper.GetSelectedTrack(0,i-1);
        SV[i].VolTr = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL");
        SV[i].PanTr = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN");
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL",1);
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN",0);
    end;
    ----
    
    reaper.SelectAllMediaItems(0,0);
    
    reaper.Main_OnCommand(42230,0);--проект рендер,самые последние настройки
    
    reaper.Main_OnCommand(40297,0); -- Track: Unselect all tracks
    
    ----
    local ST = {};
    for i = #SV,1,-1 do;
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL",SV[i].VolTr);
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN",SV[i].PanTr);
        ----
        local numb = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"IP_TRACKNUMBER");
        
        local CountTracks = reaper.CountTracks(0);
        local lastTr = reaper.GetTrack(0,CountTracks-1);
        reaper.SetOnlyTrackSelected(lastTr);
        reaper.ReorderSelectedTracks(numb,0);
        table.insert(ST,lastTr);
    end;
    
    for i = 1,#ST do;
        if i == 1 then;
            reaper.SetOnlyTrackSelected(ST[i]);
        else;
            reaper.SetMediaTrackInfo_Value(ST[i],"I_SELECTED",1);
        end;  
    end;
    
    
    reaper.Undo_EndBlock(title,-1);
    reaper.PreventUIRefresh(-1);
    ----
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Restore render / ---------------------------------------------------------------------
    reaper.GetSetProjectInfo  (0,"RENDER_SETTINGS"   ,S.RENDER_SETTINGS  ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG" ,S.RENDER_BOUNDSFLAG,1);
    reaper.GetSetProjectInfo  (0,"RENDER_TAILFLAG"   ,S.RENDER_TAILFLAG  ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_TAILMS"     ,S.RENDER_TAILMS    ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_SRATE"      ,S.RENDER_SRATE     ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS"   ,S.RENDER_CHANNELS  ,1);
    reaper.SNM_SetIntConfigVar("projrenderlimit"     ,S.RENDER_SPEED       );
    reaper.SNM_SetIntConfigVar("projrenderresample"  ,S.RENDER_RESAMPLE    );
    reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT",S.RENDER_FORMAT    ,1);
    reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"   ,S.RENDER_ADDTOPROJ ,1);
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
 
@Archchie
Превосходно! Всё работает, после того как установил js_ReaScriptAPI через Reapack. При этом 1xoffline(idle) включается, когда выбран айтем. Если выбран только трек, то включается обычный Рендер - просто такая особенность, мне это не мешает, пишу, если кто-то ещё будет тестировать.
Два вопроса (прошу прощения, что не продумал это заранее) -
1. можно ли включить Dialog Box с возможностью назвать файл? (Сейчас по умолчанию untitled.wav).
2. Можно ли сделать multichannel tracks to multichannel files? (То есть, что если трэк мультиканальный, чтоб он делал мультиканальный рендер).
Спасибо! В целом, уверен, эта функция поднимет всех моих знакомых звукорежиссёров на уши.
 
Последнее редактирование:
При этом 1xoffline(idle) включается, когда выбран айтем
Не знаю при чем тут айтем если рендерится трек и почему у тебя так происходит. У меня все срабатывает, не важно выделены какие нибудь айтемы или нет.
1. можно ли включить Dialog Box с возможностью назвать файл?
Можно. Включил.
2. Можно ли сделать multichannel tracks to multichannel files?
Можно и я это сразу добавил. Поставь вот эти галочки в окне рендера
171776

JavaScript:
    -- v 2.0
    
    -- Render stem-1xoffline Render(Idle)-ExtremeHQ-Wave 64 bit-pre fader-pre pan-post fx
    
    
    local TailOnOff = 0
                 -- = -1 настройки из окна рендера (Tail)
                 -- =  0 отключить хвост (Tail)
    
    
    
    
    --========================================================================
    --========================================================================
    
    
    
    -------------------------------------------------------
    local function no_undo()reaper.defer(function()end)end;
    -------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------    
    if not reaper.JS_Window_Find then;
        reaper.MB("Extension not installed - reaper_js_ReaScriptAPI!","Render Error",0);
        no_undo() return;
    end;
    
    local CountSelTrack = reaper.CountSelectedTracks(0);
    if CountSelTrack == 0 then reaper.MB("No Track Selected!","Render Error",0)no_undo() return end;
    
    
    local title = "Render stem-1xoffline Render(Idle)-ExtremeHQ-Wave 64 bit-pre fader-pre pan-post fx"
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Save render / ------------------------------------------------------------------------
    local S = {};
    S.RENDER_SETTINGS   = reaper.GetSetProjectInfo  (0,"RENDER_SETTINGS"  ,0,0);--Sourse      --3
    S.RENDER_BOUNDSFLAG = reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",0,0);--Bounds      -- 1-2
    S.RENDER_TAILFLAG   = reaper.GetSetProjectInfo  (0,"RENDER_TAILFLAG"  ,0,0);--Tail        -- 31
    S.RENDER_TAILMS     = reaper.GetSetProjectInfo  (0,"RENDER_TAILMS"    ,0,0);--Tail ms     -- ? 
    S.RENDER_SRATE      = reaper.GetSetProjectInfo  (0,"RENDER_SRATE"     ,0,0);--Sample rate --0 
    S.RENDER_CHANNELS   = reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS"  ,0,0);--channels    --2 
    S.RENDER_SPEED      = reaper.SNM_GetIntConfigVar("projrenderlimit"      ,0);--speed       --4
    S.RENDER_RESAMPLE   = reaper.SNM_GetIntConfigVar("projrenderresample"   ,0);--resample    --9
    S._, S.RENDER_FORMAT = reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT",0,0)-- render_format
    S.RENDER_ADDTOPROJ   = reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"  ,0,0);-- 1=add rendered files to project
    S.SILENTLY_iNCREMENT = reaper.SNM_GetIntConfigVar("renderclosewhendone"  ,0);
    S._, S.RENDER_FILE = reaper.GetSetProjectInfo_String(0,"RENDER_PATTERN","",false);
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Подготовить рендер / -----------------------------------------------------------------
    
    ---
    local retval, NameFile = reaper.GetUserInputs("Name File",1,"Name File,extrawidth=150","-Stem-");
    if not retval then no_undo() return end;
    reaper.GetSetProjectInfo_String(0,"RENDER_PATTERN",NameFile,true);
    ---
    
    local Sourse = (((S.RENDER_SETTINGS&4)+(S.RENDER_SETTINGS&16))+3);
    reaper.GetSetProjectInfo(0,"RENDER_SETTINGS" ,Sourse,1);--Sourse 
    
    local startLoop, endLoop = reaper.GetSet_LoopTimeRange(0,0,0,0,0);---
    if startLoop == endLoop then;                                     ----
        reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",1,1);        -----Bounds
    else;                                                             ----
        reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",2,1);        ---
    end;                                            --------------------
    
    if TailOnOff == 0 then;
        reaper.GetSetProjectInfo(0,"RENDER_TAILFLAG",(S.RENDER_TAILFLAG&~4),1);
    elseif TailOnOff == 1 then;
        reaper.GetSetProjectInfo(0,"RENDER_TAILFLAG",(S.RENDER_TAILFLAG |4),1);
        reaper.GetSetProjectInfo(0,"RENDER_TAILMS",tonumber(TailTime)or 1000,1);
    end;
    
    reaper.GetSetProjectInfo(0,"RENDER_SRATE",0,1);--Sample rate --0 default
    reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS",2,1);--channels    -- 2 stereo 
    
    reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT","ZXZhd0ABAA==",1)--render_format--wav 64
    
    reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"   ,1 ,1);--add rendered files to project    
    
    ---
    reaper.SNM_SetIntConfigVar("projrenderlimit",4);--speed--4-1x Offline Render (idle)
    reaper.SNM_SetIntConfigVar("projrenderresample",9);--resample--Extreme HQ (768pt HQ Sinc)
    reaper.SNM_SetIntConfigVar("renderclosewhendone",17);--Silently increment
        
    
    local Localize = reaper.JS_Localize("Render to File","common");
    local Window_Find = reaper.JS_Window_Find(Localize,true);
    if Window_Find then;
        reaper.JS_Window_Destroy(Window_Find);
        reaper.Main_OnCommand(40015,0);--Render project to disk... 
    end;
    ---
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Подготовить треки и рендер / ---------------------------------------------------------
    
    reaper.PreventUIRefresh(1);
    reaper.Undo_BeginBlock();
    
    ----
    local SV = {};
    CountTrackXX = reaper.CountTracks(0);
    local CountSelTrack = reaper.CountSelectedTracks(0);
    for i = 1,CountSelTrack do;
        SV[i] = {};
        SV[i].SelTr = reaper.GetSelectedTrack(0,i-1);
        SV[i].VolTr = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL");
        SV[i].PanTr = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN");
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL",1);
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN",0);
    end;
    ----
    
    reaper.SelectAllMediaItems(0,0);
    
    reaper.Main_OnCommand(42230,0);--проект рендер,самые последние настройки
    
    reaper.Main_OnCommand(40297,0); -- Track: Unselect all tracks
    
    ----
    local ST = {};
    for i = #SV,1,-1 do;
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL",SV[i].VolTr);
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN",SV[i].PanTr);
        ----
        if (reaper.CountTracks(0) - CountTrackXX) == #SV then;
        
            local numb = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"IP_TRACKNUMBER");
            local CountTracks = reaper.CountTracks(0);
            local lastTr = reaper.GetTrack(0,CountTracks-1);
            reaper.SetOnlyTrackSelected(lastTr);
            reaper.ReorderSelectedTracks(numb,0);
            table.insert(ST,lastTr);
        end;
    end;
    
    for i = 1,#ST do;
        if i == 1 then;
            reaper.SetOnlyTrackSelected(ST[i]);
        else;
            reaper.SetMediaTrackInfo_Value(ST[i],"I_SELECTED",1);
        end;  
    end;
    
    
    reaper.Undo_EndBlock(title,-1);
    reaper.PreventUIRefresh(-1);
    ----
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
    
    
    
    -------------------------------------------------------------------------------------------
    -- / Restore render / ---------------------------------------------------------------------
    reaper.GetSetProjectInfo  (0,"RENDER_SETTINGS"   ,S.RENDER_SETTINGS  ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG" ,S.RENDER_BOUNDSFLAG,1);
    reaper.GetSetProjectInfo  (0,"RENDER_TAILFLAG"   ,S.RENDER_TAILFLAG  ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_TAILMS"     ,S.RENDER_TAILMS    ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_SRATE"      ,S.RENDER_SRATE     ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS"   ,S.RENDER_CHANNELS  ,1);
    reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT",S.RENDER_FORMAT    ,1);
    reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"   ,S.RENDER_ADDTOPROJ ,1);
    reaper.GetSetProjectInfo_String(0,"RENDER_PATTERN"  ,S.RENDER_FILE,true)
    reaper.SNM_SetIntConfigVar("projrenderlimit"     ,S.RENDER_SPEED       );
    reaper.SNM_SetIntConfigVar("projrenderresample"  ,S.RENDER_RESAMPLE    );
    reaper.SNM_SetIntConfigVar("renderclosewhendone" ,S.SILENTLY_iNCREMENT );
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
    
    local Localize = reaper.JS_Localize("Render to File","common");
    local Window_Find = reaper.JS_Window_Find(Localize,true);
    if Window_Find then;
        reaper.JS_Window_Destroy(Window_Find);
        reaper.Main_OnCommand(40015,0);--Render project to disk...
    end;
 
Не знаю при чем тут айтем если рендерится трек и почему у тебя так происходит. У меня все срабатывает, не важно выделены какие нибудь айтемы или нет.

Привет! Да, вчера почему-то стал блокировать редакцию ответов форум, а такая штука произошла только при первом рендере. Так и не узнал, в чём было дело. Потом всё работало отлично.

Можно. Включил.

Можно и я это сразу добавил. Поставь вот эти галочки в окне рендера
Посмотреть вложение 171776
JavaScript:
Поставил галочки, сохранил изменения, включил твой скрипт и всё заработало! 
Скрипт великолепный, с меня донат. Спасибо огромное!
 
Привет, @Archchie!
Всё работает отлично, спасибо! С меня донат!
Вопрос: Можно ли сделать версии для рендера в 32, 24, 16 бит? Либо с dialog box где выбираешь word length?
 
Подскажите, а есть ли какой тогл на переключение этих меню?
0da0aaf9a8b1.jpg

Я себе сделал экшн на переключение 1 и 3 пункта, но он сам никак не отслеживает какой пункт выбран, а хотелось бы визуально на кнопке всегда видеть в каком режиме у меня сейчас запись
 
@Дима Горелик,
171897

JavaScript:
    -- v 3.0
   
    -- Render stem-1xoffline Render(Idle)-ExtremeHQ-Wave 64 bit-pre fader-pre pan-post fx
   
   
    local TailOnOff = 0
                 -- = -1 настройки из окна рендера (Tail)
                 -- =  0 отключить хвост (Tail)
   
    local bit = 24 
   
   
    --========================================================================
    --========================================================================
   
   
   
    -------------------------------------------------------
    local function no_undo()reaper.defer(function()end)end;
    -------------------------------------------------------
   
   
   
    -------------------------------------------------------------------------------------------   
    if not reaper.JS_Window_Find then;
        reaper.MB("Extension not installed - reaper_js_ReaScriptAPI!","Render Error",0);
        no_undo() return;
    end;
   
    local CountSelTrack = reaper.CountSelectedTracks(0);
    if CountSelTrack == 0 then reaper.MB("No Track Selected!","Render Error",0)no_undo() return end;
   
   
    local title = "Render stem-1xoffline Render(Idle)-ExtremeHQ-Wave 64 bit-pre fader-pre pan-post fx"
    -------------------------------------------------------------------------------------------
   
   
    ----------------------------------------
    -- encoding
    local b='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    function enc(data);
        return ((data:gsub('.', function(x)
            local r,b='',x:byte()
            for i=8,1,-1 do r=r..(b%2^i-b%2^(i-1)>0 and '1' or '0') end
            return r;
        end)..'0000'):gsub('%d%d%d?%d?%d?%d?', function(x)
            if (#x < 6) then return '' end
            local c=0
            for i=1,6 do c=c+(x:sub(i,i)=='1' and 2^(6-i) or 0) end
            return b:sub(c+1,c+1)
        end)..({ '', '==', '=' })[#data%3+1])
    end;
    ----------------------------------------
   
   
    -------------------------------------------------------------------------------------------
    -- / Save render / ------------------------------------------------------------------------
    local S = {};
    S.RENDER_SETTINGS   = reaper.GetSetProjectInfo  (0,"RENDER_SETTINGS"  ,0,0);--Sourse      --3
    S.RENDER_BOUNDSFLAG = reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",0,0);--Bounds      -- 1-2
    S.RENDER_TAILFLAG   = reaper.GetSetProjectInfo  (0,"RENDER_TAILFLAG"  ,0,0);--Tail        -- 31
    S.RENDER_TAILMS     = reaper.GetSetProjectInfo  (0,"RENDER_TAILMS"    ,0,0);--Tail ms     -- ?
    S.RENDER_SRATE      = reaper.GetSetProjectInfo  (0,"RENDER_SRATE"     ,0,0);--Sample rate --0
    S.RENDER_CHANNELS   = reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS"  ,0,0);--channels    --2
    S.RENDER_SPEED      = reaper.SNM_GetIntConfigVar("projrenderlimit"      ,0);--speed       --4
    S.RENDER_RESAMPLE   = reaper.SNM_GetIntConfigVar("projrenderresample"   ,0);--resample    --9
    S._, S.RENDER_FORMAT = reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT",0,0)-- render_format
    S.RENDER_ADDTOPROJ   = reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"  ,0,0);-- 1=add rendered files to project
    S.SILENTLY_iNCREMENT = reaper.SNM_GetIntConfigVar("renderclosewhendone"  ,0);
    S._, S.RENDER_FILE = reaper.GetSetProjectInfo_String(0,"RENDER_PATTERN","",false);
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
   
   
   
    -------------------------------------------------------------------------------------------
    -- / Подготовить рендер / -----------------------------------------------------------------
   
    ---
    local retval, NameFile = reaper.GetUserInputs("Name File",1,"Name File,extrawidth=150","-Stem-");
    if not retval then no_undo() return end;
    reaper.GetSetProjectInfo_String(0,"RENDER_PATTERN",NameFile,true);
    ---
   
    local Sourse = (((S.RENDER_SETTINGS&4)+(S.RENDER_SETTINGS&16))+3);
    reaper.GetSetProjectInfo(0,"RENDER_SETTINGS" ,Sourse,1);--Sourse
   
    local startLoop, endLoop = reaper.GetSet_LoopTimeRange(0,0,0,0,0);---
    if startLoop == endLoop then;                                     ----
        reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",1,1);        -----Bounds
    else;                                                             ----
        reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG",2,1);        ---
    end;                                            --------------------
   
    if TailOnOff == 0 then;
        reaper.GetSetProjectInfo(0,"RENDER_TAILFLAG",(S.RENDER_TAILFLAG&~4),1);
    elseif TailOnOff == 1 then;
        reaper.GetSetProjectInfo(0,"RENDER_TAILFLAG",(S.RENDER_TAILFLAG |4),1);
        reaper.GetSetProjectInfo(0,"RENDER_TAILMS",tonumber(TailTime)or 1000,1);
    end;
   
    reaper.GetSetProjectInfo(0,"RENDER_SRATE",0,1);--Sample rate --0 default
    reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS",2,1);--channels    -- 2 stereo
   
   
    local render_format = enc(string.char(101,118,97,119,bit,0,0));
   
    reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT",render_format,1)--render_format--wav 64
   
    reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"   ,1 ,1);--add rendered files to project   
   
    ---
    reaper.SNM_SetIntConfigVar("projrenderlimit",4);--speed--4-1x Offline Render (idle)
    reaper.SNM_SetIntConfigVar("projrenderresample",9);--resample--Extreme HQ (768pt HQ Sinc)
    reaper.SNM_SetIntConfigVar("renderclosewhendone",17);--Silently increment
       
   
    local Localize = reaper.JS_Localize("Render to File","common");
    local Window_Find = reaper.JS_Window_Find(Localize,true);
    if Window_Find then;
        reaper.JS_Window_Destroy(Window_Find);
        reaper.Main_OnCommand(40015,0);--Render project to disk...
    end;
    ---
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
   
   
   
    -------------------------------------------------------------------------------------------
    -- / Подготовить треки и рендер / ---------------------------------------------------------
   
    reaper.PreventUIRefresh(1);
    reaper.Undo_BeginBlock();
   
    ----
    local SV = {};
    CountTrackXX = reaper.CountTracks(0);
    local CountSelTrack = reaper.CountSelectedTracks(0);
    for i = 1,CountSelTrack do;
        SV[i] = {};
        SV[i].SelTr = reaper.GetSelectedTrack(0,i-1);
        SV[i].VolTr = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL");
        SV[i].PanTr = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN");
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL",1);
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN",0);
    end;
    ----
   
    reaper.SelectAllMediaItems(0,0);
   
    reaper.Main_OnCommand(42230,0);--проект рендер,самые последние настройки
   
    reaper.Main_OnCommand(40297,0); -- Track: Unselect all tracks
   
    ----
    local ST = {};
    for i = #SV,1,-1 do;
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_VOL",SV[i].VolTr);
        reaper.SetMediaTrackInfo_Value(SV[i].SelTr,"D_PAN",SV[i].PanTr);
        ----
        if (reaper.CountTracks(0) - CountTrackXX) == #SV then;
       
            local numb = reaper.GetMediaTrackInfo_Value(SV[i].SelTr,"IP_TRACKNUMBER");
            local CountTracks = reaper.CountTracks(0);
            local lastTr = reaper.GetTrack(0,CountTracks-1);
            reaper.SetOnlyTrackSelected(lastTr);
            reaper.ReorderSelectedTracks(numb,0);
            table.insert(ST,lastTr);
        end;
    end;
   
    for i = 1,#ST do;
        if i == 1 then;
            reaper.SetOnlyTrackSelected(ST[i]);
        else;
            reaper.SetMediaTrackInfo_Value(ST[i],"I_SELECTED",1);
        end; 
    end;
   
   
    reaper.Undo_EndBlock(title,-1);
    reaper.PreventUIRefresh(-1);
    ----
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
   
   
   
    -------------------------------------------------------------------------------------------
    -- / Restore render / ---------------------------------------------------------------------
    reaper.GetSetProjectInfo  (0,"RENDER_SETTINGS"   ,S.RENDER_SETTINGS  ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_BOUNDSFLAG" ,S.RENDER_BOUNDSFLAG,1);
    reaper.GetSetProjectInfo  (0,"RENDER_TAILFLAG"   ,S.RENDER_TAILFLAG  ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_TAILMS"     ,S.RENDER_TAILMS    ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_SRATE"      ,S.RENDER_SRATE     ,1);
    reaper.GetSetProjectInfo  (0,"RENDER_CHANNELS"   ,S.RENDER_CHANNELS  ,1);
    reaper.GetSetProjectInfo_String(0,"RENDER_FORMAT",S.RENDER_FORMAT    ,1);
    reaper.GetSetProjectInfo (0,"RENDER_ADDTOPROJ"   ,S.RENDER_ADDTOPROJ ,1);
    reaper.GetSetProjectInfo_String(0,"RENDER_PATTERN"  ,S.RENDER_FILE,true)
    reaper.SNM_SetIntConfigVar("projrenderlimit"     ,S.RENDER_SPEED       );
    reaper.SNM_SetIntConfigVar("projrenderresample"  ,S.RENDER_RESAMPLE    );
    reaper.SNM_SetIntConfigVar("renderclosewhendone" ,S.SILENTLY_iNCREMENT );
    -------------------------------------------------------------------------------------------
    -------------------------------------------------------------------------------------------
   
    local Localize = reaper.JS_Localize("Render to File","common");
    local Window_Find = reaper.JS_Window_Find(Localize,true);
    if Window_Find then;
        reaper.JS_Window_Destroy(Window_Find);
        reaper.Main_OnCommand(40015,0);--Render project to disk...
    end;
 
Друзья, а есть вариант скрипта "mpl_Toggle bypass all project FX with latency (PDC) higher than 64 samples.lua", который бы не bypass делал, а OFFLINE всем плагинам с большой задержкой?
ну и время в семплах можно было задавать самому?
спс
 
@Дима Горелик, Archie_Render; Render stems Template(`).lua
Шаблон Рендера треков с настройками на все случаи жизни))
Кому зашел данный скрипт, не стесняйтесь нажимать кнопочку Donate: Спасибо!
--------------------
который бы не bypass делал, а OFFLINE всем плагинам с большой задержкой?
ну и время в семплах можно было задавать самому?
Archie_FX; Offline all Fx in project with delay (PDC) over 256 samples(`).lua
 
Цикл экшен сделай из этих экшенов через -step-

Посмотреть вложение 171932

И в левой часте окна цикл экшена поставь точку во вкладке тогл.

Посмотреть вложение 171933
Именно такой экшн у меня и есть, но это не тогл, он не отслеживает состояние режимов и начинает работать инвертированно, т.е. неправильно в следующих ситуациях: 1. Если изменить режим не с помощью экшна, а вручную в меню 2.Открыть старый проект где при сохранении активным был выбран не первый пункт 3.Открыть чужой проект где при сохранении активным был выбран не первый пункт
 

Сейчас просматривают