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

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

  1. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    Народ подскажите пожалуйста что я делаю не правильно? первое действия срабатывает ,а второе нет
    PHP:
    reaper.PreventUIRefresh(1)
      
    reaper.Undo_BeginBlock() --call to start a new block
    ---------------------------------------------------------
        
    toggle_state reaper.GetToggleCommandState(40296) -- получаем 0 если отключенно и 1 если включенно
        
    if toggle_state ~= 0 then


    -----------------------------------------------------------
            
    ComandID 40296   -- TrackSelect all tracks
            reaper
    .Main_OnCommand(ComandID,0)  
            
    ComandID "_NF_BYPASS_FX_EXCEPT_VSTI_FOR_SEL_TRACKS" --SWS/NFBypass FX (except VSTi) for selected tracks
            reaper
    .Main_OnCommand(reaper.NamedCommandLookup(ComandID),0)
            
    ComandID 40297   -- TrackUnselect all tracks
            reaper
    .Main_OnCommand(ComandID,0)
    ---------------------------------------------------------------------------------------------------------------
        else -- 
    в противном случае

    ---------------------------------------------------------------------------------------------------
            
    ComandID 40296   -- TrackSelect all tracks--
            
    reaper.Main_OnCommand(ComandID,0)
            
    ComandID "_S&M_FXBYPALL3" --SWS/S&MUnbypass all FX for selected tracks
            reaper
    .Main_OnCommand(reaper.NamedCommandLookup(ComandID),0)
            
    ComandID 40297   -- TrackUnselect all tracks
            reaper
    .Main_OnCommand(ComandID,0)
    ---------------------------------------------------------------------
        
    end
      

    ------------------------------------------------------------------------------------------------------
      
    reaper.Undo_EndBlock("Bypass all FX (except VSTi) for all tracks",1)
    reaper.PreventUIRefresh(1)
     
  2. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    @Archchie, для начала у Экшина 40296 нет State -
    toggle_state при любых условиях будет = -1 и ни когда ни 0 ни 1
    Если в Экшинах, в графе State на против Экшина нет on или off - то по такому экшину состояние получить нельзя.

    Да и вообще - какой-то безсмысленный скрипт.
    Даже если бу у Экшина 40296 был фидбэк по состоянию, что вы хотели сделать?
     
    Последнее редактирование: 8 дек 2017
  3. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    Уже всю голову сломал ! может подскажете? скажете! как его доделать что бы toggle заработал
     
  4. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Так напишите ЧТО вы хотите сделать????
    Пока я вижу полную безсмыслицу, даже если бы у Экшина 40296 было состояние.
    Опишити русским языком что хотите, тогда поясню как.
     
  5. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    Это скрипт забайпасить все FX в проекте разбайпасить все FX за исключением VST i, но это не важно ,мне нужен не скрипт ,а я просто хочу понять смысл ,не могу понять как работать с этим Toggle.Много где надо сделать Toggle путем совмещения двух трех скриптов ,а я не могу понять как
     
    Последнее редактирование: 8 дек 2017
  6. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Так в том то и дело, что ВАЖНО!
    Нет универсального Toggle, вы написали ПОЛНЕЙШУЮ логическую билиберду и пытаетесь в чём-то разобраться - НЕ РАЗБЕРЁТЕСЬ!
    Условия в начале нужно самому себе составить и пояснить, а потом садиться за скрипт.
    Хотите понять как писать скрипты с условиями else - ставьте КОНКРЕТНУЮ задачу и её решайте.

    Ещё раз спрошу - что должен делать скрипт?
    Вот это вот пояснение -
    НИ О ЧЁМ!
    Условия пишутся например так -
    Если:
    - Все FX в проекте находятся в состоянии Unbypass за исключением VSTi (их состояние не проверять)
    То:
    - сделать всем FX на всех треках проекта Bypass за исключением VSTi (их состояние не проверять)
    В противном случаи (т.е. противоположном изложенному в условии Если):
    - сделать всем FX на всех треках проекта Unbypass за исключением VSTi (их состояние не проверять)

    Если нужно сделать именно ЭТО - могу сделать такой скрипт с пояснениями, но просто не будет!
    Хотя, если нужно вообще ВСЕ FX на ВСЕХ треках, то наверное можно и по простому.
     
  7. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    Сделайте пожалуйста.
     
    Последнее редактирование: 8 дек 2017
  8. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    А если на одном треке FX-ы (не VSTi) в байпасе, а на другом в анбайпасе - что скрипт должен делать?
     
  9. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    отключить остальное ,включить ВСЁ
     
  10. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    ни чего опять не понял :(
    Какие такие "остальные", что такое "ВСЁ"?????

    Ещё раз спрошу с картинкой, что скрипт должен сделать на каждом из треков -
    2017-12-08_144133.png
     
  11. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    (клик off, клик on) если нажимаем off он отключает все остальное что включенно, кликаем on включает ВСЕ ВСЕ VST которые есть (не обращая внимания, что было раньше)
     
  12. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Ещё раз спрашиваю - что ОСТАЛЬНОЕ????
    ну чтож так тяжело то всё ? :(

    У вас сформировалось в голове какое-то очень не верное представление о логике работы функции toggle, которая управляет ни одним каким-то состоянием, а целой группой.
    Если речь идёт, например о - Show/hide video windows - что тут делает toggle предельно ясно - один раз вызвали экшин - он опросил состояние окна видео, если окно видимо - закрыл его, если не видимо - открыл.
    А что прикажете делать Функции в режиме toggle если она работает с множеством треков, на которых может быть самое разное состояние?
    Если ни каких дополнительных условия не написать скрипту, то в режиме toggle он забайпасенные FX-ы на треке будет делать анбайпас, а анбайпасенные - байпасить.
    Сомневаюсь, что вы именно такого хотите.
     
  13. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    @Aleksandr Oleynik, Есть в проекте 10 FX Bypass,10 FX Unbypass нажимаем на кнопку делается 20 FX Bypass(то есть, все), нажимаем еще раз делается 20 Unbypass
     
    Aleksandr Oleynik нравится это.
  14. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Ура!
    ОК!
    Это в самом деле простое условие без нюансов, но есть нюанс с точки зрения самого скрипта - я не знаю как сделать для срипта state, может кто-то другой знает (как-то обсуждали).
    Но можно использовать state так называемых Dummy экшинов.
    Я сделаю с пояснениями!
     
    Последнее редактирование: 8 дек 2017
  15. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    @Aleksandr Oleynik, А вообще в скриптах можно делать типа как ---step---в cycle action ,набор команд (что то там) набор команд
     
  16. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Можно, напишу - поймёте.
    Но лучше использовать совсем другой подход -
    при запуске скрипта не его (или того-же привязанного Dummy) state опрашивать и тупо делать что-то противоположное тому, что скрипт делал в прошлый раз, а Рипер опрашивать на предмет ключевых состояний и что-то делать в зависимости от этих ответов.
    Тут нужно не писать, а говорить - долго объяснять.
     
  17. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    22
    Пол:
    Мужской
    @EUGEN27771, @@Michael, @gazzz
    Вот кусок скрипта, в котором затычка. Возможно, это из-за того, что я как-то неправильно произвожу чтение из файла и запись в него?
    PHP:
    res_path string.gsub(reaper.GetResourcePath(), [=[\]=], [=[\\]=])
    track reaper.GetSelectedTrack(00)

    function 
    unfrz()
        
    item reaper.GetTrackMediaItem(track0)
        
    take reaper.GetActiveTake(item)
        
    source reaper.GetMediaItemTake_Source(take)
        
    proj_name string.gsub(reaper.GetProjectName(0""), ".RPP""")
        
    filename string.gsub(reaper.GetMediaSourceFileName(source""), proj_name.."_freeze_""")
      
        
    settings io.open(res_path..[[\\Freeze_data.txt]])
        
    text settings:read()
        
    settings:close()
        
    settings io.open(res_path..[[\\Freeze_data.txt]], "w")
        
    finds string.find(tostring(text), filename1true)
        if 
    finds then
            sss 
    string.sub(tostring(text), tonumber(finds), tonumber(finds) + #filename - 1)
            
    new_text string.gsub(tostring(text), sss"")
            
    settings:write(new_text)
        else
            
    settings:write(text)
        
    end
        settings
    :close()
      
        
    reaper.SelectAllMediaItems(00)
        
    reaper.SetMediaItemSelected(item1)
        
    reaper.Main_OnCommand(reaper.NamedCommandLookup("_S&M_DELTAKEANDFILE2"), 0)
        
    reaper.Main_OnCommand(416440) -- unfreeze
        reaper
    .UpdateArrange()
    end
    Я понимаю, я там просто в качестве примера так написал.
     
  18. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    @Archchie,
    PHP:
    reaper.Undo_BeginBlock() --call to start a new block
    ---------------------------------------------------------
    toggle_state reaper.GetToggleCommandState(reaper.NamedCommandLookup("_S&M_DUMMY_TGL1"),0) -- получаем 0 если отключено и 1 если включено

    if toggle_state == 0 then
      
    -----------------------------------------------------------
      
    ComandID 40296 -- TrackSelect all tracks
      reaper
    .Main_OnCommand(ComandID,0)
      
    ComandID "_NF_BYPASS_FX_EXCEPT_VSTI_FOR_SEL_TRACKS" --SWS/NFBypass FX (except VSTi) for selected tracks
      reaper
    .Main_OnCommand(reaper.NamedCommandLookup(ComandID),0)
      
    ComandID 40297 -- TrackUnselect all tracks
      reaper
    .Main_OnCommand(ComandID,0)

      
    ComandID "_S&M_DUMMY_TGL1" --
      
    reaper.Main_OnCommand(reaper.NamedCommandLookup(ComandID),0)
      --------------------------------------------------------------------------------------------------
    else -- 
    в противном случае
      
    --------------------------------------------------------------------------------------------------
      
    ComandID 40296 -- TrackSelect all tracks--40297
      reaper
    .Main_OnCommand(ComandID,0)
      
    ComandID "_S&M_FXBYPALL3" --SWS/S&MUnbypass all FX for selected tracks
      reaper
    .Main_OnCommand(reaper.NamedCommandLookup(ComandID),0)
      
    ComandID 40297 -- TrackUnselect all tracks
      reaper
    .Main_OnCommand(ComandID,0)

      
    ComandID "_S&M_DUMMY_TGL1" --
      
    reaper.Main_OnCommand(reaper.NamedCommandLookup(ComandID),0)
      ---------------------------------------------------------------------
    end

    ----------------------------------------------------------------------------------------------------
    reaper.Undo_EndBlock("Bypass all FX (except VSTi) for all tracks",1)
    reaper.PreventUIRefresh(1)
    Только тут VSTi ведь если в байпасе - тоже анбайпасится будут!

    "_S&M_DUMMY_TGL1" - Экшин используется как экшин - пустышка у которого есть состояние
     
    Archchie и Maestro Sound нравится это.
  19. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.321
    Симпатии:
    1.961
    Пол:
    Мужской
    А в чем конкретно проблема? Не могу проверять - что должен делать скрипт и где косяк?
     
  20. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    837
    Симпатии:
    1.258
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    Видимо, анфризить трек и обновлять текстовый файл, где перечислены сурсы рендеров замороженных треков. Делается это конечно же проще, нежели в указанном скрипте.
     
  21. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    22
    Пол:
    Мужской
    @@Michael прав. При заморозке трека скрипт записывает сурсы расположенных на нём айтемов и записывает их в файл. А при разморозке сверяется с файлом, проверяет, есть ли он ещё на диске и (в данной функции) размораживает, удаляет файл фриза и запись о нём в файле.
    Конечно, всё делается проще, но я полез вперёд батьки в пекло с недостаточным объёмом знаний и опыта скриптописания. Но уж раз взялся, хочется добить.
     
  22. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    Вот как раз именно про это недели две-три назад я просил сделать. Фриз и анфриз с удалением замороженых сурсов. Там "камнем" было то что без проверки при анфризе можно было стереть оригинальный сурс если трек не был заморожен.
     
    Последнее редактирование: 8 дек 2017
  23. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    837
    Симпатии:
    1.258
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    При загрузке проекта рипер спросит где исходники, если те были удалены.
    Эта инфа и так есть в проекте.
     
    Последнее редактирование: 8 дек 2017
    CerberPic нравится это.
  24. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    @Aleksandr Oleynik, Спасибо!!!


    С пустышкой все понятно

    Вот этого сразу не заметил, теперь нужен скрипт Unbypass all FX (except VSTi) for all tracks


    Просто иногда делаешь кастом ,а в нем содержится какой либо скрипт и если скрипт переместить или удалить (при уборке в папке например) то кастом перестает работать пока по новой не соберешь(как то недавно убрался в папке,рассортировал все скрипты по под папкам после этого половина кастомов перистали работать),а если этот же кастом собрать в скрипте то ничего не теряется,вот поэтому такой подход у меня .Ну и так потихоньку потихоньку что то новое изучаю, пока как то так потом дальше больше.
     
  25. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    @Archchie, Ровно тоже Если начнешь переносить потом "гусей не собрать"
    --- добавлено 8 дек 2017 ---
    @@Michael, Вот это я понимаю "сменить имидж"
     
  26. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    @Archchie, Я понял о чем Вы ....И Я ТОГО ЖЕ МНЕНИЯ....
     
    Archchie нравится это.
  27. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Ну так..... парни..... учитесь писать скрипты. Я сам не сильно умею, но помогу :)
    --- добавлено 8 дек 2017 ---
    Не, не нужно....
    Нужно просто в скрипт добавить условие - делать всё (и байпас и анбайпас) со всеми FX, кроме инструментов.
    Это будет следующий урок, кстати - от части переходящий от использования Экшинов, к использованию API.
    Будет время сделаю, будет не ясно - поясню....
     
    Maestro Sound нравится это.
  28. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    22
    Пол:
    Мужской
    Меня, кажется, Ваша просьба и сподвигла этим заняться.

    А ведь точно. Не учёл этот момент.
    Как её возможно получить? В API я по фризу нахожу только reaper.BR_GetMediaTrackFreezeCount( track ). Подозреваю, что как-то через chunk трека?
     
  29. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    837
    Симпатии:
    1.258
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    Я не очень понимаю логику того, что ты хочешь сделать. Расфризить и удалить исходники или расфризить и удалить фризы физически, или ещё что-то, из треда непонятно. Айтемы во фризе можно выгрузить например так:
    PHP:
      function eugen27771_GetTrackStateChunk(track)
        if 
    not track then return end
        local fast_str
    track_chunk
        fast_str 
    reaper.SNM_CreateFastString("")
        if 
    reaper.SNM_GetSetObjectState(trackfast_strfalsefalsethen track_chunk reaper.SNM_GetFastString(fast_strend
        reaper
    .SNM_DeleteFastString(fast_str)
        return 
    track_chunk
      end
      
    ---------------------------------------------------
      function 
    GetFreezedItemsData(tr)
        if 
    not tr then return end
        local chunk 
    eugen27771_GetTrackStateChunk(tr)
        
    local t= {}
        
    local freezed_items = {}
        
    local ch_opench_cnt,it_id false0,0
        
    for line in 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
        
    -- compile chunks
          
    for key in pairs(t) do
            
    local ch table.concat(t[key], '\n')
            
    freezed_items[#freezed_items+1]={chunk =ch,
                                              
    pos tonumber(ch:match('POSITION ([%d%.]+)')),
                                              
    len tonumber(ch:match('LENGTH ([%d%.]+)'))}
          
    end
        
    return freezed_items
      end
      
    ---------------------------------------------------
      
    local tr reaper.GetSelectedTrack(0,0)
      
    GetFreezedItemsData(tr)
    ^^ и то это только для первого фриза
     
    Последнее редактирование: 8 дек 2017
    CerberPic нравится это.
  30. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    22
    Пол:
    Мужской
    Расфризить и удалить фризы физически. Спасибо за код, поизучаю.
    И, кстати, @@Michael, не подскажете, как вызвать функцию os.remove() ?
    С помощью неё я хотел производить удаление. Или же удалять лучше SWSовским экшном, как это у меня сейчас?
     
  31. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    837
    Симпатии:
    1.258
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    os.remove() не всегда работает
    PHP:
    path = [[C:\Users\mpl\Desktop\test.txt]]
    cmd 'del /f "'..path..'"'
    os.execute(cmd)
    но лучше через SWS (ибо там предусмотрен предварительный offline сурса, отправление в корзину и всё в таком духе)
     
    CerberPic нравится это.
  32. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    345
    Симпатии:
    169
    Пол:
    Мужской
    хорошо.
     
  33. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Появилось -
    PHP:

    reaper
    .Undo_BeginBlock() --call to start a new block
    ---------------------------------------------------------
    toggle_state reaper.GetToggleCommandState(reaper.NamedCommandLookup("_S&M_DUMMY_TGL1"),0) -- получаем 0 если отключенно и 1 если включенно
    local counttracks 
    reaper.CountTracks(0) -- даёт значение кол-ва треков
    if counttracks == nil then return end -- если треков нетто и ни чего не делать :)
    for 
    i=1counttracks do -- создаём цикл опроса по каждому треку
      local track 
    reaper.GetTrack(0,i-1) -- получаем объект Медиа Трек для каждого порядкового номера трека
      countFX 
    =  reaper.TrackFX_GetCounttrack ) -- для каждого трека получаем кол-во FX-ов на нём
      
    if countFX == nil then return end -- если FX нетто и ни чего не делать :)
      for 
    i=1countFX do -- создаём цикл опроса по каждому FX-у на треке
        instrument 
    reaper.TrackFX_GetInstrumenttrack ) -- если не инструмент текущий FXто получим значение = -1
        
    if instrument ~= i-1 then -- делаем условиечто если индекс FX-а не равен индексу инструментато -
          if 
    toggle_state == 0 then -- тут как и раньшеесли state 0 то делать вот это
            reaper
    .TrackFX_SetEnabled(tracki-1) -- Unbypass FX

            ComandID 
    "_S&M_DUMMY_TGL1" --
            
    reaper.Main_OnCommand(reaper.NamedCommandLookup(ComandID),0) -- переключаем state Dummy Экшина
            
    --------------------------------------------------------------------------------------------------
          else -- 
    в противном случае
            reaper
    .TrackFX_SetEnabled(tracki-10) -- Bypass FX

            ComandID 
    "_S&M_DUMMY_TGL1" --
            
    reaper.Main_OnCommand(reaper.NamedCommandLookup(ComandID),0) -- переключаем state Dummy Экшина
            
    ---------------------------------------------------------------------
          
    end
        end
      end
    end

    ----------------------------------------------------------------------------------------------------
    reaper.Undo_EndBlock("Bypass all FX (except VSTi) for all tracks",1)
    reaper.PreventUIRefresh(1)

    Разбирайтесь, задавайте вопросы.
    Как видите, тут экшинов минимум, всё с использованием API скриптов
    И этот скрипт в общем игнорирует состояние VSTi - в каком они находятся, в таком и остаются!
     
    muzicgrand и Maestro Sound нравится это.
  34. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.321
    Симпатии:
    1.961
    Пол:
    Мужской
    Да, совсем иначе, круто!
    @Aleksandr Oleynik, красиво расписано, если бы все так комментировали...
     
    Maestro Sound нравится это.
  35. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Та нужно себя заставить так делать всегда? Ну я для ребят - чем больше будет "скриптописателей" тем лучше всем?
    Они же (скрипты эти) в начале только страшными кажутся, а как первых десятка два сделал - можно уже и других учить :)
     
  36. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    @Aleksandr Oleynik, Что-то у меня скрипт молчит (не работает и ошибки не пишет. И можно на каждый end рядом, какую строку он закрывает или относится
     
  37. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.321
    Симпатии:
    1.961
    Пол:
    Мужской
    Помните, года 1.5 назад я Вам говорил - чтобы чему-то по-настоящему научиться - нужно начать кого-то учить(из Коэльо, вроде, а он у кого-то другого взял).
    Одно дело понять самому, и совсем другое дело объяснить другому на понятном языке. Когда ты не можешь объяснить - по сути, ты не понимаешь до конца.
    Ты только прикоснулся к пониманию, и скоро забудешь - так устроен мозг, по крайней мере в большинстве случаев. Надо говорить или писать, хотя бы для себя.
    И когда будет все испробовано, и ты говоришь себе, да, теперь, наконец, я могу объяснить все - находится куча других тем, в которых ты нулевый.
    Ты опять берешь весла в руки и изучаешь. Этот процесс бесконечен, в этом и кайф.
    Самая главная проблема - так можно сдохнуть с голоду, ты же не кот, чтобы поймать какую-то хренову птицу/мышь и забыть.
     
    Buyan, CerberPic и Trasher нравится это.
  38. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    22
    Пол:
    Мужской
    Так по вертикали смотрите, всё наглядно же:
    2017-12-09_013622.png
     
    Maestro Sound и Aleksandr Oleynik нравится это.
  39. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Согласен
     
  40. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    Значит работает :)

    @CerberPic картинку правильную сделал.
    Я использую редактор Atom -
    https://atom.io/
    с модулем для LUA синтаксиса -
    language-lua
    В нём шоткатами очень удобно автоматом синтаксис править, коментировать строки и многое другое.
    Пишете начало стандартной функции, например if - а он вам всю конструкцию сразу предлагает
    нажимаете Shift+Control+I - а он вам красиво все строки табулирует и линии связей рисует -
    2017-12-09_010326.png
     
  41. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.321
    Симпатии:
    1.961
    Пол:
    Мужской
    Дядьки говорят, что лучше все-таки пробелы ставить после "=+-" и т.п. Читается лучше. А после скобок пробелы наоборот, не ставить.
    Но это индивидуально.
    ============
    П.С. Я не посмотрел полностью, у Вас все правильно, прямо как должно быть.
     
  42. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    Нашел причину проверял с REaEq и вот недоумение почему он записался в Vsti/ А-га долб.... балбес вообщем я сам его туда поставил
     

    Вложения:

  43. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    А я и не знал, что так можно :)
     
    Maestro Sound нравится это.
  44. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    Можно Когда переименование делаешь, можно поставить галочку в Instrument
     
  45. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    837
    Симпатии:
    1.258
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    Алгоритм примерно может быть такой:
    - в chunk трека найти последний кусок <FREEZE ...>;
    - найти замороженные позиции и длины айтемов, находящихся в этом куске (строка FREEZE);
    - найти существующие айтемы на треке и с такими длинами и позициями;
    - найти исходники этих айтемов, запомнить, например в таблицу;
    - разморозить трек. Всё, что было в последнем куске <FREEZE ...>, уйдёт в трек. Замороженные айтемы удалятся;
    - выгнать всё аудио в проекте в оффлайн;
    - пройтись по запомненным исходникам рендеров заморорозки и удалить;
    - вернуть онлайн всё аудио.

    Поскольку TrackFX_GetInstrument() возвращает индекс первого инструмента, а инструментов может быть несколько, то можно использовать что-то в духе
    PHP:
      function IsInstrument(trackfx) return ({reaper.TrackFX_GetFXNametrackfx'' )})[2]:match('[%u]+i%:')~= nil end

      tr 
    reaper.GetSelectedTrack(0,0)
      
    is_FX_instrument IsInstrument(tr,0)
    ...и выйти из цикла, не проверив остальные треки

    P.S. Кстати, последняя версия mpl_Bypass all FX except instruments on selected tracks запоминает состояния FX до байпаса
     
    Последнее редактирование: 9 дек 2017
    CerberPic и Aleksandr Oleynik нравится это.
  46. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
  47. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    837
    Симпатии:
    1.258
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    То же самое, что писать в reaper-extstate.ini разного рода инфу в связке "раздел-ключ-значение".
    Для проекта это раздел в конце RPP в блоке <EXTSTATE...>. Для проекта при превышении определённого лимита знаков, информация автоматом декодируется в base64. Для глобального ExtState многостроковость ограничена ввиду структуры ini файла.
     
    Последнее редактирование: 9 дек 2017
  48. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    Друзья возможно ли скриптом сделать пошаговость действий от 3 и до 10 допустим как циклэкшинах через step. первое нажатие - первое действие ...второе нажатие - второе действие (то есть скрипт должен помнить сколько раз его нажали вовремя сессии?)
     
  49. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    16.865
    Симпатии:
    9.136
    Пол:
    Мужской
    Адрес:
    Киев
    @Maestro Sound, ну вот при помощи ExState и можно
    У меня только что-то пока не выходит с синтаксисом...
     
    Maestro Sound нравится это.
  50. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    503
    Симпатии:
    54
    Я догадался потому сразу же и спросил для подтверждения Поменял себе все свои Цыклэкшины, на скрипты по Вашему примеру Через пустышку "_S&M_DUMMY_TGL1" а вот теперь нужно три четыре действия сменных на одной кнопочке
     

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