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

Так что вариант только с шифтом, но он не работает увы

111_2.gif
Sws обновлен, версия 2.12 ?
 
sws 2,10. Бета версию побаиваюсь ставить
Не надо, я проверил в 2.10 тоже работает.
Нет. Локинг только лево право верх низ юзаю.
Неправильно я вопрос поставил и скрин неправильно сделал.
В Lock Settings айтемы должны быть разблокированы, это глобальная блокировка и она блокирует все, а не какой то конкретный айтем и к ней нет доступа.
Скрипт работает только с айтемом, т.е. отдельно айтем заблокируй
111_2.gif
и скрипт будет с ним работать.
 
Последнее редактирование:
  • Like
Реакции: Erundolog
@Archchie, подскажи пожалуйста, возможно сделать такую фишку как в кубэндах, захват края айтема выходящиее за край поля аранжировки?
Очень удобная фишка.Capture an item edge.gif
 
@YuriOl, Не знаю, можно попробовать. Я на гиф не понимаю что происходит в кубе, скролл в аранже или trim у айтема. Сделай наглядную гиф с большим айтемом, где например начало айтема на втором такте, а начало аранжа на 5-ом и более такте и потяни. И что произойдет скролл или трим?
 
@Archchie, это удобство заключается в том, что когда проект хорошо зумирован по горизонтали и чтобы не делать лишних телодвижений при выборе нужного фрагмента айтема типа разрезал с левой стороны, потом выделил левую ненужную часть, потом удалил. И так ' с правой стороной, или скроллить в начало или конец чтобы подтянуть край к нужной позиции.. Так вот в кубендах это всё делается стандартно, типа растягиванием края, тем самым увеличивая или уменьшая айтем по краям ( по умолчанию в кубендах это нижний левый или правый угол). Так вот когда край айтема находится за границами видимого поля аранжировки, то можно все равно ухватиться и подтянуть край с обоих сторон.
Я понимаю, что можно это сделать типа - Trim items to selected area.., но на практике с большим количеством айтемов в проекте эта кубендовская фишка очень удобна.
Я почему и спрашиваю, возможно такое или это на уровне ядра программы надо что-то добавлять? Хотел на оф. форуме эту просьбу запостить, но не владею настолько английским, тут блин на нашем родном еле удаётся объяснить))) Reaper.gif
 
@YuriOl, Тесть, Оно!?
Это не совсем как в кубе, т.е. скрипт не подцепляет айтем для изменения размера, а делает скролл или урезает айтем при клике.
Т.е. Как работает скрипт:
Скрипт тоггле , вкл/выкл.
Наводишь Мышь так же на край, появится рука, кликаешь по этому краю и скрипт либо урежет айтем либо проскролит к его краю, в зависимости от скрипта ( по первой гифки было не понятно, подумалось, что скролится там, пока ждал вторую понятную гиф, пытался что то сделать, но со скроллом, во второй гиф четко видно, что происходит подрезка, поэтому пришлось сделать две версии.).
Trim.gif

PHP:
    local PixelsToCapture = 5 -- Пикселей скраю для захвата (5)
    local offset = 2 -- pixel отступ (2)
    local ScrollBar = 19 -- pixel Полоса прокрутки справа (19)
    
    
    --======================================================================================
    --////////////// SCRIPT \\\\\\\\\\\\\\  SCRIPT  //////////////  SCRIPT  \\\\\\\\\\\\\\\\
    --======================================================================================
    
    
    
    --==== FUNCTION MODULE FUNCTION ======================= FUNCTION MODULE FUNCTION ============== FUNCTION MODULE FUNCTION ==================
    local P,F,L,A=reaper.GetResourcePath()..'/Scripts/Archie-ReaScripts/Functions','/Arc_Function_lua.lua';L,A=pcall(dofile,P..F);if not L then
    reaper.RecursiveCreateDirectory(P,0);reaper.MB('Missing file / Отсутствует файл!\n\n'..P..F,"Error - "..debug.getinfo(1,'S').source:match--
    ('.*[/\\](.+)'),0);return;end; if not A.VersionArc_Function_lua("2.8.0",P,"")then A.no_undo() return end;local Arc=A;--====================
    --==== FUNCTION MODULE FUNCTION =================================▲=▲=▲========================= FUNCTION MODULE FUNCTION ==================
    
    
    Arc.HelpWindowWhenReRunning(1,'',false,'');
    
    --- / Счетчик для пропуска / ---
    local function Counter();
        local t={};return function(x,b)b=b or 1 t[b]=(t[b]or 0)+1 if t[b]>(x or math.huge)then t[b]=0 end return t[b]end;  
    end;Counter = Counter(); -- Counter(x,buf); x=reset
    
    local itemX,_;
    
    local function loop();
        if Counter(2,1) == 0 then;
            ------------------
            local MouseState = reaper.JS_Mouse_GetState(127);
            local ScrollBarL = ScrollBar/reaper.GetHZoomLevel();
            local offsetL = offset/reaper.GetHZoomLevel();
            local edge = PixelsToCapture/reaper.GetHZoomLevel();--Пиксели в секунды
            local start_time,end_time = reaper.GetSet_ArrangeView2(0,0,0,0);
            local PosMCur = reaper.BR_PositionAtMouseCursor(false);
            local ms_x,ms_y = reaper.GetMousePosition();
            ----
            if MouseState == 0 then;
                itemX,_ = reaper.GetItemFromPoint(ms_x,ms_y,false);
                if itemX then;
                    local pos = reaper.GetMediaItemInfo_Value(itemX,'D_POSITION');
                    local len = reaper.GetMediaItemInfo_Value(itemX,'D_LENGTH');
                    local endPos = pos+len;
                    ----
                    if PosMCur <= start_time+edge and pos < start_time then;
                        reaper.JS_Mouse_SetCursor(reaper.JS_Mouse_LoadCursor(32649));
                    elseif PosMCur>=(end_time-ScrollBarL-edge)and endPos > end_time then;
                        reaper.JS_Mouse_SetCursor(reaper.JS_Mouse_LoadCursor(32649));
                    end;
                end;
            end;
            ----
            if MouseState == 1 then;
                local item,take = reaper.GetItemFromPoint(ms_x,ms_y,false);
                if item and item == itemX then;
                    local pos = reaper.GetMediaItemInfo_Value(item,'D_POSITION');
                    local len = reaper.GetMediaItemInfo_Value(item,'D_LENGTH');
                    local endPos = pos+len;
                    ----
                    if PosMCur <= start_time+edge then;
                        ----
                        if (pos < start_time) and (endPos > (start_time+edge)) then;
                            reaper.Undo_BeginBlock();
                            local posNew = start_time + offsetL;
                            Arc.SetMediaItemLeftTrim2(posNew,item);
                            reaper.Undo_EndBlock('Trim Left',-1);
                            itemX = nil;
                        end;
                        ----
                    elseif PosMCur>=(end_time-ScrollBarL-edge)then;
                        ----
                        reaper.Undo_BeginBlock();
                        local lenNew = (end_time - pos)-ScrollBarL-offsetL;
                        reaper.SetMediaItemLength(item,lenNew,true);
                        reaper.Undo_EndBlock('Trim Right',-1);
                        itemX = nil;
                        ----
                    end;
                    itemX = nil;
                end;
            end;
        end;
        ------------------
        reaper.defer(loop);
    end;
    
    
    reaper.defer(loop);
    Arc.GetSetToggleButtonOnOff(1,1);
    reaper.atexit(Arc.GetSetToggleButtonOnOff);
Scroll.gif

PHP:
    local PixelsToCapture = 5 -- Пикселей скраю для захвата (5)
    local offset = 2 -- pixel отступ (2)
    local ScrollBar = 19 -- pixel Полоса прокрутки справа (19)
    
    
    --======================================================================================
    --////////////// SCRIPT \\\\\\\\\\\\\\  SCRIPT  //////////////  SCRIPT  \\\\\\\\\\\\\\\\
    --======================================================================================
    
    
    
    --==== FUNCTION MODULE FUNCTION ======================= FUNCTION MODULE FUNCTION ============== FUNCTION MODULE FUNCTION ==================
    local P,F,L,A=reaper.GetResourcePath()..'/Scripts/Archie-ReaScripts/Functions','/Arc_Function_lua.lua';L,A=pcall(dofile,P..F);if not L then
    reaper.RecursiveCreateDirectory(P,0);reaper.MB('Missing file / Отсутствует файл!\n\n'..P..F,"Error - "..debug.getinfo(1,'S').source:match--
    ('.*[/\\](.+)'),0);return;end; if not A.VersionArc_Function_lua("2.8.0",P,"")then A.no_undo() return end;local Arc=A;--====================
    --==== FUNCTION MODULE FUNCTION =================================▲=▲=▲========================= FUNCTION MODULE FUNCTION ==================
    
    
    Arc.HelpWindowWhenReRunning(1,'',false,'');
    
    --- / Счетчик для пропуска / ---
    local function Counter();
        local t={};return function(x,b)b=b or 1 t[b]=(t[b]or 0)+1 if t[b]>(x or math.huge)then t[b]=0 end return t[b]end;  
    end;Counter = Counter(); -- Counter(x,buf); x=reset
    
    local itemX,_;
    
    local function loop();
        if Counter(2,1) == 0 then;
            ------------------
            local MouseState = reaper.JS_Mouse_GetState(127);
            local ScrollBarL = ScrollBar/reaper.GetHZoomLevel();
            local offsetL = offset/reaper.GetHZoomLevel();
            local edge = PixelsToCapture/reaper.GetHZoomLevel();--Пиксели в секунды
            local start_time,end_time = reaper.GetSet_ArrangeView2(0,0,0,0);
            local PosMCur = reaper.BR_PositionAtMouseCursor(false);
            ----- 
            local ms_x,ms_y = reaper.GetMousePosition();
            if MouseState == 0 then;
                itemX,_ = reaper.GetItemFromPoint(ms_x,ms_y,false);
                if itemX then;
                    local pos = reaper.GetMediaItemInfo_Value(itemX,'D_POSITION');
                    local len = reaper.GetMediaItemInfo_Value(itemX,'D_LENGTH');
                    local endPos = pos+len;
                    ----
                    if PosMCur <= start_time+edge and pos < start_time then;
                        reaper.JS_Mouse_SetCursor(reaper.JS_Mouse_LoadCursor(32649));
                    elseif PosMCur>=(end_time-ScrollBarL-edge)and endPos > end_time then;
                        reaper.JS_Mouse_SetCursor(reaper.JS_Mouse_LoadCursor(32649));
                    end;
                end;
            end;
            -----
            if MouseState == 1 then;
                local item,take = reaper.GetItemFromPoint(ms_x,ms_y,false);
                if item and item == itemX then;
                    local pos = reaper.GetMediaItemInfo_Value(item,'D_POSITION')
                    local len = reaper.GetMediaItemInfo_Value(item,'D_LENGTH')
                    local endPos = pos+len;
                    ---- 
                    if PosMCur <= start_time+edge then;
                        ----
                        if (pos < start_time) and (endPos > (start_time+edge)) then;
                            reaper.Undo_BeginBlock();
                            shift = (start_time-pos)+offsetL;
                            reaper.GetSet_ArrangeView2(0,1,0,0,start_time-shift,end_time-shift);
                            reaper.Undo_EndBlock('Scroll Left',-1);
                            itemX = nil;
                        end;
                        ----
                    elseif PosMCur>=(end_time-ScrollBarL-edge)then;
                        ----
                        if endPos > (end_time-ScrollBarL) and pos < (end_time-ScrollBarL-edge)then;
                            reaper.Undo_BeginBlock();
                            shift = (endPos-end_time)+ScrollBarL+offsetL;
                            reaper.GetSet_ArrangeView2(0,1,0,0,start_time+shift,end_time+shift);
                            reaper.Undo_EndBlock('Scroll Right',-1);
                            itemX = nil;
                        end;
                        ----
                    end;
                    itemX = nil;
                end;
            end;
        end;
        ------------------
        reaper.defer(loop);
    end;
    
    
    reaper.defer(loop);
    Arc.GetSetToggleButtonOnOff(1,1);
    reaper.atexit(Arc.GetSetToggleButtonOnOff);
Если я правильно понимаю, то Версия которая подрезает, отличается от кубовской только тем, что в кубе нужно сделать один клик, а здесь два.
Вот и как их обозвать ?))
 
  • Like
Реакции: YuriOl
@Archchie, @YuriOl, как то не вник я в эти скрипты. Точнее - в каких ситуациях их надо применять. Срипт Trim резать по краю (зачем именно по краю?), в Cubase я это не использовал... Видимо и там "не проникся":Dle13:.
Срипт Scroll показался интересным, но так как там курсор ставится в начале айтема, а потом уводится влево из зоны видимости - и без скрипта можно просто старт/стоп нажать.

Что я не догоняю? В какой ситуации его\их удобно использовать?:Dle65:. Поясните, неразумному???:Dle80::Dle90:
 
Если я правильно понимаю, то Версия которая подрезает, отличается от кубовской только тем, что в кубе нужно сделать один клик, а здесь два.
Вот и как их обозвать ?))
@Archchie, Спасибо! :) Обзови на своё усмотрение, у тебя все равно логичнее будет, так как я с ангильским не очень! :)

Что я не догоняю? В какой ситуации его\их удобно использовать?:Dle65:. Поясните, неразумному???
Если не надо, то как говорится и не заморачивайся! :)
Это годами набитая привычка при монтаже и озвучке видео в Nuendo.
 
Срипт Trim резать по краю (зачем именно по краю?), в Cubase я это не использовал... Видимо и там "не проникся"
Тут смысл не в Trim, а в том, что бы при большом зуме захватить айтем за край и начать тянуть его.
333.gif
111.gif
Срипт Scroll показался интересным, но так как там курсор ставится в начале айтема, а потом уводится влево из зоны видимости - и без скрипта можно просто старт/стоп нажать.
Скрипту по барабану где курсор, скролл всегда прокрутит к началу или концу айтема.
1112.gif
[automerge]1590155665[/automerge]
Обзови на своё усмотрение, у тебя все равно логичнее будет, так как я с ангильским не очень!
Даже примерно не знаю как((
 
  • Like
Реакции: YuriOl
Тут смысл не в Trim, а в том, что бы при большом зуме захватить айтем за край и начать тянуть его.
Посмотреть вложение 181590
Посмотреть вложение 181588

Скрипту по барабану где курсор, скролл всегда прокрутит к началу или концу айтема.
Посмотреть вложение 181589
[automerge]1590155665[/automerge]

Даже примерно не знаю как((
Типа Capture the Edge of an Item from outside the arrangement window :)
 
  • Like
Реакции: Archie's
@Archchie, сейчас испытал, единственное неудобство, - прыгает зум почему-то при клике на край. В кубе там тоже есть, но почти незаметный скачок, а тут получается вообще улетает в сторонуReaper.gif
 
а тут получается вообще улетает в сторону
Там два скрипта! ты видел? Я же даже гифки сделал.
Один скролит к началу и концу айтема, а второй режет, так вот, у тебя сейчас включен который скролит, выключи его и посмотри второй, который режет.
1112.gif
 
Последнее редактирование:
  • Like
Реакции: YuriOl
@Archchie, А....... Срипт Scroll теперь понял и это интересно! Просто в первой гифке про Scroll - ты курсор ставил в начало айтема, вот я и подумал так.
В этом случае - совсем другое дело. Получиться работать с ним если он будет запускаться с Рипером? Ну что бы как постоянная функция была, а не нажимать кнопку - будет он так работать?

@Archchie, Если не надо, то как говорится и не заморачивайся! :)
Это годами набитая привычка при монтаже и озвучке видео в Nuendo.
Я с Nuendo 2 начинал работать. До сих пор стоит Nuendo 3 (есть заказ на реанимацию старых проектов). Не знаю в какие годы у тебя были "при монтаже и озвучке видео в Nuendo", но более менее доступные версии, в моём понимании, вообще не годятся. Если, конечно, у тебя стоит Nuendo 6 и далее - то ты видимо богач!!! (цену загнули слишком на Nuendo 6 и далее).

Но в то время, монтаж и озвучка клипов в 5.1, реально и удобно работала только в Vegas (я имею в виду только звук, а не видео). Nuendo тогда не делала Ac 3!!! Только Vegas! К тому же в нём был максимайзер 5.1. Назывался как то типа - "Хаммер фол", не помню точно...:Dle65:
Поэтому любую композицию в Nuendo можно было сводить и рендерить в 5.1 на шесть wav файлов, закинуть в Vegas, потом спец-эффекты, т. п., и финал/мастеринг в Ac 3 - только Vegas.:Dle64:

п. с. Ну это только если 5.1. Озвучку видео в Nuendo конечно легко - видео картинка то была... Но видео ты же в нём не монтировал. В чём заключается акцент твой именно на: "при монтаже и озвучке видео в Nuendo"? Я не до понял... В любом DAW это только картинка/кино и всё. Это же не монтаж самого видео... :Dle95:
 
Последнее редактирование:
Не знаю в какие годы у тебя были "при монтаже и озвучке видео в Nuendo",
Работал над док фильмами и даже худ. сериалами дубляж делал. Богач не богач, эта работа была государственная. :)
@Archchie, ещё раз благодарю! :Dle79: :Dle12: Поставил скрипт в свой список автозагрузок и теперь как будто там и было!
Скрипт обозвал примерно Capture and TRIM the edges Item on the edges of the Arrange window )
Я думаю ему место быть в твоём репаке!)
 
Последнее редактирование:
Работал над док фильмами и даже худ. сериалами дубляж делал. Богач не богач, эта работа была государственная. :)
@Archchie, ещё раз благодарю! :Dle79: :Dle12: Поставил скрипт в свой список автозагрузок и теперь как будто там и было!
Скрипт обозвал примерно Capture and TRIM the edges Item on the edges of the Arrange window )
Я думаю ему место быть в твоём репаке!)
Вот и я так же сделал бы с сриптом Scroll (Поставлю скрипт в свой список автозагрузок ) . А его как назовёте? Качну, когда @Archchie, его в свой репозиторий поставит.

п. с. Я худ. сериалам дубляж редактировал. Тембрально и по динамике... (на период безденежья). Жадные заказчики по деньгам оказались, нашли подешевле звукоря - он им нае...енил красоты. Потом они оказались не конкурентно - способными и исчезли за горизонтом.:Dle45::Dle47::Dle33::Dle46:.
 
Последнее редактирование:
Я думаю ему место быть в твоём репаке!)
Ну что бы как постоянная функция была, а не нажимать кнопку - будет он так работать?
Будет - И в реапаке и как постоянная функция, но чуть позже.) Просто скрипт еще не готов, это я для теста выложил.) Там все не так просто, как кажется.
Нужно же сделать что бы они не конфликтовали между собой, как сейчас т.е. Если сейчас включить два скрипта, то непонятно что/какой скрипт будет работать. Нужно сделать, что бы скрипт понимал при автозапуске, включен он был или нет, для того что бы запустится ему или нет. И заставить все это работать. В общем чуть позже будет все готово.
 
Последнее редактирование:
  • Like
Реакции: Landre, YuriOl и smrz1
ОБЯЗАТЕЛЬНО УДАЛИТЬ ПРЕДЫДУЩИЕ ВЕРСИИ, СКАЧАННЫЕ ЗДЕСЬ ИЗ #1.118 СООБЩЕНИЯ.

Archie_Item; Grab item on edge arrange and scroll to edge item(AutoRun).lua
Archie_Item; Grab item on edge arrange and trim by edge window(AutoRun).lua


Поставил скрипт в свой список автозагрузок и теперь как будто там и было!
Вот и я так же сделал бы с сриптом Scroll (Поставлю скрипт в свой список автозагрузок )
Скрипт в автозагрузку ставить НЕ нужно!!! Он при запуске рипера будет включен, если был включен при закрытии рипера.
 
@Archchie, Отличный скрипт!!! Спасибо! Правда сложно иногда ухватиться, курсор руки как-то проскакивает. На гифке плохо видно, его намного быстрее колбасит)
 

Вложения

  • 12345.gif
    12345.gif
    104,9 KB · Просмотры: 158
@AlexLazer, Еще мышь может колбасить, когда ее ведешь. Обрати внимания на гиф, когда я вожу мышь вверх - вниз, то ее колбасит, а когда останавливаю, то появляется рука. Это из за того, что когда ведешь мышь скрипт пытается установить свой курсор, а рипер свой.
222.gif


@Archchie, Супер!!! Чуть задонатил
Спасибо!
 
  • Like
Реакции: AlexLazer
@AlexLazer, Еще мышь может колбасить, когда ее ведешь. Обрати внимания на гиф, когда я вожу мышь вверх - вниз, то ее колбасит, а когда останавливаю, то появляется рука. Это из за того, что когда ведешь мышь скрипт пытается установить свой курсор, а рипер свой.
Посмотреть вложение 181649
А можно сделать так что бы когда появляется рука, и я "кликаю" ей, айтем не выделялся? Было бы супер!
п. с. Просто само это действие (скролл) - увидеть "невидимое":Dle47:, а тут, заодно происходит выделение айтема. Приходиться снимать выделение...
Труд не тяжкий (один клик - но не нужный), но при больших объёмах и для увеличения быстроты работы - снятие выделения реально тормозит (в некоторых ситуациях).
Может где то это и хорошо, но выделение айтема - это уже другая операция.
 
А можно сделать так что бы когда появляется рука, и я "кликаю" ей, айтем не выделялся? Было бы супер!
Да - сложно это было придумать. Но что то получилось.))
 
Последнее редактирование:
  • Like
Реакции: Landre
Да - сложно это было придумать. Но что то получилось.))
У меня, после обновления скрипта, происходит какая то странная штука: айтем всё равно выделяется и появляется табличка: ...tem on edge arrange and scroll to edge item(AutoRun).lua:132: attempt to index a nil value.
Её закрываю - скрипт вообще перестаёт работать (хотя в экшен-листе у него стоит "on")
п. с. У меня Reaper 5.99
Вот гифка:
Запись_2020_05_24_16_30_50_704.gif
 
Последнее редактирование:
У меня, после обновления скрипта, происходит какая то странная штука: айтем всё равно выделяется и появляется табличка: ...tem on edge arrange and scroll to edge item(AutoRun).lua:132: attempt to index a nil value.
Странно - у меня работает.
Попробуй заменить 132 строку на это
Код:
local LastAction = (reaper.Undo_CanUndo2(0)or ''):upper();
222.gif
 
Последнее редактирование:

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