Archie-reascript: обсуждение, пожелания, сообщения об ошибках.

@Archchie, а что бы тебе такой скрипт (по микшеру) в репозиторий не закинуть? Классная вещь и удобная...

п. с. а с карточки сбербанка донаты без налогов прилетают?
 
Последнее редактирование:
@Archchie Задумался над одной вещью и не знаю как все таки правильно реализовать.Если вкратце, то нужно с запуском скрипта,который я приложил ниже,активировался определенный - track layouts(одновременно и в TCP и в MCP .В списке экшенов нашел твои скрипты в которых уже заложен определенный стиль(и отлично работает с дефолтной темой)
167516
Так вот, мне надо в своей теме, что то подобное впихнуть в скрипт, нужные мне лайоуты в моей теме -
167519
167520
я назначил на 13,16 слоты
167517
Как же мне сделать так,чтоб при нажатии на скрипт,активировались сразу два указанных лайоута на созданном треке(Return)?Но с учетом того,если я захочу сменить тему,то смог бы с легкостью,выбрать другие необходимые лайоуты.Главный виновник здесь
Код:
reaper.Undo_BeginBlock() reaper.PreventUIRefresh(1)

function addtoselection()
local function nothing() end; local function noaction() reaper.defer(nothing) end
local retval, notes = reaper.GetProjExtState( 0, 'MyDaw', 'Return')
local data = notes:match'||addreturns\r\n(.-\r\n)end||'
if not data then noaction() return end
local sel_tracks_str = data:match('return_note'..'%d'..' (.-)\r\n')
if not sel_tracks_str then noaction()() return end

local t = {}

for guid in sel_tracks_str:gmatch'{.-}' do
  local tr = reaper.BR_GetMediaTrackByGUID(0, guid)
  if tr then t[#t+1] = tr end
end

if #t == 0 then noaction() return end

local first = reaper.GetTrack(0, 0)


for i = 1, #t do reaper.SetTrackSelected(t[i],1) end


end



function addreturnstonotes()

local return_note = 0

local function esc_lite(str) str = str:gsub('%-', '%%-') return str end

local function nothing() end; local function noaction() reaper.defer(nothing) end


local tracks = reaper.CountSelectedTracks()
if tracks == 0 then noaction() return end

local return_str = ''

for i = 0, tracks-1 do


return_str = return_str..reaper.GetTrackGUID(reaper.GetTrack(0, i)) end


local retval, notes = reaper.GetProjExtState( 0, 'MyDaw', 'Return')

local a = '||addreturns\r\n'

local data = notes:match(a..'(.-\r\n)end||')

if data then

local new_data
local return_note_data = data:match('return_note'..'%d'..' (.-)\r\n')


if return_note_data then
    new_data = data:gsub('return_note'..'%d'..' '..esc_lite(return_note_data),'return_note'..return_note..' '..return_str,1)
else new_data = data..'return_note'..return_note..' '..return_str..'\r\n' end

notes = notes:gsub(esc_lite(data),new_data)



elseif notes=='' then notes = notes..a..'return_note'..return_note..' '..return_str..'\r\nend||\r\n'


else notes = notes..'\r\n'..a..'return_note'..return_note..' '..return_str..'\r\nend||\r\n' end

reaper.SetProjExtState( 0, 'MyDaw', 'Return', notes )
reaper.TrackList_AdjustWindows(0)

end


reaper.InsertTrackAtIndex(0, true)
local bus = reaper.GetTrack(0, 0)


reaper.GetSetMediaTrackInfo_String( bus, "P_TCP_LAYOUT", "Return", true )
reaper.GetSetMediaTrackInfo_String(bus, "P_NAME", "Return", true)

reaper.Main_OnCommand(40297, 0) ----unselect all tracks

reaper.SetTrackSelected(bus,1)
reaper.Main_OnCommand(reaper.NamedCommandLookup('_SWS_BLACKTRACK'), 0)



addtoselection()
addreturnstonotes()






   
  function sendtrackstoreturns()
 
reaper.Main_OnCommand(40296, 0) ----select all tracks
 
   function addtoselection()
   local function nothing() end; local function noaction() reaper.defer(nothing) end
   local retval, notes = reaper.GetProjExtState( 0, 'MyDaw', 'Return')
   local data = notes:match'||addreturns\r\n(.-\r\n)end||'
   if not data then noaction() return end
   local sel_tracks_str = data:match('return_note'..'%d'..' (.-)\r\n')
   if not sel_tracks_str then noaction()() return end
 
   local t = {}
 
   for guid in sel_tracks_str:gmatch'{.-}' do
     local tr = reaper.BR_GetMediaTrackByGUID(0, guid)
     if tr then t[#t+1] = tr end
   end
 
   if #t == 0 then noaction() return end
 
   local first = reaper.GetTrack(0, 0)
 
 
   for i = 1, #t do reaper.SetTrackSelected(t[i],0) end
 
 
   end
 
 


     
addtoselection()





reaper.Main_OnCommand(reaper.NamedCommandLookup('_SWS_SAVESEL'), 0) ---savetrack seslect






     
   
     
   
     
local defsendflag = ({reaper.BR_Win32_GetPrivateProfileString( 'REAPER', 'defsendflag', '0',  reaper.get_ini_file() )})[2]    
     
     
     
     
         
         
         
           local function nothing() end; local function noaction() reaper.defer(nothing) end
           local retval, notes = reaper.GetProjExtState( 0, 'MyDaw', 'Return')
           local data = notes:match'||addreturns\r\n(.-\r\n)end||'
           if not data then noaction() return end
           local sel_tracks_str = data:match('return_note'..'%d'..' (.-)\r\n')
           if not sel_tracks_str then noaction()() return end
         
           local t = {}
         
           for guid in sel_tracks_str:gmatch'{.-}' do
             local new_dest_tr = reaper.BR_GetMediaTrackByGUID(0, guid)
             if new_dest_tr then t[#t+1] = new_dest_tr end
           
           
reaper.Main_OnCommand(reaper.NamedCommandLookup('_SWS_RESTORESEL'), 0) ---restore savetrack seslect            
           
           
     
     
     
     
     
     
     local selected = {}
   
     local function wasSelected(match)
       for i,new_dest_tr in ipairs(selected) do
         if new_dest_tr == match then
           return true
         end
       end
     return false
     end
   
     local function highlight(new_dest_tr, select)
       local send_receive = -1
   
       for i=0, reaper.GetTrackNumSends(new_dest_tr, send_receive)-1 do
         local target = reaper.BR_GetMediaTrackSendInfo_Track( new_dest_tr, send_receive, i, 0)
   
         reaper.SetTrackSelected(target, 0)
   
   
   
         if select then
           highlight(target, select)
         end
       end
     end
   
     local function main()
       for i,new_dest_tr in ipairs(selected) do
         local valid = reaper.ValidatePtr(new_dest_tr, 'MediaTrack*')
         local isSelected = valid and reaper.IsTrackSelected(new_dest_tr)
   
   
   
   
   
   
         if not isSelected then
           table.remove(selected, i)
   
      if valid then
             highlight(new_dest_tr, false)
           end
   
   
         end
     
     
     
       end
   
       
   
         if not wasSelected(new_dest_tr) then
           selected[#selected + 1] = new_dest_tr
         end
       
       
        highlight(new_dest_tr, true)
   
   
   
     
     end
   
     main()
     
     
     
     
     
     
         
           
           
           
           
           
   
  for i = 1, reaper.CountSelectedTracks(0) do
     local tr = reaper.GetSelectedTrack(0,i-1)
       if tr then
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
           
             new_send_id = reaper.CreateTrackSend( tr, new_dest_tr )
                       if new_send_id >= 0 then
           
                         if new_dest_tr then
                       
                       
                           reaper.SetTrackSendInfo_Value( tr, 0, new_send_id, 'D_VOL', 0)
                           reaper.SetTrackSendInfo_Value( tr, 0, new_send_id, 'I_SENDMODE', defsendflag)
                         end
                       end
           
           
            end
         
           if #t == 0 then noaction() return end
         
           
         
         
         
         
         end
       end
       reaper.TrackList_AdjustWindows( false )

 
end  ----- function sendtrackstoreturns() end





sendtrackstoreturns()


reaper.PreventUIRefresh(-1) reaper.Undo_EndBlock('Insert Return', -1)
 
Последнее редактирование:
@Archchie, а что бы тебе такой скрипт (по микшеру) в репозиторий не закинуть? Классная вещь и удобная...
Потому что он не стабилен, поэтому и не добавляю его, не нестабилен, а сделан под тебя - по принципу твоего кастома.
В нем при втором нажатии (при закрытии микшера) всегда мастер прыгает в док, не важно где бы он не был до этого.
Вот представь что у человека был мастер открыт в отдельном окне - он запустил скрипт, все нормально микшер открылся, запускает второй раз и опа - мастер запрыгнул в какой то док. Разве это адекватное поведение для скрипта, когда не знаешь почему и как и что вообще произошло, я считаю что это вообще неадекватное поведение, поэтому и не добавлял в реапак.

Добавил: Archie_View; Show full mixer - Restore view back.lua Используйте его.
Восстанавливает вид если даже микшер закрыть через крестик.

а с карточки сбербанка донаты без налогов прилетают?
Там комиссия 1% по моему. Над кнопкой отправить будет написано, какой процент и какая сумма.



Как же мне сделать так,чтоб при нажатии на скрипт,активировались сразу два указанных лайоута на созданном треке(Return)?
Сделай кастом, в чем проблема не пойму.
Код:
Твой скрипт
Layout: Apply custom layout #n
Layout: Apply custom layout #n

В списке экшенов нашел твои скрипты в которых уже заложен определенный стиль(и отлично работает с дефолтной темой)
Эти скрипты были только для дефолтной 5-й темы и больше они нигде не работали.
Эти скрипты были удаленны уже давным давно, не пойму что они у тебя делают.
Ты реапак не обновляешь что ли или при обновлении не удаляешь удаленные скрипты?
 
Последнее редактирование:
@Archchie, да, пришло.
Только опять мастер трек слева.
Добавить в конец скрипта то, что вы советовали или в этом случае это решается по-другому?
 
Я с этим скриптом ничего не советовал добавлять!!!
Есть такое понятие контекст...
А в начале скрипта прочитать сил не хватило, прежде чем что то добавлять???
О как, век живи...
Я то думал там тока техинфа.
Спасибо за ликбез.
 
Сделай кастом, в чем проблема не пойму
Сделал,и хотел написать еще,что не работает такое с кастомом.
Эти скрипты были удаленны уже давным давно, не пойму что они у тебя делают.
Ты реапак не обновляешь что ли или при обновлении не удаляешь удаленные скрипты?
Всегда обновляю,без понятия почему они у меня в списках,только сегодня на них наткнулся)
 
Это от каковата другова скрипта, от этого не может быть этой надписи "reascript". Да и это не страшно, это просто несуществующая точка отмены, это просто простая надпись и не более.
Второй скрин не успел процитировать, ты его удалил, тот скрипт который был на втором скрине не трогай вообще, это системный скрипт.

Прошу прощенья - Мой косяк.))

Сделал,и хотел написать еще,что не работает такое с кастомом.
В каком это смысле не работает, а почему у меня тогда работает???

Всегда обновляю,без понятия почему они у меня в списках,только сегодня на них наткнулся)
Просто когда обновляешь, не надо постоянно на ок жать, а надо хотя бы попытаться почитать что там написано!!!
 
  • Like
Реакции: YuriOl
В каком это смысле не работает, а почему у меня тогда работает???
Если использовать этот кастом когда выделен какой нибудь трек,то создастся трек ретурн(с дефолтным лайоутом) а тот трек который был выделен,станет(с моим лайоутом)а если ничего не выделено,то будут создаваться треки "ретурн" (с лайоутом по дефолту).А мне нужно чтоб,ретурн был(с заданным лайоутом).
 
@Krikets, А если так?
Код:
  твой скрипт
  SWS: Toggle (invert) track selection
  Layout: Apply custom layout #n
  Layout: Apply custom layout #n
  SWS: Toggle (invert) track selection
 
@Krikets, А если так?
Код:
  твой скрипт
  SWS: Toggle (invert) track selection
  Layout: Apply custom layout #n
  Layout: Apply custom layout #n
  SWS: Toggle (invert) track selection
Так Почти)Когда есть один трек,то ретурн становиться с моим лайоутом(все как надо),а последующее добавления(ретурна) все треки меняет на заданный лайоут)
 
Так Почти)Когда есть один трек,то ретурн становиться с моим лайоутом(все как надо),а последующее добавления(ретурна) все треки меняет на заданный лайоут)
Я вообще не понимаю что твой скрипт делает: При первом добавлении трека он выделяет все треки, при последующих не виделяет.
Где ты вообще взял этот безобразный код, я даже разбираться в нем не буду, ну уж очень безобразно он написан.
 
Это работает,по подобию Ableton Live,создаешь Return, кидаешь эффект и наваливаешь его без всяких посылов,на любом треке(так как он роутиться на каждый из них).Я просто хотел узнать возможно ли такое с лайоутами,потому что мне приходиться каждый раз, менять их для удобства в tcp и mcp.(На счет кода согласен...)В любом случае спасибо.
 

Вложения

  • Biaxaw7YSs.png
    Biaxaw7YSs.png
    74 KB · Просмотры: 407
@Krikets,
С выделением треков так и задумано или это твой чудо скрипт просто так работает???

Я правильно понимаю работу твоего скрипта
Он создает трек с именем "Return" и принимает посылы со всех треков - кроме треков с именем "Return"?

Я просто хотел узнать возможно ли такое с лайоутами
Возможно, нужно только разобраться с выделением треков
 
С выделением треков так и задумано или это чудо скрипт так работает???
У меня вроде все норм, с выделением.Да так и работает,но мне кажется было бы еще логичней предоставлять ввод имени при каждом добавлении.И есть еще такая штука,когда добавил новый трек(например с аудио "Х")то посылов на нем не увидишь,пока не добавишь еще один ретурн(тогда они на треке с аудио "Х" появляются(новый и те которые были добавлены ранее)Я сам недавно начал пользоваться этим скриптом(вникаю во все),это его создатель вроде
incubator

( вначале своего пути к Риперу делал,сейчас у него запредельные проекты).
 
@Krikets, мне не важно каким способом автор делал этот скрипт.
Ты мне скажи что тебе нужно, про пасылы все понятно, а насчёт выделения треков непонятно,т.к. этот скрипт при первом добавлении выделяет все треки кроме return, при втором добавлении не выделяет никакие треки, а если переместить return, то вообще не понятно что выделяет.
Напиши вкратце как ты видишь правильную работу этого скрипта, завтра посмотрб
1. создать трек
2. Осуществить пасылы
3. Какие треки выделить, все которые ретурн, один созданный ретурн или наоборот которые не ретурн или вообще не какие не выделять?
4.красить трек или нет?
Или , Или...
 
Последнее редактирование:
@Archchie, Все порешали с автором скрипта.Там оказывается,в коде есть строки в которых можно прописать какой layouts,будет активироватся,впринципе что и нужно было.Он обещал через месяц, другой до вести скрипт до ума.Так что возможно исправит все недочеты,с выделениями и т.п.Вопрос закрыт спасибо.
 
@Archchie, прилетело?
Прилетело! Спасибо!

Все порешали с автором скрипта.Там оказывается,в коде есть строки в которых можно прописать какой layouts,будет активироватся,впринципе что и нужно было.Он обещал через месяц, другой до вести скрипт до ума.Так что возможно исправит все недочеты,с выделениями и т.п.Вопрос закрыт спасибо.
Все понятно.
Держи тогда, выделений никаких нет, т.к. на вопрос ты мне так и не ответил.
 
Последнее редактирование:
Держи тогда, выделений никаких нет
Надо же код в 2 раза меньше ,а работает вроде бы так же)+ наглядней,спасибо!.Только если вопрос ребром,может для удобства все таки лучше, если будет выделятся,вновь созданный ретурн(и только он)?И еще,когда у него создавался ретурн трек ,то уровень посыла на нем и на треках был в ноль,это важно.
 
@Krikets,
PHP:
    local TCP_LAYOUT = "ba - Small" -- Название лейаута TCP
    local MCP_LAYOUT = ""          -- Название лейаута MCP
    local R,G,B = 0,0,0           -- Цвет трека в rgb (по умолчанию R,G,B = -1,-1,-1)
    local NAME_TRACK = "Return"  -- Имя трека
    local SEND_VOLUME_DB = -150 -- Уровень посыла в db 
    local SEND_MODE = 0        -- 0 Post-Fader(Post-Pan) / 1 Pre-Fx / 3 Pre-Fader(Post-Fx)
    
    
    
    
    -------------------------------------------------------
    local function no_undo()reaper.defer(function()end)end;
    -------------------------------------------------------
    
    
    if reaper.CountTracks(0)==0 then no_undo() return end;
    reaper.Undo_BeginBlock();
    reaper.InsertTrackAtIndex(0,false);
    local TrackFirst = reaper.GetTrack(0,0);
    reaper.SetOnlyTrackSelected(TrackFirst);
    local GUID = reaper.GetTrackGUID(TrackFirst);
    reaper.SetProjExtState(0,"IS_RETURN_TRACK",GUID,"true");
    reaper.GetSetMediaTrackInfo_String(TrackFirst,"P_TCP_LAYOUT",TCP_LAYOUT,1);
    reaper.GetSetMediaTrackInfo_String(TrackFirst,"P_MCP_LAYOUT",MCP_LAYOUT,1);
    reaper.GetSetMediaTrackInfo_String(TrackFirst,"P_NAME",NAME_TRACK,1);
    if R < 0 or G < 0 or B < 0 or R > 255 or G > 255 or B > 255 then;
        reaper.SetMediaTrackInfo_Value(TrackFirst,"I_CUSTOMCOLOR",0);
    else;
        reaper.SetMediaTrackInfo_Value(TrackFirst,"I_CUSTOMCOLOR",reaper.ColorToNative(R,G,B)|0x1000000);
    end;
    
    for i = 1, reaper.CountTracks(0) do
        local Track = reaper.GetTrack(0,i-1);
        local GUID = reaper.GetTrackGUID(Track);
        local retval, val = reaper.GetProjExtState(0,"IS_RETURN_TRACK",GUID);
        if retval == 0 and val ~= "true" then;
            local sendidx = reaper.CreateTrackSend(Track,TrackFirst);
            if SEND_VOLUME_DB < -150 then SEND_VOLUME_DB = -150 end;
            if SEND_VOLUME_DB > 12 then SEND_VOLUME_DB = 12 end;
            reaper.SetTrackSendInfo_Value(Track,0,sendidx,"D_VOL",10^(SEND_VOLUME_DB/20));
            if SEND_MODE~=0 and SEND_MODE~=1 and SEND_MODE~=3 then SEND_MODE=0 end;
            reaper.SetTrackSendInfo_Value(Track,0,sendidx,"I_SENDMODE",SEND_MODE);   
        end;   
    end;
    
    local i;while true do;
        i = (i or 0)+1;
        local ret,key,_ = reaper.EnumProjExtState(0,"IS_RETURN_TRACK",i-1);
        if not ret then break end;
        local tr = reaper.BR_GetMediaTrackByGUID(0,key);
        if not tr then;reaper.SetProjExtState(0,"IS_RETURN_TRACK",key,""); end;
    end;
    reaper.Undo_EndBlock("--T--",-1);
 
@Archchie,Да, то что надо.Но!Опять же ,то о чем я упоминал в начале беседы.Хоть он конечно и намудрил,но с точки зрения работы скрипта вроде все правильно.Смотри, у нас имеется N-кол-во треков, при активации скрипта,создается посыл с Ретурна, на все уже имеющиеся эти треки.Но если я беру с медиа браузера и кидаю новый сэмпл на новый трек,на нем роутинга нет.И... если я активирую ЕГО скрипт еще раз(создав новый ретурн),то у меня на этот новый трек(с новым семплом)идут посылы со всех Ретурнов(которые создал ранее).Но если я активирую ТВОЙ скрипт,то на треке (с новым семплом) появляется лишь только последний добавленный Ретурн.Я не зря это написал в начале,и как бы это правильно,но других вариаций я не могу придумать,как бы сделать логичней.Если ты это приймешь во внимание,то тогда работа скрипта будет аналогичной и можно трубить в фанфары
p.s Вообще если брать в учет то как это делается в Аблетон,то при создании нового трека, эти все ретурны,автоматом цепляются на вновь создаваемые треки,здесь же приходиться ,добавить еще один раз новый (ретурн)чтоб они все подхватились.Его задумка немного отличается(ты ведь читал в личке),но то как я это использую,тоже вполне применимо.
 
Последнее редактирование:
создается посыл с Ретурна
С Ретурна никуда посыл не создается)).

Но если я активирую ТВОЙ скрипт,то на треке (с новым семплом) появляется лишь только последний добавленный Ретурн.
Я спрашивал про это но внятного ответа так и не дождался.

p.s Вообще если брать в учет то как это делается в Аблетон,то при создании нового трека, эти все ретурны,автоматом цепляются на вновь создаваемые треки,
Почему вы все пытаетесь сделать из рипера - то аблетон, то кубейс, то ......, мне кажется что тогда надо в аблетоне и работать и не мучить себя с этим рипером, в котором все не как в аблетоне!!!
---------
@Krikets, Тести / проверяй / так ты хотел ? / С тебя на пиво!!!
Arc_Track; Insert track receive from all tracks.lua
 
  • Like
Реакции: Krikets и smrz1
@Archchie, Ну елы палы.. последний добавленный трек,не в ноль посыл)Тут коньяк походу надо)))))
 
Последнее редактирование:
@Archchie, Я работаю в обеих программах,так уж сложилось.При том что это абсолютно разные вещи,для нужных дел.Я думал ты в курсе)Окно сессии (Аблетон),не повторил ни один адский код рипера увы.
 
Последнее редактирование:
Разобрался вроде.Тот пункт где (Настройки не рекомендуется менять)оказался моим ответом,вчера не придал ему значения).С меня светлое ;)
 

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