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

@Archchie, возможно ли сделать так, чтобы при загрузке проекта, скрипт считывал положения Соло и Мьют.

Скрипты серии: Script: Archie_Group; Toggle Solo Unsolo all tracks in group 01 (`).lua

У меня сейчас работает так:
1. Нажимаю кнопку скрипта на туллбаре, она горит, соло работает.
2. Сохраняю проект.
3. Закрываю Рипер.
4. Открываю Рипер.
5. Открываю проект.
6. Кнопка скрипта на туллбаре не горит, но дорожка при этом у меня в режиме "Соло".

- я ожидаю, что при загрузке проекта, кнопка на туллбаре будет "гореть", т.е. сообщать мне, что группа 1 у меня в положении Соло.
 
а возможно сделать скрипт такой же как и Track: Lock/unlock track height, но чтобы на кнопке был виден статус. Залочен - горит, нет - не горит?
Возможно!
При выделении нескольких треков:
1. При запуске скрипта если у нескольких треков включен лок, а у нескольких не включен, то:
1.1 У невключенных включить, а у включенных выключить? так сказать местами поменять.
1.2 Взять статус первого выделенного и применить ко всем остальным?
1.3 Если есть хоть один включенный, то отключить?
1.4 Если есть хоть один выключенный, то включить?
1.5 Если ..........​
2. Статус кнопки как подсвечивать?
2.1 Если есть хоть один включенный то зажечь?
2.2 Если есть хоть один выключенный то потушить?
2.3 Взять статус первого выделенного и отталкиваться от него?
2.4 или ........​
---------------------------

- я ожидаю, что при загрузке проекта, кнопка на туллбаре будет "гореть", т.е. сообщать мне, что группа 1 у меня в положении Соло.
К сожалению в рипере такой возможности нет, при перезагрузке рипера абсолютно все скрипты будут иметь статус off, рипер не умеет запоминать статус у скриптов, тут только один выход - добавить скрипт в автозагрузку, но если ты добавишь скрипт в авто загрузку, то произойдет следующее, если у тебя соло включено, то при загрузке рипера, авто запуск запустит скрипт и тем самым все соло отключит, то есть произойдет противоположное, тогда надо сделать кастом из двух одинаковых скриптов, что бы при авто запуске, если соло включено, то скрипт сначала отключит и тут же вторым действием включит.
Но имей в виду, это будет корректно работать, если на всех треках в группе стоит или не стоит соло, а если ты включил соло скриптом и потом на каком либо треке снимешь соло, скрипт соответственно прекратит работу, и соло будет не на всей группе, так вот при перезагрузке произойдет следующее, скрипт сначала включит соло на всей группе и затем выключит соло на всей группе, т.е при авто запуске, если соло не на всей группе будет стоять, то остальные соло тоже слетят.
 
  • Like
Реакции: YuriOl
@Archchie, 1. - 1.3 Если есть хоть один включенный, то отключить.
А подсветку наверное - 2.1 Если есть хоть один включенный то зажечь
А вообще-то да, вариантов много, даже не подумал! :) И те и те могут понадобиться, но мною выбранные вроде как компромисс..)) Мне часто нажимая на один трек хочется видеть статус лока.
 
1. - 1.3 Если есть хоть один включенный, то отключить. А подсветку наверное - 2.1
1.-1.3; 2.1;
PHP:
    --============== FUNCTION MODULE FUNCTION ========================= FUNCTION MODULE FUNCTION ============== FUNCTION MODULE FUNCTION ==============
    local Fun,Load,Arc = reaper.GetResourcePath()..'/Scripts/Archie-ReaScripts/Functions'; Load,Arc = pcall(dofile,Fun..'/Arc_Function_lua.lua');--====
    if not Load then reaper.RecursiveCreateDirectory(Fun,0);reaper.MB('Missing file / Отсутствует файл !\n\n'..Fun..'/Arc_Function_lua.lua',"Error",0);
    return end; if not Arc.VersionArc_Function_lua("2.4.1",Fun,"")then Arc.no_undo() return end;--=====================================================
    --============== FUNCTION MODULE FUNCTION ======▲=▲=▲============== FUNCTION MODULE FUNCTION ============== FUNCTION MODULE FUNCTION ==============
   
   
    Arc.HelpWindowWhenReRunning(2, "Arc_Function_lua", false);
    local function main();
        local ProjectState2,Toggle2;
        local function loop();
            local ProjectState = reaper.GetProjectStateChangeCount(0);
            if ProjectState2 ~= ProjectState then;
                ProjectState2 = ProjectState;
                -----------
                local CountSelTrack = reaper.CountSelectedTracks(0);
                if CountSelTrack == 0 then Toggle = 0 end;
                local Toggle;
                for i = 1, CountSelTrack do;
                    local SelTrack = reaper.GetSelectedTrack(0,i-1);
                    local heightLock = reaper.GetMediaTrackInfo_Value(SelTrack,"B_HEIGHTLOCK");
                    if heightLock == 1 then Toggle = 1 break else Toggle = 0 end;
                end;
                if Toggle ~= Toggle2 then;
                    if Toggle == 1 then;
                        Arc.SetToggleButtonOnOff(1); 
                    else;
                        Arc.SetToggleButtonOnOff(0); 
                    end;
                    Toggle2 = Toggle;
                end;
                t=(t or 0)+1;
            end;
            reaper.defer(loop);
        end;
       
        local TrLock;
        local CountSelTrack = reaper.CountSelectedTracks(0);
        if CountSelTrack > 0 then;     
            for i = 1, CountSelTrack do;
                local SelTrack = reaper.GetSelectedTrack(0,i-1);
                local heightLock = reaper.GetMediaTrackInfo_Value(SelTrack,"B_HEIGHTLOCK");
                if heightLock == 1 then TrLock = true break end;
            end;
           
            if TrLock then TrLock = 0 else TrLock = 1 end;
            for i = 1, CountSelTrack do;
                local SelTrack = reaper.GetSelectedTrack(0,i-1);
                if TrLock == 1 then;
                    local height = reaper.GetMediaTrackInfo_Value(SelTrack,"I_HEIGHTOVERRIDE");
                    if height == 0 then;
                        height = reaper.GetMediaTrackInfo_Value(SelTrack,"I_WNDH");
                        if height < 24 then;
                            height = nil;
                        end;
                    end;
                    if height then;
                        reaper.SetMediaTrackInfo_Value(SelTrack,"I_HEIGHTOVERRIDE",height);
                        reaper.SetMediaTrackInfo_Value(SelTrack,"B_HEIGHTLOCK",1);
                    end;
                else;
                    reaper.SetMediaTrackInfo_Value(SelTrack,"B_HEIGHTLOCK",0);
                end;
            end; 
        end;
        loop();
    end;
    main();
--------------------
В реапаке:
1. Берет статус последнего тронутого, если последний тронутый не выделенный, то берет статус первого выделенного и отталкивается от него.
2. Подсветка так же, последний тронутый или первый выделенный. Если у этого трека включен лок то кнопка горит.
 
Последнее редактирование:
@Archchie, Спасибо! :)
Закономерности не поймал пока, но иногда выскакивает такое предупреждение в обоих скриптах. Screenshot_1.png
Не всегда.., но заметил это после того, как кликаю по пустой панели треков, чтобы снять выделения треков или после удаления трека. Всегда - при автозагрузке глобал. Без автозагрузки скрипта, кнопка на залоченных треках не светится, пока не запустишь скрипт.
И ещё вопрос. В автозагрузку глобал можно только один скрипт загружать?
 
Последнее редактирование:
Насчет ошибки понятно, попозже исправлю, пока что нет времени.
такое предупреждение в обоих скриптах.
Ай-я-я-й, а обманывать нехорошо.:) В скрипте, который в предыдущем сообщении, такой ошибки не может быть, т.к. там нету такой функции "IsTrackSelected" эта ошибка может быть только в одном скрипте, в том который в реапаке.
Без автозагрузки скрипта, кнопка на залоченных треках не светится, пока не запустишь скрипт.
Я же три сообщения выше объяснял об этом, в рипере невозможно сделать такое, рипер не умеет запоминать состояние скриптов.
В автозагрузку глобал можно только один скрипт загружать?
Да - но выход прост: Делаешь кастом и в автозагрузку добавляешь ид кастома, а в кастом уже пихаешь что хочешь.:eek:
 
Ай-я-я-й, а обманывать нехорошо.:)
Может остался из репака включенным... Я же сразу начал проверять всё и вся :) Может параллельно два работали, короче мог и прозевать))
Сейчас ещё раз вдумчиво)) в загрузку кинул только 1.-1.3; 2.1; всё пока корректно загружается и работает!
Да - но выход прост: Делаешь кастом и в автозагрузку добавляешь ид кастома, а в кастом уже пихаешь что хочешь.:eek:
За совет спасибо! Аж стыдно, что я сам не догадался!:rolleyes:
 
  • Like
Реакции: Archie's
@YuriOl, Исправил!
Аж стыдно, что я сам не догадался!
Я по началу тоже не мог догадаться, вроде элементарная вещь, но на ум мне так и не пришла, пока мне @borisuperful, не подсказал, а когда он мне подсказал, то я так же - как и ты удивился тому, что я до этого не догадался.
 
  • Like
Реакции: YuriOl
@Archchie, не мог бы ты сделать скрипт-тоггл для Midi-Editor, чтобы включать-отключать остановку арранжа (автоскрол) при выделении какого-либо элемента? Чтобы он мог работать во время воспроизведения. Например идет воспроизведение - выделил какую-то ноту, скролл остановился, а при запуске скрипта область арранжа опять переклдючалась в место плей-курсора
 
@Supa75, Если честно, то не понял толком ничего, поподробнее пожалуйста, и да - кстати, а разве в миди редакторе есть автоскролл,насколько я знаю, то в миди редакторе нету авто скролла или я что то не знаю?
-----
P.S. Если я правильно понял, то нужно следующее:
Если кликнуть в миди редакторе по любой ноте, то должен отключится экшен "Toggle auto-view-scroll during playback" и отключится скрипт.
Если запустить скрипт, то скролл должен прыгнуть к плей курсору и включится экшен "Toggle auto-view-scroll during playback".​
Или я не правильно понимаю?
 
Последнее редактирование:
Если кликнуть в миди редакторе по любой ноте, то должен отключится экшен "Toggle auto-view-scroll during playback" и отключится скрипт.
Если запустить скрипт, то скролл должен прыгнуть к плей курсору и включится экшен "Toggle auto-view-scroll during playback".
Или я не правильно понимаю?
да, именно так
 
PHP:
    --============== FUNCTION MODULE FUNCTION ========================= FUNCTION MODULE FUNCTION ============== FUNCTION MODULE FUNCTION ==============
    local Fun,Load,Arc = reaper.GetResourcePath()..'/Scripts/Archie-ReaScripts/Functions'; Load,Arc = pcall(dofile,Fun..'/Arc_Function_lua.lua');--====
    if not Load then reaper.RecursiveCreateDirectory(Fun,0);reaper.MB('Missing file / Отсутствует файл !\n\n'..Fun..'/Arc_Function_lua.lua',"Error",0);
    return end; if not Arc.VersionArc_Function_lua("2.3.9",Fun,"")then Arc.no_undo() return end;--=====================================================
    --============== FUNCTION MODULE FUNCTION ======▲=▲=▲============== FUNCTION MODULE FUNCTION ============== FUNCTION MODULE FUNCTION ============== 
   
   
   
    local Api_js,version = Arc.js_ReaScriptAPI(true,0.986);
    if not Api_js then Arc.no_undo()return end;
   
   
   
    local function Scroll(pos);
        local trackview = reaper.JS_Window_FindChildByID(reaper.GetMainHwnd(),1000);
        local _,position,pageSize,min,max,trackPos=reaper.JS_Window_GetScrollInfo(trackview,"SB_HORZ");
        local track = reaper.GetTrack(0,0);
        local MIDIIt = reaper.CreateNewMIDIItemInProj(track,pos*2,pos*2+1,false);
        reaper.DeleteTrackMediaItem(track,MIDIIt)
        reaper.JS_Window_SetScrollPos(trackview,"SB_HORZ",pos);
    end;
    local midieditor = reaper.MIDIEditor_GetActive();
    if midieditor then;
        local Toggle = reaper.GetToggleCommandStateEx(32060,40750);
        if Toggle ~= 1 then;
            reaper.MIDIEditor_OnCommand(midieditor,40750);
        end;
        local Play = reaper.GetPlayPosition();
        local Zoom = reaper.GetHZoomLevel();
        local pos = math.floor((Play*Zoom),0.5);
        Scroll(pos);
    end;
   
    Arc.SetToggleButtonOnOff(1); 
    hash=nil
    local function loop();
        local midieditor = reaper.MIDIEditor_GetActive();
        if midieditor then;
            local Take = reaper.MIDIEditor_GetTake(midieditor);
            local Track = reaper.GetMediaItemTake_Track(Take);
            local retval, hash2 = reaper.MIDI_GetTrackHash(Track,true,"");
            if not hash then hash = hash2 end;
            if hash2 ~= hash then;
                local Toggle = reaper.GetToggleCommandStateEx(32060,40750);
                if Toggle == 1 then;
                    reaper.MIDIEditor_OnCommand(midieditor,40750);
                    Arc.SetToggleButtonOnOff(0); 
                    return;
                end;
            end;
        else;
            -- Arc.SetToggleButtonOnOff(0); 
            -- return;
        end;
        --t=(t or 0)+1
        reaper.defer(loop);
    end;
    loop();
    reaper.atexit(Arc.SetToggleButtonOnOff);
 
Последнее редактирование:
Если кликнуть в миди редакторе по любой ноте, то должен отключится экшен "Toggle auto-view-scroll during playback" и отключится скрипт.
Так в миди редакторе нет такого скрипта, а есть - View: Toggle auto-view-scroll on playback без during..
Или имеется в виду работа в основном окне аранжировки, в редакторе миди через команду E или когда миди редактор в доке?
Вообщем не понял я, но идея хорошая! Если можно это сделать чисто для работы в пиано ролл!? Чтобы это распространялось на скрипт View: Toggle auto-view-scroll on playback
 
Так в миди редакторе нет такого скрипта, а есть - View: Toggle auto-view-scroll on playback без during..
Это один и тот же экшен!
Или имеется в виду работа в основном окне аранжировки, в редакторе миди через команду E
Нет, это для миди редактора.
Что бы в миди редакторе работал экшен "Toggle auto-view-scroll on playback" нужно поставить галку здесь.
 

Вложения

  • upload_2019-5-20_20-13-38.png
    upload_2019-5-20_20-13-38.png
    41,5 KB · Просмотры: 152
  • Like
Реакции: YuriOl
@Archchie,
Вообщем не понял я, но идея хорошая!
:D
Я тоже не понял толком в чём идея, скажу больше - я не понимаю смысла существования самого экшена View: Toggle auto-view-scroll on playback. Зачем его вообще выключать? Точнее - в какой ситуации это надо, что бы не видеть двигающийся курсор?

п. с. Другое дело View: Continuous scrolling during playback бы в МИДИ редактор, но не получается известными мне способами - не работает. Или там какой то другой экшен выполняет эту функцию?
 
Что бы в миди редакторе работал экшен "Toggle auto-view-scroll on playback" нужно поставить галку здесь.
Теперь полностью понятно и заработало как ожидалось, но не совсем так! :) В этом есть СЕНС!. И притом для меня актуальный, думаю и для тех, кто работает в кино, теле, радио....короче на потоке, с большими кусками и надо быстро! Мне очень часто приходится редактировать так сказать на лету, и миди ноты и айтемы, которые скроллятся по тому же принципу. Нажатый айтем (нота) приостанавливает автоскролл, и чтобы потом перескочить к плей курсору, надо отжать ноту (айтем), выключить и снова включить кнопку автоскролла (Toggle auto-view-scroll on playback).
@smrz1,
я не понимаю смысла существования самого экшена View: Toggle auto-view-scroll on playback
Это потому наверное, что ты не работал в таких ситуациях, где это очень облегчает жизнь! (длиннючие)) начитки например и .т.д..)
Хотелось бы так: При включенном скрипте Toggle auto-view-scroll on playback если нажал на айтем (ноту), прокрутка приостанавливалась, потом клац по скрипту, и ты около текущей позиции воспроизведения с продолжающимся автоскроллом. Нажал на ноту (айтем), что-то там подправил, - клац по скрипту и ты опять на новом месте текущего положения плейкурсора и.т.д..
 
@YuriOl, вот теперь, совсем немного начинаю понимать (хоть и с трудом). У меня был короткий промежуток, когда редактировал голоса в озвучке сериалов, но ничего подобного не использовал. Работы куча, но с минимум "лавэ" и скучная для меня (в конечном итоге - просто достала)...
У меня наоборот - куча треков, но в размере 5 минут (зато много разных композиций - это весело). С аудио всё просто, с миди - только редактирую (за "гениальными" аранжировщиками):cool:

п. с. Вопрос: почему экшен Toggle auto-view-scroll on playback ты называешь скриптом? Или я до сих пор толком не понял Риперовский жаргон:eek:? В экшенах есть кастомы, экшены и скрипты или как то ещё?o_O

@YuriOl "и надо быстро!" - к моей радости я по времени мало ограничен - с меня требуется качество.
Есть вещи, которые я переделывал несколько раз, в течении нескольких лет (порой - целиком альбомы) - некоторые авторы считают, что совершенству нет предела - я не против!!! Типа - меняются звуки, инструменты, аранжировка - а песни - всё те же...;)
 
Последнее редактирование:
нажал на айтем (ноту)
Что означает эта фраза??? Ведь айтем и нота это как рука и нога, т.е. абсолютно разные вещиo_O и вот как вас понимать? скрин
Нажал на ноту (̶а̶й̶т̶е̶м̶)̶, что-то там подправил, - клац по скрипту и ты опять на новом месте текущего положения плейкурсора и.т.д..
Так вроде так и работает!
Вопрос: почему экшен Toggle auto-view-scroll on playback ты называешь скриптом?
Потому что он запарился с этими названиями, вот и называет так.
В экшенах есть кастомы, экшены и скрипты или как то ещё?
Да - ты абсолютно прав.
 

Вложения

  • upload_2019-5-21_0-22-25.png
    upload_2019-5-21_0-22-25.png
    30,5 KB · Просмотры: 132
  • Like
Реакции: smrz1
Хотелось бы так: При включенном скрипте Toggle auto-view-scroll on playback если нажал на айтем (ноту), прокрутка приостанавливалась, потом клац по скрипту, и ты около текущей позиции воспроизведения с продолжающимся автоскроллом. Нажал на ноту (айтем), что-то там подправил, - клац по скрипту и ты опять на новом месте текущего положения плейкурсора и.т.д..
ВОВО. Точь в точь, что я и имел в виду. Может не так объяснил

Что означает эта фраза??? Ведь айтем и нота это как рука и нога
наверное, имеется в виду, что для арранжа - нажал на айтем, для миди-эдитора - нажал на ноту.
 
А что, разве не так работает???
во время воспроизведения выделяю ноту, автоскрол останавливается. Но для того, чтобы вернуть скрол и перескочить к плейкурсору нужно дважды запустить скрипт. Хотелось бы одно нажатие.
 
во время воспроизведения выделяю ноту, автоскрол останавливается. Но для того, чтобы вернуть скрол и перескочить к плейкурсору нужно дважды запустить скрипт. Хотелось бы одно нажатие.
вот это окно выскакивало и что ты нажал и поставил ли галку?
upload_2019-5-21_0-44-45.png
 
Последнее редактирование:
Даже мультик записал
В мультике ничего не понятно, потому что не видно где авто скролл идет, а где нет. Надо было включить экшен "Continuous scrolling during playback", что бы было все визуально видно.
Не получается что-то у меня. То работает со второго нажатия, то вообще не работает.
Обновил предыдущий пост #282: добавил подсветку кнопки, что бы понятней было.
Проверяй, с кнопкой может понятнее будет.
И кстати имей в виду, что бы плей был включен в аранже, а не в миди редакторе, если плей включен в редакторе миди, то это работать не будет.
 
  • Like
Реакции: YuriOl
@Archchie,
Что означает эта фраза??? Ведь айтем и нота это как рука и нога
:) Да, часто приходится редактировать и ноги и руки.))
Для аранжа - айтем, для миди - ноты.
И как у @Supa75, не всегда одинаково ведёт нажатие на скрипт.

PS
Понятно! Буду пробовать, ато я в миди редакторе включал скролл.
За подсветку отдельное спасибо! Так ещё лучше, хотел отдельно попросить! :)
 
Последнее редактирование:
ато я в миди редакторе включал скролл.
Скролл то правильно в миди редакторе(хотя без разницы, где ты скролл включаешь, потому как его скрипт сам включает), а вот плей должен из аранжа upload_2019-5-21_2-25-42.png
---------
Пост 293/295 перечитайте
 
Последнее редактирование:
@Archchie, пока не пойму, с телефона пишу. Завтра попробую. А плей чего только из аранжа? Я его вообще только пробелом запускаю там и там..
Ладно, к компу доберусь и разберусь думаю :)
Спасибо!
 

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