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

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

  1. Maestro Sound

    Maestro Sound Active Member

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

    CerberPic Member

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

    @Michael Well-Known Member

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

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    247
    Симпатии:
    52
    Пол:
    Мужской
    @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)
     
  5. Archchie

    Archchie Active Member

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

    @Michael Well-Known Member

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

    YuriOl Active Member

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

    CerberPic Member

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

    Вложения:

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

    YuriOl Active Member

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

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.257
    Симпатии:
    7.871
    Пол:
    Мужской
    Адрес:
    Киев
    Не всегда просто найти нужную 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
  11. CerberPic

    CerberPic Member

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

    Maestro Sound Active Member

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

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

    Aleksandr Oleynik Well-Known Member

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

    Aleksandr Oleynik Well-Known Member

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

    igor13r New Member

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

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

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

    Maestro Sound Active Member

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

    CerberPic Member

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

    igor13r New Member

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

    Вложения:

  20. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

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

    CerberPic Member

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

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

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

    igor13r New Member

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

    Aleksandr Oleynik Well-Known Member

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

    Aleksandr Oleynik Well-Known Member

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

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    35
    Симпатии:
    9
    Пол:
    Мужской
    Потестите что получилось. Скрипт 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 нравится это.
  27. Maestro Sound

    Maestro Sound Active Member

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

    CerberPic Member

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

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

    Maestro Sound Active Member

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

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

    CerberPic Member

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

    Maestro Sound Active Member

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

    Death Buster Member

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

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

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    247
    Симпатии:
    52
    Пол:
    Мужской
    Подскажите пожалуйста код: (не могу найти).Если не какая трек-папка не выбрана (не выделена) то скрипт дальше не выполнять,
    например:

    PHP:
    --если никакой трек не выбран то скрипт дальше не выполнять
    selected_Track 
    reaper.GetSelectedTrack(0,0)
    if 
    selected_Track ~= nil then
    end
     
    Последнее редактирование: 13 дек 2017
  34. belovw

    belovw Well-Known Member

    Регистрация:
    22 апр 2009
    Сообщения:
    4.960
    Симпатии:
    3.157
    Род занятий:
    Звукорежиссура
    Адрес:
    RK Almaty
    action: Go to end of time selection
    action: Go to end of loop
    _____________________

    script by me2beats: Move cursor to nearest grid division
    _____________________

    Поиском бьётся за 10 минут. С вас Коньяк. ))
     
  35. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    411
    Симпатии:
    32
    @CerberPic,
    С Folder треками не работает
     
  36. Death Buster

    Death Buster Member

    Регистрация:
    28 сен 2012
    Сообщения:
    60
    Симпатии:
    3
    Пол:
    Мужской
    Род занятий:
    Звукорежиссура. Аранжировка. Запись.
    Адрес:
    Санкт-Петербург
    Экшены типа "Go to" перебрасывают play cursor и при использовании кастом экшна, в котором присутствует такое действие проигрывание трека скачет туда-сюда, что вовсе не желательно в моем случае(

    Есть Script: me2beats_Move cursor to start of loop.lua
    он работает как нужно, но нет такого же, чтобы перемещал в конец!(

    Может кто подскажет, как можно скорректировать существующий вышеупомянутый скрипт?
     
  37. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @CerberPic, Я вот тоже озадачился проблемой фризинга, интересная тема.

    Опишите детально пожалуйста, что делает ваш скрипт, в чем его особенность?

    В общем неплохо было-бы собрать и систематизировать все желаемые задачи, которые ожидаются от фризинга пользователями, потом поэтапно попробовать реализовать какое-то универсальное решение.

    Я скрипты в рипер изучаю недавно, мало понимаю, но предыдущий опыт подсказывает, что должно быть какое-то простое и оригинальное решение. Например, в lua вроде есть возможность выполнять внешние приложения, точно не знаю работает-ли это в окружении рипера. Если да, т с файлами можно делать все что угодно посредством командной строки. Но важно понимать на каком этапе возникают проблемы с кириллицей. Если есть возможность запустить например внешний батник, то ему можно передать имена в бинарном виде, а там преобразовать их и произвести необходимые операции. Ну в общем ход мыслей ясен...
     
    Последнее редактирование: 12 дек 2017
  38. Слава

    Слава Member

    Регистрация:
    22 ноя 2006
    Сообщения:
    65
    Симпатии:
    19
    А мне они (пресеты) и не только для обучения пригодятся. Да и не только мне, полагаю :)
     
  39. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    Вопрос знающим людям. Использую данные экшены:
    SWS/BR: Move closest grid line to mouse cursor (perform until shortcut released)
    SWS/BR: Move closest measure grid line to mouse cursor (perform until shortcut released)
    SWS/BR: Move closest tempo marker to mouse cursor (perform until shortcut released)

    Но они некорректно работают если маркеры имеют свойство Gradually transition tempo to next marker.
    Возможно-ли с помощью скриптов воссоздать аналогичные этим экшенам действия?
    Если да, то подскажите пожалуйста в какую сторону копать. Я пока не нашел API для позиций темпо-маркеров.
     
  40. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.257
    Симпатии:
    7.871
    Пол:
    Мужской
    Адрес:
    Киев
    @Buyan, есть они в API -
    TempoTimeSigMarker
     
    Buyan нравится это.
  41. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @Aleksandr Oleynik, Спасибо! А я искал по запросу TempoMarker и ничего.
    Правда алгоритм вырисовывается не для начального уровня, с позицией мыши работать придется. Боюсь, что так сходу может оказаться и не по зубам мне такая задача. Хотя с другой стороны вопрос наболевший, да и начинать как-то нужно, с чего-то интересного, учится решать наболевшие проблемы)
     
  42. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.257
    Симпатии:
    7.871
    Пол:
    Мужской
    Адрес:
    Киев
    Начинайте, помогу.
     
    Buyan нравится это.
  43. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    35
    Симпатии:
    9
    Пол:
    Мужской
    Да, фолдеры-то я не учёл. Теперь всё должно работать (обе версии во вложении).

    Ну, значит, первая, оригинальная версия делает следующее:
    • При запуске скрипта проверяет, зафрижен трек или нет. Если нет, то выдаёт запрос на желаемое количество каналов. Для моно фриза нужно ввести 1, для стерео - 2 и для многоканального - 3.
    • При запуске для зафриженного трека спрашивает, хотите ли вы разморозить его. Если не хотите размораживать, а хотите заморозить повторно, нужно нажать "Нет". Если передумали вообще что-либо делать, жмите "Отмена". При разморозке файлы фриза с диска удаляются в корзину.
    • Если исходник был удалён или переименован, рипер оповестит об этом при загрузке проекта. Но если один из исходников каким-то образом потерялся во время работы (до закрытия проекта), скрипт при запуске сообщит об этом. (Этот момент не очень корректно отрабатывается при многократном фризе - скрипт ссылается только на первоначальный исходник).
    Вторая версия (та, что no dialog, stereo only) сделана по просьбе @Maestro Sound и работает попеременно - фриз/анфриз. Повторная заморозка не происходит, фризятся треки в стерео. Никаких запросов не выдаётся, это более быстрый вариант.
    Я говорил на эту тему с Михаилом. Он сказал, что удалять при помощи экшна от SWS предпочтительнее, чем командной строкой. Хотя бы потому что там учтены все варианты - вывод в оффлайн, удаление в корзину... Я пробовал оба метода, проблемы с кириллицей возникают в обоих случаях, SWS при этом ещё выдаёт уведомление о том, что файл не был удалён. Вообще работа с консолью посредством lua в рипере организована как-то кривовато, как мне показалось.
    Внешний батник - отдельный исполняемый процесс, отдельный файл, который нужно будет скачивать пользователю для того, чтобы опробовать скрипт, класть в определённую директорию... И неизвестно, к каким дополнительным траблам может привести такой метод. Вопрос: зачем всё это, если можно просто избегать кириллицы в путях?
     

    Вложения:

    Последнее редактирование: 13 дек 2017
    Maestro Sound нравится это.
  44. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    411
    Симпатии:
    32
    @CerberPic, Спасиб

    Я себе сделал все три версии
     
  45. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @CerberPic, Спасибо за описание. Интересно.

    В разумных пределах все может вмещаться в одну командную строку. При необходимости все дополнительные файлы генерируются скриптом и им-же удаляются.

    Как минимум работать будет только на Windows, а это уже немаленькое ограничение.

    Еще со времен MS-DOS привык избегать пробелов и кириллицы)
     
    CerberPic нравится это.
  46. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    411
    Симпатии:
    32
    Подскажите пожалуйста API для перемещения выделенного трека на последний по списку
     
  47. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.257
    Симпатии:
    7.871
    Пол:
    Мужской
    Адрес:
    Киев
    Нет такого.
    На перемещение треков, FX-ов нет ни API ни Экшинов ни стандартных команд.
     
  48. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    Спасибо! Уже начал осваивать потихоньку. Закончил эксперименты с курсором, перехожу к маркерам.
    К стати вопрос мучающий меня с самого начала - Скрипт должен работать циклически пока нажата клавиша. Имеется-ли такая возможность, опрашивать состояние какой-либо клавиши? Хотя нет, неудобно... Как принято реализовывать подобного рода вещи?
    Сейчас я по удержанию назначенной клавиши получаю позицию мыши, просто посредством многократного запуска скрипта. Чего в принципе может оказаться и достаточно для данного рода задачи.

    Ух... страшно. Все те административные скрипты, которые я когда-либо писал, детский сад по сравнению с этим. Никогда не доводилось работать с мышкой, позициями, интерфейсами и прочем. Но при этом до ужаса интересно.
     
  49. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    411
    Симпатии:
    32
    Приехали!!!....... а говорили что скриптом все можно:)
     
  50. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.257
    Симпатии:
    7.871
    Пол:
    Мужской
    Адрес:
    Киев
    @Buyan, опишите подробнее что должен скрипт делать.
    В общих чертах есть два типпа скриптов - разово срабатывающих и с дефером.
    Те, что разово срабатывают, они просто что-то делают в зависимости от конкретной ситуации при их срабатывании - т.е. - опрасили Рипер по нужным параметрам и в зависимости от их состояния что-то сделали.
    С дефером - работает либо пока его не остановит пользователь, либо пока не наступит какое то событие.
    Ну вот собственно работающий скрипт и ждет всяких событий и на них реагирует.
    --- добавлено 13 дек 2017 ---
    Можно. Вы же не об этом спросили, а об API.
    API такого нет, но это не значит что само действие нельзя сделать.
     

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