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

Тема в разделе "Reaper", создана пользователем @Michael, 2 авг 2015.

  1. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    796
    Симпатии:
    1.220
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    PHP:
    steps 3

    function Action(step)
      if 
    step == 0 then
        reaper
    .MB('step'..step+1,'',0)
       elseif 
    step == 1 then
        reaper
    .MB('step'..step+1,'',0)
       elseif 
    step == 2 then
        reaper
    .MB('step'..step+1,'',0)  
      
    end
    end

    cur_key 
    reaper.GetExtState'test''step' )
    if 
    not tonumber(cur_keythen cur_key else cur_key =tonumber(cur_keyend
    if cur_key steps-1 then cur_key 0 end
    Action
    (cur_key)
    reaper.SetExtState'test''step'cur_key+1false )
     
    Aleksandr Oleynik и Maestro Sound нравится это.
  2. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    @@Michael, Спасибо А можно по примеру ? step 1. выделить Group 02 и за солировать его треки. step2 . Найти треки в Group 02 и скрыть в Hide TCP step3. Найти треки с Vsti выделить их и заморозить.
     
  3. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.265
    Симпатии:
    1.913
    Пол:
    Мужской
    Куча вопросов и ответов, я честно не успел даже посмотреть.
    Чтобы перезаписать айтем я использовал режим "r+b". Или "rb"
    Чисто по дружески советую использовать именно этот режим.
    Вы можете увидеть другие варианты, которые типа работают и тп, но это х....я.
    В какой-то из ситуаций они все равно дадут косяк. Без бинарных данных.
    С бинарными - они дадут косяк при первом нуле. Короче, долго говорить, используйте bin режим и никогда не ошибетесь.
     
  4. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    235
    Симпатии:
    75
    Пол:
    Мужской
    @@Michael, А что нужно сделать что бы это окно не выскакивало
    Снимок.PNG
     
  5. vitalker

    vitalker Well-Known Member

    Регистрация:
    8 окт 2013
    Сообщения:
    2.904
    Симпатии:
    1.105
    Адрес:
    Гродно
    @Archchie, наверно вписать в код какие-то экшны?
     
  6. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    235
    Симпатии:
    75
    Пол:
    Мужской
    Они у меня вписаны
    PHP:
       steps 4               
        
    function Action(step)
        if 
    step == 0 then
        reaper
    .MB('step'..step+1,'',0)
    ---------------------------------------------------------------------       
                
    ComandID 40155   -- PeaksIncrease peaks view gain 
                reaper
    .Main_OnCommand(ComandID,0)   
    -----------------------------------------------------------------       
        elseif 
    step == 1 then
        reaper
    .MB('step'..step+1,'',0)
    -----------------------------------------------------------------     
                
    ComandID 40155   -- PeaksIncrease peaks view gain 
                reaper
    .Main_OnCommand(ComandID,0)       
    -----------------------------------------------------------------   
        elseif 
    step == 2 then
        reaper
    .MB('step'..step+1,'',0
    ----------------------------------------------------------------- 
                
    ComandID 40155   -- PeaksIncrease peaks view gain 
                reaper
    .Main_OnCommand(ComandID,0)           
    -----------------------------------------------------------------
         elseif 
    step == 3 then
         reaper
    .MB('step'..step+1,'',0)
    -----------------------------------------------------------------         
                
    ComandID 40156   -- PeaksDecrease peaks view gain 
                reaper
    .Main_OnCommand(ComandID,0
                
    ComandID 40156   -- PeaksDecrease peaks view gain 
                reaper
    .Main_OnCommand(ComandID,0
                
    ComandID 40156   -- PeaksDecrease peaks view gain 
                reaper
    .Main_OnCommand(ComandID,0
                               
    -----------------------------------------------------------------   
        
    end
       end
       
        cur_key 
    reaper.GetExtState'test''step' )
        if 
    not tonumber(cur_keythen cur_key else cur_key =tonumber(cur_keyend
        
    if cur_key steps-1 then cur_key 0 end
        Action
    (cur_key)
        
    reaper.SetExtState'test''step'cur_key+1false )
     
  7. vitalker

    vitalker Well-Known Member

    Регистрация:
    8 окт 2013
    Сообщения:
    2.904
    Симпатии:
    1.105
    Адрес:
    Гродно
    @Archchie, я так понимаю, что у вас только печатается этот текст, а ничего не выполняется?
     
  8. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    235
    Симпатии:
    75
    Пол:
    Мужской
    Все выполняется ! Все работает просто когда нажимаешь на кнопку выскакивает окно step 1 нажимаешь ок скрипт срабатывает, нажимаешь второй раз на кнопку выскакивает окно step 2 нажимаешь ок скрипт срабатывает и т.д.
     
  9. vitalker

    vitalker Well-Known Member

    Регистрация:
    8 окт 2013
    Сообщения:
    2.904
    Симпатии:
    1.105
    Адрес:
    Гродно
    @Archchie, где-то у вас прописана комнада, которая отвечает за выдачу этого окошка, иначе и быть не может.
     
  10. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    796
    Симпатии:
    1.220
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    Этот тред очень быстро превратится в мусорку кода, если тут будут пытаться хаотично вставить левые строки без понимания КАК это работает. Изучайте API (ctrl+f на странице API Help прекрасно работает, в том числе по функции MB() , а некоторые и основы программирования (на уровне 9 класса средней школы) и задавайте вопросы вида "как работает", а не "что и куда вставить".
     
    CerberPic, Aleksandr Oleynik и EUGEN27771 нравится это.
  11. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Попробуйте убрать строки

    reaper.MB('step'..step+1,'',0)
     
    Последнее редактирование: 9 дек 2017
  12. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Вам спасибо. Я уже пеляю по Вашему примеру себе

    И @Michael конечно спасибо. Понимаю их раздраженность "чайниками"
     
  13. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    @Archchie, Михаил прав....
    Попытки запихнуть стандартные Экшины в скрипт и воспользоваться его функционалом только для Логики (if, then, for, do, else.......) - это путь в ни куда.
    Я ведь не зря вам выложил второй вариант, в котором нет стандартных Экшинов, но есть уже функции API и циклы.
    Вы с моим вторым скриптом разобрались? Я ведь там подробно всё описал и не получил от вас ни какого фидбэка.
    Если не разобрались - не стоит двигаться дальше, поверьте!!!!!! Лучше задайте любые дурацкие вопросы по скрипту -
    http://rmmedia.ru/threads/118091/page-62#post-2183955
    поймите ТОЧНО как это работает, сделайте пару похожих простых скрипта сами, и потом двигайтесь дальше.

    reaper.MB('step'..step+1,'',0) - это по сути проверка работы скрипта, данная функция аналог print в самом LUA - выводит сообщение на опртеделённом этапе скрипта и показывает, что скрипт работает так, как вы хотели.
    Естественно, эту строку нужно убирать или коментить (два тире перед строкой) перед сохранение окончательной версии скрипта.
    --- добавлено 9 дек 2017 ---
    Это не раздражённость, это понимание того, что помощь идёт в песок.
    --- добавлено 9 дек 2017 ---
    +100500
    Михаил, но любое обучение идёт с большей мотивацией, если уже на первых его шагах что-то получается сделать работающее, а не чисто для теории освоения.
    Посему - давайте будем терпимее к желающим научиться.
    Я, кстати, тоже ПОСТОЯННО учусь...
    Вот с Set(Get)State что-то ни как не мог разобраться...
     
    Последнее редактирование: 9 дек 2017
    EUGEN27771 и CerberPic нравится это.
  14. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Ну тут не соглашусь . Зачем учить Азбуку если цель Написать Роман "Война и Мир"? все само собой придет, надоест запихивать стандартные екшины в скрипты и неотвратимо придем к API:) Это точно
     
    Archchie нравится это.
  15. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    Можете не соглашаться, но я то этот путь прошёл - тогда хотя бы прислушайтесь к опыту и мнению.
    Ведь прям сразу сподкнулись об отсутствие части стандартных Экшинов для VSTi и делать винигрет из Экшинов и API можно только если хорошо понимаешь что делаешь.

    Ну и я ведь тоже разделяю негативное отношение Михаила к вашим попыткам тыканий в небо, а значит, на каком то этапе просто не стану им потакать также как и Михаил.
     
  16. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    235
    Симпатии:
    75
    Пол:
    Мужской
    Полностью согласен! сначала с условиями всякими в голове устаканится ,а потом и потихоньку экшены из скриптов начинать убирать ,так понимание и приходит,а если все и сразу начинаешь пихать в голову ,то просто путаница получается и вообще ничего не понимаешь.
     
  17. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Вот видите Вы прошли, а нам не разрешаете:):)
    Но Спасибо Мы прислушиваемся
     
  18. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    Почему же не разрешаю?
    Я вам скрипт выложил первый (ущербный) на чисто Экшинах и логических функциях.
    Но ПОТОМ выложил на API - и тишина ----- так Не Пойдёт! :)
     
  19. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Почему тишина там все описано подробно по той описи я и нашел что ReaEq у меня в Vsti "убежал"
     
  20. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Подскажите, есть ли возможность вывода диалогового окна, но не с OK/Cancel, а со своими параметрами?
    К примеру, чтобы при запуске скрипта для фриза выскакивал диалог с вариантами Mono, Stereo, Multichannel.
    А ещё просто интересно, чем reaper.MB( msg, title, type ) отличается от reaper.ShowMessageBox( msg, title, type )? По всему видно, что это функции-близнецы, а также что предпочтение больше отдаётся MB. Есть ли какие-то глобальные различия в работе этих функций?
     
  21. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    796
    Симпатии:
    1.220
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    Идентичны.
    Касаемо кастомных кнопок - только свой интерфейс (gfx) или расширение.
     
    Последнее редактирование: 9 дек 2017
    CerberPic нравится это.
  22. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    235
    Симпатии:
    75
    Пол:
    Мужской
    @Aleksandr Oleynik, Вот что то начал делать ,ну опять же с экшенами(Проверьте что правильно,а что не правильно вроде все работает ?) предполагаю что на место экшенов нужно что то вроде reaper.GetMediaItem ну и что то связаное с peaks только вот ищу на https://www.extremraym.com/cloud/reascript-doc/ и вообще там ничего нету связанного с item peaks view,Скажите вообще с чего начинать поиск всех команд ? откуда вы их берете ?По моему если исходить из логики, то там вообще ничего не найти.
    PHP:
            --Script PEAK:INCREASE-DESREASE
    reaper
    .Undo_BeginBlock() 
      
    steps 6   
        
    function Action(step)
        if 
    step == 0 then     
             
    for 1,do --increase               
                 ComandID 
    40155 reaper.Main_OnCommand(ComandID,0)--PeaksIncrease peaks view gain               
             end   
        
    elseif step == 1 then     
             
    for 1,do --increase               
                       ComandID 
    40155 reaper.Main_OnCommand(ComandID,0
             
    end   
        
    elseif step == 2 then   
             
    for 1,do --increase               
                       ComandID 
    40155 reaper.Main_OnCommand(ComandID,0)             
             
    end   
        
    elseif step == 3 then
             
    for 1,do --increase               
                       ComandID 
    40155 reaper.Main_OnCommand(ComandID,0)           
             
    end 
        
    elseif step == 4 then
             
    for 1,do --increase               
                       ComandID 
    40155  reaper.Main_OnCommand(ComandID,0)
             
    end       
        
    elseif step == 5 then                             
             
    for 1,25 do --increase                         
                       ComandID 
    40156   reaper.Main_OnCommand(ComandID,0)--PeaksDecrease peaks view gain                   
             end                                                 
        end
      end   
      cur_key 
    reaper.GetExtState'test''step' )
      if 
    not tonumber(cur_keythen cur_key else cur_key =tonumber(cur_keyend
      
    if cur_key steps-1 then cur_key 0 end
      Action
    (cur_key)
      
    reaper.SetExtState'test''step'cur_key+1false 
         
    reaper.Undo_EndBlock("Peak",1)
     
  23. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    235
    Симпатии:
    75
    Пол:
    Мужской
    Вот на него вроде смотришь все описано, все понятно, но опять же непонятно от куда вы это все взяли ?Пока с экшенами делал про всякие if,for, else понял что это такое и как работает,а вот сами команды как вы ищите, по какому принципу? не могу понять.
     
    Последнее редактирование: 9 дек 2017
  24. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    796
    Симпатии:
    1.220
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    В зависимости от надобности, поиск идет в API Help (генерируется из редактора соответствующей кнопкой). Многие команды ходовые и интуитивно ищутся по ключевым словам в самом названии команды или описании. Некоторые неочевидны и описаниями обделены, тут спасает поиск глобальный, Гугл, форум кокос, поиск примеров использования в репозиториях ReaPack.
     
  25. YuriOl

    YuriOl Active Member

    Регистрация:
    6 май 2005
    Сообщения:
    449
    Симпатии:
    75
    Пол:
    Мужской
    Адрес:
    Луганск
    Коллеги, мне очень нравится работа - Script: me2beats_Vertical zoom to tracks with items, minimize others.lua, но когда в проекте в папках есть ещё подпапки с VSTi и группами, то работает не корректно, просто всё минимизируя. Когда удаляю эти папки - работает нормально. Это можно подправить?
    GIF.gif
     
    Последнее редактирование: 9 дек 2017
  26. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    @YuriOl, сейчас проверил - у меня всё корректно работает.
     

    Вложения:

    • gif.gif
      gif.gif
      Размер файла:
      1,4 МБ
      Просмотров:
      17
  27. YuriOl

    YuriOl Active Member

    Регистрация:
    6 май 2005
    Сообщения:
    449
    Симпатии:
    75
    Пол:
    Мужской
    Адрес:
    Луганск
    При таком количестве треков, без многоканальных VSTi в подпапках, шин.. и у меня корректно работает.
     
  28. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    Не всегда просто найти нужную API функцию, а иногда её и нет в общем, приходится её создавать из других, из стандартных LUA функций, а бывает, что и тупичёкс...

    Рецепт создания скрипта - в начале идея, затем логика его построения, причём лучше сразу продумать несколько логических вариантов, так как может оказаться, что один из них будет тупиковым.
    Вот новая реинкарнация всё того-же скрипта, но в котором совсем нет стандартных Экшинов (вот тех пустышек Dummy) и который, (после данного Михаилом замечания, что VSTi на треке может быть не один, и рецепта решения в общем) теперь игнорирует все VSTi.

    Даю картинку, в которой видна табуляция -
    2017-12-09_233136.png

    И код скрипта с пояснениями, которые конечно чайнику понять как скрипт создан мало помогут, но всё же -

    PHP:
    ----------------------------------------------------------------------------------------------------
    local msg = function(Mreaper.ShowConsoleMsg(tostring(M).."\n"end -- это функция для отладкитот самый принт
    ----------------------------------------------------------------------------------------------------
    reaper.Undo_BeginBlock() --call to start a new block
    ---------------------------------------------------------

    toggle_state reaper.GetExtState('section_FX''On_Off') -- проверяем значение ключа On_Off

    if not tonumber(toggle_statethen -- если значения ещё нетто -
      
    toggle_state 0                 -- то назначаем его 0
    else
      
    toggle_state tonumber(toggle_state) -- если естьто берём его и превращаем из строки в номер
    end

    function IsInstrument(trackfx) -- это код выполняемой функции
      local _
    FXName reaper.TrackFX_GetFXName(trackfx'' ) -- получаем имя FX
      
    if FXName:match('^VSTi:'then -- если в начале имени есть VSTiто
        is_FX_instrument 
    true -- то вот этому параметру присваиваем true
      
    else                      -- а если нетто
        is_FX_instrument 
    false -- то вот этому параметру присваиваем false
      end
      
    return is_FX_instrument -- возвращаем в точку вызова функции значение этого параметра
    end

    local counttracks 
    reaper.CountTracks(0) -- даёт значение кол-ва треков
    if counttracks == nil then return end -- если треков нетто и ни чего не делать :)
    for 
    i=1counttracks do -- создаём цикл опроса по каждому треку
      local track 
    reaper.GetTrack(0i-1) -- получаем объект Медиа Трек для каждого порядкового номера трека
      countFX 
    =  reaper.TrackFX_GetCounttrack ) -- для каждого трека получаем кол-во FX-ов на нём
      
    if countFX == nil then return end -- если FX нетто и ни чего не делать :)
      for 
    i=1countFX do -- создаём цикл опроса по каждому FX-у на треке
        instrument 
    IsInstrument(tracki-1) -- вызываем функцию IsInstrument и передаём в неё два парапметра,
        -- 
    Медиа Трек текущий и индекс (порядковый номерFX-а и обратно получаем true если это VSTi
        
    -- false если это НЕ VSTi
        
    if instrument == false then -- делаем условиечто если FX не VSTiто -
          if 
    toggle_state == 0 then -- тут как и раньшеесли state 0 то делать вот это
            reaper
    .TrackFX_SetEnabled(tracki-1) -- Unbypass FX

            reaper
    .SetExtState('section_FX''On_Off'1false)
            --------------------------------------------------------------------------------------------
          else -- 
    в противном случае
            reaper
    .TrackFX_SetEnabled(tracki-10) -- Bypass FX

            reaper
    .SetExtState('section_FX''On_Off'0false)
            --------------------------------------------------------------------------------------------
          
    end
        end
      end
    end

    ----------------------------------------------------------------------------------------------------
    reaper.Undo_EndBlock("Bypass all FX (except VSTi) for all tracks",1)
    reaper.PreventUIRefresh(1)
    Если есть интерес разобраться как этот скрипт создан, готов по полочкам разложить, объяснить.
     
    Последнее редактирование: 10 дек 2017
  29. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    @Aleksandr Oleynik, а за что отвечает extraflags в Undo_EndBlock? Кто-то единицу пишет, кто-то ноль, у меня чаще корректно работает при -1, его обычно и пишу.
     
  30. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Зачем эта функция? назначение on-off? А все понял она скрипт @step@

    А в каких случаях это скрипту нужно?
     
    Последнее редактирование: 9 дек 2017
  31. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    Не разбирался с этим. Я в общем в своих скриптах редко использую Undo блок
    --- добавлено 10 дек 2017 ---
    Она нужна, если нужно запоминать состояние чего либо после закрытия скрипта и до закрытия проекта.
    Ну вот в частности решение toggle или step.
    Ну или несколько скриптов, которые должны знать о состоянии друг друга.
     
    Последнее редактирование: 10 дек 2017
  32. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    В таких вот ситуациях (когда нужно сделать что-то из функий присутствующих в стандартных Экшинах, я даже не заморачиваюсь, тоже использую конструкцию вызова Экшина.
     
  33. igor13r

    igor13r New Member

    Регистрация:
    8 ноя 2013
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    Род занятий:
    musicman
    Адрес:
    saransk
    Прошу прощения, не нашёл подобного :
    Нарезал куски из аудио на нескольких треках...и эти треки надо зарендерить в один трек ( который может быть встал бы под эти треки )..
    спс.
     
  34. diggidon

    diggidon Super Moderator Команда форума

    Регистрация:
    26 май 2008
    Сообщения:
    6.401
    Симпатии:
    6.230
    Род занятий:
    Жму кнопки, кручу ручки...
    Адрес:
    Днепропетровск UA
    Кастом на две строчки (нужен скрипт из Reapack):
    1. Упаковать выделенные треки в папку (Script: me2beats_Create folder from selected tracks.lua),
    2. Сделать стим папки (SWS/AW: Render tracks to stereo stem tracks, obeying time selection).
    При этом итоговый аудио-файл будет по длине тайм-селекшна, если нет тайм-селекшна - то по всей длине ваших нарезанных кусков.
     
    igor13r нравится это.
  35. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    А где данный апгрейчик взять то?
     
    Слава нравится это.
  36. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Столкнулся с такой проблемой, что ни экшн SWS/S&M: Delete selected items' takes and source files (no undo), ни функция os.execute с командой на удаление не работают, если в пути к файлу имеется кириллица. При том, что при вызове консоли (которую os.execute как раз и использует) вручную всё прекрасно удаляется. Уже весь гугл перерыл, пробовал всяческие функции, какие только находил - результат нулевой. Возможно это как-то решить?
     
  37. igor13r

    igor13r New Member

    Регистрация:
    8 ноя 2013
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    Род занятий:
    musicman
    Адрес:
    saransk
    @diggidon,
    Благодарствую..., но у меня с первым скрптом вот это :
     

    Вложения:

  38. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    @CerberPic, конечно возможно - не используйте кирилицу.
    Кирилица вам и в других ситуациях напакостит.
     
  39. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    @Aleksandr Oleynik, да я в курсе, но только вот сидеть и переименовывать все папки, чтобы потом куча проектов не находила своих данных, как-то не лучшая перспектива. Да и хотелось бы, чтобы не у меня одного этот скрипт работал.
     
  40. diggidon

    diggidon Super Moderator Команда форума

    Регистрация:
    26 май 2008
    Сообщения:
    6.401
    Симпатии:
    6.230
    Род занятий:
    Жму кнопки, кручу ручки...
    Адрес:
    Днепропетровск UA
    @igor13r, у меня с этим скриптом всё отлично.
    Ищите причину в вашем конфиге - версия Рипера, версия SWS, и т.д.
    З.Ы. У меня долгое время вместо скрипта камрада me2beats отлично работал мой собственный кастом экшн строк на 12-15 емнип. Завтра приеду на студию, сделаю и выложу кастом по вашему ТЗ.
     
  41. igor13r

    igor13r New Member

    Регистрация:
    8 ноя 2013
    Сообщения:
    8
    Симпатии:
    0
    Пол:
    Мужской
    Род занятий:
    musicman
    Адрес:
    saransk
    @diggidon, качнул весь reapack me2beats и оттуда выбрал скрипт, всё получилось )
    спасибо )..... а вот к примеру с айтемами такое можно сделать ? Айтемы тоже на разных треках
     
  42. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    @CerberPic, так если кто-то не прислушивается к базовым советам и использует кирилицу - флаг ему в руки, у него не только со скриптами проблемы будут.
     
  43. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.914
    Симпатии:
    8.405
    Пол:
    Мужской
    Адрес:
    Киев
    Михаил, не обычный синтаксис.
    Вот это вот выражение -
    PHP:
    ({reaper.TrackFX_GetFXNametrackfx'' )})[2]
    это получение значения второй переменной в таблице значений функции reaper.TrackFX_GetFXName?
    Не встречал раньше. Интересно.
     
  44. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Потестите что получилось. Скрипт Smart freeze/unfreeze track with deleting source files. Работает пока только с одним выделенным треком и некириллическими путями. С кириллическими тоже в целом работает, но не выполняет главную функцию - удаление фризов с диска.
    При заморозке скрипт попросит ввести желаемое кол-во каналов (1 - моно, 2 - стерео, 3 - многоканальный)
    При запуске для зафриженного трека спросит, разморозить ли его. При выборе "Нет" будет произведена повторная заморозка.
    Возможны баги. Замечания по синтаксису тоже приветствуются.
    PHP:
    local types = {"WAVE""MIDI""MP3""FLAC""VIDEO""VORBIS""WMA""OPUS""APE""CLICK""REX""RPP"}
    local track reaper.GetSelectedTrack(00)
    local track_chunksourcewave
    local exist 
    = {}
    local input_msg 'Specify the number of channels:'
    local err_msg 'Something went wrong'
    local nf_msg 'One or more source file(s) was not found. Do you want unfreeze the track anyway?'
    local unfrz_msg = [[
    Unfreeze track and delete freezed files from disc?
    (
    Press "No" if you want to freeze track once more)
    ]]

        ---------------------------------------------------
    function 
    eugen27771_GetTrackStateChunk(track)
        
    local fast_str reaper.SNM_CreateFastString("")
        if 
    reaper.SNM_GetSetObjectState(trackfast_strfalsefalsethen
            track_chunk 
    reaper.SNM_GetFastString(fast_str)
        
    end
        reaper
    .SNM_DeleteFastString(fast_str)
        return 
    track_chunk
    end
        
    ---------------------------------------------------
    function 
    get_sources()
        
    local t = {}
        
    track_chunk eugen27771_GetTrackStateChunk(track)
        
    local ch_opench_cntit_id false00
        
    for line in track_chunk:gmatch('[^\n\r]+') do
            if 
    line:match('<FREEZE'then ch_open true end
            
    if ch_open and line:match('<ITEM'then it_id it_id 1 end
            
    if ch_cnt 0 then
                
    if not t[it_idthen t[it_id] = {} end
                t
    [it_id][#t[it_id]+1] = line
            
    end
            
    if ch_open and line:match('<'then ch_cnt ch_cnt 1 end
            
    if ch_open and line:match('>'then ch_cnt ch_cnt 1 end
            
    if ch_open and ch_cnt 1 then break end
        end
        local sources 
    t
        
    for key in pairs(sources) do
            
    local ch table.concat(sources[key], '\n')
            
    source tostring(ch:match('<SOURCE %w+')):sub(9)
            if 
    source == "" then source "EMPTY" end
            
    if source ~= "MIDI" and source ~= "LTC" and source ~= "EMPTY" then
                local filename 
    tostring(ch:match('FILE %C+')):sub(7)
                
    filename filename:gsub('"%s*%d*'"")
                
    local file_exists reaper.file_exists(filename)
                if 
    source == "CLICK" then file_exists true end
                table
    .insert(existtostring(file_exists))
                
    wave 1
            end
            
    if source == "MIDI" then wave 1 end
        end
    end
        
    ---------------------------------------------------
    function 
    frz()
        
    local t = {}
        for 
    0reaper.CountTrackMediaItems(track) - do
            
    local item reaper.GetTrackMediaItem(tracki)
            
    local take reaper.GetActiveTake(item)
            if 
    take then
                local src 
    reaper.GetMediaItemTake_Source(take)
                
    source reaper.GetMediaSourceType(src"")
                if 
    source == "RPP_PROJECT" then source "RPP" end
            
    else
                
    source "EMPTY"
            
    end
            table
    .insert(tsource)
        
    end
        local c 
    table.concat(types)
        for 
    keyval in pairs(t) do
            
    local finds c:find(val)
            if 
    finds then wave break end
        end
        
    if not wave then return end
        local retval
    chan reaper.GetUserInputs("Channels"1input_msg'')
        
    chan tonumber(chan)
        if 
    chan == 1 then
            reaper
    .Main_OnCommand(409010) -- freeze to mono
        
    elseif chan == 2 then
            reaper
    .Main_OnCommand(412230) -- freeze to stereo
        
    elseif chan == 3 then
            reaper
    .Main_OnCommand(408770) -- freeze to multichannel
        
    else
            return
        
    end
    end
        
    ---------------------------------------------------
    function 
    Ident(bool)
        
    local t = {}
        
    local ident
        
    for line in track_chunk:gmatch('[^\n\r]+') do
            
    fr line:match('FREEZE %d.+')
            if 
    fr then table.insert(tfrend
        end
        local item_count 
    reaper.CountTrackMediaItems(track)
        for 
    #t - item_count, #t - 1 do
            
    local pos_len t[k+1]:match('%d.+%s'):gsub(" ""$")
            
    pos_len pos_len:sub(1#pos_len - 1)
            
    local pos pos_len:match('(.*($))')
            
    pos = ('%.4f'):format(pos:sub(1#pos - 1))
            
    local len pos_len:match('(($).*)')
            
    len = ('%.4f'):format(len:sub(2))
            
    local item reaper.GetTrackMediaItem(track#t + item_count)
            
    local it_pos = ('%.4f'):format(reaper.GetMediaItemInfo_Value(item"D_POSITION"))
            
    local it_len = ('%.4f'):format(reaper.GetMediaItemInfo_Value(item"D_LENGTH"))
            if 
    tonumber(pos) == tonumber(it_pos) and tonumber(len) == tonumber(it_lenthen
                ident 
    true
            
    else
                
    ident false
                reaper
    .MB(err_msg"Error"0)
                return
            
    end
        end
        
    return ident
    end

    function unfrz()
        
    reaper.PreventUIRefresh(-1)
        
    reaper.SelectAllMediaItems(00)
        for 
    0reaper.CountTrackMediaItems(track) - do
            
    local item reaper.GetTrackMediaItem(tracki)
            
    reaper.SetMediaItemSelected(item1)
            
    reaper.Main_OnCommand(404400) -- set offline
        end
        local con 
    table.concat(exist)
        
    local not_found tostring(con):find("false")
        if 
    not_found and source ~= "RPP" then
            local dialog 
    reaper.MB(nf_msg"Warning"4)
            if 
    dialog == 6 then
                reaper
    .Main_OnCommand(reaper.NamedCommandLookup("_S&M_DELTAKEANDFILE2"), 0)
                
    reaper.Main_OnCommand(416440) -- unfreeze
            
    else
                
    reaper.SelectAllMediaItems(00)
            
    end
        
    else
            
    reaper.Main_OnCommand(reaper.NamedCommandLookup("_S&M_DELTAKEANDFILE2"), 0)
            
    reaper.Main_OnCommand(416440) -- unfreeze
        end
        reaper
    .PreventUIRefresh(1)
    end
        
    ---------------------------------------------------
    function 
    Main()
        
    local sel_track reaper.CountSelectedTracks(0)
        if 
    sel_track ~= 1 then return end
        local freeze 
    reaper.BR_GetMediaTrackFreezeCount(track)
        if 
    freeze ~= 0 then
            get_sources
    ()
            if 
    wave == 1 then
                local dialog 
    reaper.MB(unfrz_msg"Unfreeze"3)
                if 
    dialog == 6 then
                    Ident
    (bool)
                    
    unfrz()
                elseif 
    dialog == 7 then
                    frz
    ()
                
    end
            
    else
                
    reaper.Main_OnCommand(416440) -- unfreeze
            end
        
    else
            
    frz()
        
    end
    end

    Main
    ()
    Выражаю благодарность @@Michael за помощь и подсказки.
     
    Последнее редактирование: 12 дек 2017
    Buyan и Maestro Sound нравится это.
  45. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    @CerberPic, ЗДОРОВО. Мое видение, лучше убрать все всплывающие запросы сделать три варианта моно/стерео/multi (редко фризиться в моно, в основном Vsti в стерео). На выход из фриза убрать запрос на повторный фриз он незачем. (Проще нажал скрипт, если трек не зафризен - то зафризеть его, а если зафризен разфризеть) Операции с зафризеным треком, лучше не производить кроме как добавления в FX нового плагина и то в исключительных мерах).При разморозке копировать добавленные Fxсы, и добавлять их в цепочку размороженного. Работа с несколькими выделенными тоже желательна но там Александр Олейник говорил есть заминка (типа что не успевает разморозка за скоростью роботы скрипта ---не помню точно)
     
    Последнее редактирование: 11 дек 2017
  46. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Сделаю отдельную версию. Лично я частенько фрижу в моно определённые треки.
    Это, конечно, многое упрощает. Но многократная заморозка - это одна из главных фишек риперовского фриза и может быть очень полезной на слабых машинах. Поэтому я предусмотрел и такой вариант. В принципе, чем он мешает? Захотели расфризить - жмите "да", если передумали - "отмена". Конечно, кнопка "нет" может ввести в заблуждение, особенно если работать в спешке и не читать сообщение в диалоге.
    Они при разморозке же вроде бы и так никуда не деваются.

    По поводу работы с несколькими треками - я пока не знаю, как это реализовать. Если и возможно, то только последовательно, поскольку проверка исходников и сама разморозка происходит в цикле на один трек.
     
    Последнее редактирование: 11 дек 2017
    Maestro Sound нравится это.
  47. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Да протупил

    Да протестил и действительно прикольно. Но все же ходелось бы резные варианты МultiFreeze (с запросами) и SingleFreez (робота в два клика) А так Браво!!!!!!!!!!
     
  48. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Maestro Sound нравится это.
  49. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    @CerberPic, Спасибо Замечательно. Я сделал себе 4 варианта
    Вот еще бы к Вашей коллекции smart freez-unfreez Vsti Instrument (only)...........
     
    Последнее редактирование: 12 дек 2017
  50. Death Buster

    Death Buster Member

    Регистрация:
    28 сен 2012
    Сообщения:
    61
    Симпатии:
    4
    Пол:
    Мужской
    Род занятий:
    Звукорежиссура. Аранжировка. Запись.
    Адрес:
    Санкт-Петербург
    Ищу скрипт, который поместит Edit cursor в конец Time Selection или в конец лупа.

    Так же быть может кто то встречал экшн, который притянет Edit Cursor к ближайшей Grid Line, если курсор стоит не на ней. Но если курсор стоит четко на Grid Line, то экшн его не двигает.
     

Поделиться этой страницей