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

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

  1. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Вау!!!!!!!!!!!! посмотрел скрипт....... а с чего начинали учиться
    ?
     
  2. Microtonic

    Microtonic Любознательный

    Регистрация:
    21 сен 2008
    Сообщения:
    506
    Симпатии:
    108
    Пол:
    Мужской
    Адрес:
    Москва
    Замечена ошибка:
    1. Если в проекте нет маркеров, то выполнение скрипта выдаёт ошибку.
    [​IMG]
     
  3. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    230
    Симпатии:
    73
    Пол:
    Мужской
    Решил объединить два скрипта в один.Скажите что нужно прописать между ними что бы получилось Toggle ?типа цикл экшена.
     
    Последнее редактирование: 3 дек 2017
  4. Kokarev Maxim

    Kokarev Maxim ex cool

    Регистрация:
    13 май 2007
    Сообщения:
    3.958
    Симпатии:
    2.391
    Пол:
    Мужской
    Род занятий:
    freelance, mixing
    Адрес:
    Барнаул
    Это через Cycle Action Editor делается, который в меню Extemsions появляется после установки SWS.
    !Step ставится командой insert step
     
  5. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    230
    Симпатии:
    73
    Пол:
    Мужской
    Я это знаю ,я хочу сделать не Cycle Action ,а тоже самое ,только одним скриптом.
     
  6. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Да вначале как и все, наверное, с анализа чужих скриптов. Потом посмотрел видеоуроки X-Raym'a (с английскими субтитрами на удивление всё понял), почитал некоторые материалы по Lua. Как-то так, постепенно.

    Да, уже тоже заметил, поправил.
     
  7. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @EUGEN27771, Ваш скрипт Freeze selected tracks(only instruments).lua пришелся очень кстати.
    Но обнаружилось некоторое неприятное обстоятельство, Freeze срабатывал через раз. Врезультате анализа алгоритма выяснил, что VSTi не всегда успевает подгрузить сэмплы до начала фриза, после выхода из офлайн-режима.
    Ввиду того, что c lua я еще не знаком, да из скриптами для риппера в целом, пришлось помучатся, покурить документацию и поломать голову.
    Ну в общем проблему исправил и внес еще пару мелких корректировок (получил так-сказать, свой первый опыт скрипто-писательства(скорее скрипто-осквернительства:) для рипер).
    В офaлайн вводятся только те FX которые, стоят после VSTi. Так-как часто перед инструментом могут находится разные FX работающие с MIDI и прочие. Сам VSTi не офлайнится, что и устраняет возникшую проблему.
    Добавил еще одно условие - если VSTi необнаружен на треке, фриз не происходит.

    PHP:
    --[[
      * 
    ReaScript Name:Freeze selected tracks(only instruments)
      * 
    Lua script for Cockos REAPER
      
    AuthorEUGEN27771
      
    Author URIhttp://forum.cockos.com/member.php?u=50462
      
    LicenceGPL v3
      
    Version1.2 (Rebuilding by Byuan 07.12.2017)
      ]]

    ---------------------------------------------
    -- 
    Freeze -----------------------------------
    ---------------------------------------------
    function 
    Freeze(track)
      
    reaper.SetOnlyTrackSelected(track)  -- Select current track only
      
    if reaper.TrackFX_GetInstrument(track)==-1 then  -- If VSTi not existfreezing canceled
      reaper
    .ShowMessageBox"The instrument is not found on selected track.", [[gen_Freeze selected tracks(only instruments)]], )
      return
      
    end   

      
    -- Offline alls FX excepted instruments --------------
      
    reaper.Main_OnCommand(reaper.NamedCommandLookup("_S&M_SELFX1"), 0)  -- select first fx
      
    for fx=1reaper.TrackFX_GetCount(track) do
      if 
    fx>reaper.TrackFX_GetInstrument(track)+1 then
      reaper
    .Main_OnCommand(reaper.NamedCommandLookup("_S&M_FXOFF_SETOFFSEL"), 0) -- Offline only the following FX after VSTi
      end
      reaper
    .Main_OnCommand(reaper.NamedCommandLookup("_S&M_SELFXNEXT"), 0)  -- to next fx
      end

      
    -- Freezeonline all -------------------
      
    reaper.Main_OnCommand(408770)  -- Freeze
      reaper
    .Main_OnCommand(405360)  -- online all fxs
    end

    ---------------------------------------------
    -- 
    Start ------------------------------------
    ---------------------------------------------
    local track_cnt reaper.CountSelectedTracks(0)
    local track_tb = {}
    -- 
    Get sel tracks ------
    for 
    i=1track_cnt do  
      
    track_tb[i] = reaper.GetSelectedTrack(0i-1)
    end
    -- Freeze tracks -------
    reaper.Undo_BeginBlock()
    for 
    i=1track_cnt do
      
    Freeze(track_tb[i])
    end
    -- Restore sel state ---
    for 
    i=1track_cnt do
      
    reaper.SetTrackSelected(track_tb[i], true)
    end
    reaper
    .Undo_EndBlock("Freeze selected tracks(only instruments)", -1)



     
    Последнее редактирование: 7 дек 2017
  8. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Немного подкорректировал скрипт @Aleksandr Oleynik: свёл всё в один цикл, добавил undo name и включение группировки треков (Enable track grouping), если она выключена.
    PHP:
    local undo "Set tracks symmetrically and add to unused group"
    track_g 0
    stm_n 
    1
    counttracks 
    reaper.CountTracks(0)
    count_selected_tracks reaper.CountSelectedTracks(0)
    if 
    count_selected_tracks == 2 then
        reaper
    .Undo_BeginBlock()
        if 
    reaper.GetToggleCommandState(40771) == 0 then
            reaper
    .Main_OnCommand(407710) -- Enable track grouping
        end
        
    for 1counttracks do
            
    local function error()
                
    reaper.MB("One or both of selected tracks is already in group" "Error"0)
            
    end
           
            local track 
    reaper.GetTrack(01)
            
    local track_sel reaper.IsTrackSelected(track)
            
    stm reaper.GetSetTrackGroupMembership(track"VOLUME_MASTER"00)
            if 
    stm >= stm_n then
            stm_n 
    stm*2
            end

            
    if track_sel == true and stm ~= 0 then
                track_g 
    2
                error
    ()
                break
            
    end
           
            
    if track_sel == true and track_g == 0 then
                reaper
    .SetMediaTrackInfo_Value(track"D_PAN", -1)
                
    reaper.GetSetTrackGroupMembership(track"PAN_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"PAN_SLAVE"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"VOLUME_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"VOLUME_SLAVE"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"MUTE_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"MUTE_SLAVE"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"SOLO_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"SOLO_SLAVE"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"PAN_REVERSE"stm_nstm_n )
                
    track_g 1
            
    elseif track_sel == true and track_g == 1 then
                reaper
    .SetMediaTrackInfo_Value(track"D_PAN"1)
                
    reaper.GetSetTrackGroupMembership(track"PAN_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"PAN_SLAVE"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"VOLUME_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"VOLUME_SLAVE"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"MUTE_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"MUTE_SLAVE"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"SOLO_MASTER"stm_nstm_n )
                
    reaper.GetSetTrackGroupMembership(track"SOLO_SLAVE"stm_nstm_n )
            
    end
        end
        reaper
    .Undo_EndBlock(undo, -1)
    end
     
  9. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    Было-бы очень интересно ознакомится с данным продуктом. Но ссылка таргетируется пост "http://rmmedia.ru/threads/110165/page-19#post-2165444" который не имеет по ходу никакого отношения к..

    Возникает впечатления, что многие сообщения Евгения, возможно и других пользователей в этой ветке, либо мне не видны, либо были удалены. По контексту видно, что они должны были быть, так-как есть много ответов на несуществующие сообщения.
    Прошу простить меня за мой интерес и подозрительность, но я просто немного в растерянности. Хотелось-бы немного ориентироваться в происходящем здесь.
     
    Последнее редактирование: 5 дек 2017
  10. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    @Buyan,
    Вот и я тоже перечитываю ветку и понимаю, что некоторые посты были удалены. С чем это связано, понять не могу.
     
  11. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.857
    Симпатии:
    8.357
    Пол:
    Мужской
    Адрес:
    Киев
    Последнее редактирование: 5 дек 2017
    Alex_HS нравится это.
  12. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @Aleksandr Oleynik, Премного благодарен за ссылку!
    Низкий поклон Евгению, он действительно гений и настоящий энтузиаст. Такую работу проделал. Я без преувеличения восхищен.
    FX Reack - это именно то, что я себе представлял и видел в своих снах, решение многих проблем и... в общем пока одни эмоции. Рипер имеет уникальные возможности в плане роутинга и вообще, но как всегда, возникает вопрос удобства и оперативности управления сложными решениями в прожектах. Одним словом такие скрипты раскрывают всю мощность рипера.
    Приятно, когда на форуме есть фидбэк, радует, что проблемы и вопросы можно решить. Еще раз Вам @Aleksandr Oleynik, спасибо!
     
    Последнее редактирование: 5 дек 2017
    Aleksandr Oleynik нравится это.
  13. CerberPic

    CerberPic Member

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

    Пишу свой вариант скрипта для добавления FX и хочу исключить случайную вставку VSTi на мастер. Для этого прописать условие: если выделен Мастер, то проверить, является ли выбранный FX эффектом или инструментом, и если это инструмент - не добавлять его. Возможно такое?
     
  14. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    795
    Симпатии:
    1.220
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    сравнить с индексом reaper.TrackFX_GetInstrument( track ) или по i в имени (VSTi, AUi, DXi)
     
    Buyan и CerberPic нравится это.
  15. Supa75

    Supa75 Active Member

    Регистрация:
    21 мар 2017
    Сообщения:
    367
    Симпатии:
    76
    Пол:
    Мужской
    Адрес:
    Днепр, Украина
    Мне кажется, есть смысл создать отдельную ветку для скриптописателей типа "Вопросы по созданию скриптов", чтобы вопрошающие могли в отдельной ветке получать от гуру ответы на вопросы типа "Как достать такую-то функцию", "Что добавить в скрипт, чтобы....." и т.д.
     
    Microtonic нравится это.
  16. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    @Supa75, так вроде бы как и эта тема называется "Помогите создать экшн / кастом экшн / скрипт".
     
    Aleksandr Oleynik нравится это.
  17. Microtonic

    Microtonic Любознательный

    Регистрация:
    21 сен 2008
    Сообщения:
    506
    Симпатии:
    108
    Пол:
    Мужской
    Адрес:
    Москва
    я думаю, что идея в разделении: кто-то пишет сам, кто-то просит чтобы ему написали.
     
    Buyan нравится это.
  18. Buyan

    Buyan Member

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

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    @Archchie, попробуйте вот это.
    PHP:
    local undo "Delete all items and envelope points in time selection"

    reaper.PreventUIRefresh(-1)
    reaper.Undo_BeginBlock()
    local start_timeend_time reaper.GetSet_LoopTimeRange(00000)
    if 
    start_time ~= end_time then
        reaper
    .SelectAllMediaItems(00)
        
    reaper.Main_OnCommand(400610) -- Split items at time selection
        local item_count 
    reaper.CountMediaItems(0)
        if 
    item_count ~= 0 then
            
    -- reaper.ShowConsoleMsg("Items: "..tostring(item_count).."\n")
            for 
    0item_count do
                
    local item reaper.GetMediaItem(0i)
                
    local item_pos reaper.GetMediaItemInfo_Value(item"D_POSITION")
                
    local item_len reaper.GetMediaItemInfo_Value(item"D_LENGTH")
                
    local item_end item_pos item_len
                
    if (item_pos == start_time) or (item_end == end_time) or (item_pos start_time and item_end end_timethen
                    reaper
    .SetMediaItemSelected(item1)
                    
    reaper.SetMediaItemInfo_Value(item"C_LOCK"0)
                
    end
            end
            reaper
    .Main_OnCommand(400060) -- Remove items
        end
        local track_count 
    reaper.CountTracks(0)
        for 
    0track_count do
            
    local track reaper.GetTrack(0t)
            
    local env_count reaper.CountTrackEnvelopes(track)
            for 
    0env_count do
                
    local env reaper.GetTrackEnvelope(tracke)
                
    reaper.DeleteEnvelopePointRange(envstart_timeend_time)
                
    local autoitem_count reaper.CountAutomationItems(env)
                for 
    ai 0autoitem_count do
                    
    reaper.GetSetAutomationItemInfo(envai"D_UISEL"11)
                
    end
                reaper
    .Main_OnCommand(reaper.NamedCommandLookup("_BR_SAVE_CURSOR_POS_SLOT_1"), 0) -- Save edit cursor positionslot 01
                reaper
    .Main_OnCommand(406300) -- Go to start of time selection
                reaper
    .Main_OnCommand(420870) -- Split automation items
                reaper
    .Main_OnCommand(406310) -- Go to end of time selection
                reaper
    .Main_OnCommand(420870) -- Split automation items
                reaper
    .Main_OnCommand(reaper.NamedCommandLookup("_BR_RESTORE_CURSOR_POS_SLOT_1"), 0) -- Restore edit cursor positionslot 01
                autoitem_count 
    reaper.CountAutomationItems(env)
                for 
    ai 0autoitem_count do
                    
    reaper.GetSetAutomationItemInfo(envai"D_UISEL"01)
                    
    local autoitem_pos reaper.GetSetAutomationItemInfo(envai"D_POSITION"00)
                    
    local autoitem_len reaper.GetSetAutomationItemInfo(envai"D_LENGTH"00)
                    
    local autoitem_end autoitem_pos autoitem_len
                    
    if (autoitem_pos == start_time) or (autoitem_end == end_time) or (autoitem_pos start_time and autoitem_end end_timethen
                        reaper
    .GetSetAutomationItemInfo(envai"D_UISEL"11)
                    
    end
                end
            end
        end
        reaper
    .Main_OnCommand(420860) -- Delete automation items
    end
    reaper
    .Undo_EndBlock(undo, -1)
    reaper.PreventUIRefresh(1)

    Попробуйте тоже скрипт. Айтемы автоматизации тоже удаляет.

    Так и для тех, кто пишет, есть темы. А здесь те, кто пишет, помогают тем, кто либо вообще не пишет, либо только начинает писать. Как-то так. :)

    Именно.
     
    Последнее редактирование: 7 дек 2017
  20. Supa75

    Supa75 Active Member

    Регистрация:
    21 мар 2017
    Сообщения:
    367
    Симпатии:
    76
    Пол:
    Мужской
    Адрес:
    Днепр, Украина
    именно это я и имел в виду.
     
  21. Archchie

    Archchie Active Member

    Регистрация:
    24 окт 2017
    Сообщения:
    230
    Симпатии:
    73
    Пол:
    Мужской
  22. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.857
    Симпатии:
    8.357
    Пол:
    Мужской
    Адрес:
    Киев
    Не нужно ни чего делить. В этой ветке обсуждается всё, что может быть обсужденно за три-пять постов.
    Если что-то сложнее - отдельная тема.
     
    CerberPic, Buyan и Al Brazy нравится это.
  23. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Друзья знающие! Может если кому не очень трудно создать скрипт вот с таким условием, потом править буду сам под свои нужды. На одном действии --- Если Тулбар закрытый он закрывал ниже указанные и открывал себя. А если он открытый он закрывался и открывал ниже указаный
     

    Вложения:

    Последнее редактирование: 7 дек 2017
  24. Maestro Sound

    Maestro Sound Active Member

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

    Вложения:

  25. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    А чем данный сайкл не устраивает?
     
  26. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.857
    Симпатии:
    8.357
    Пол:
    Мужской
    Адрес:
    Киев
    @Maestro Sound, я вообще не понял о чём речь :(
    Какой тулбар?
     
  27. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Резонный вопрос. Хочу свести цыкл экшины к минимуму и смотреть на скрипты и потихоньку учится
    --- добавлено 7 дек 2017 ---
    Да без разницы но в данном примере это тулбар 14 и 4 чередуются с условиями для других указаных
     
  28. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.857
    Симпатии:
    8.357
    Пол:
    Мужской
    Адрес:
    Киев
    Если в скриптах присутствуют те-же Экшины (стандартные и SWS) - то толку от того, что это не в цикл экшине или в кастом экшине сделанно - НОЛЬ!
    Прелесть скриптов в использовании API функций работающих ПРЯМО с внутренностями Рипера.
     
  29. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Нельзя там сделать условие если у тебя что то выключено, тогда должно включится это.
     
  30. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.857
    Симпатии:
    8.357
    Пол:
    Мужской
    Адрес:
    Киев
    Но в цикл экшинах можно
    Но в общем согласен - если нужна какая-то продвинутая логика - то скрипт писать удобнее и понятнее.
     
    Maestro Sound нравится это.
  31. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    426
    Симпатии:
    33
    Ну это понятно
     
  32. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Вопрос такой: как вообще вызвать функцию os.remove() ?
    Везде пишут, что
    Но у меня в любом случае голый nil. Путь получен, имя файла получено. Не работает даже в связке
    Код:
    os.execute(path)
    os.remove (filename)
    Подскажите кто-нибудь, уже всю голову сломал.


    Если совсем по-простому, то
    PHP:
    toggle_state reaper.GetToggleCommandState(41941) -- получаем 0если тулбар 14 закрыти 1если открыт
    if toggle_state == 0 then -- если тулбар 14 закрытто
        reaper
    .Main_OnCommand(reaper.NamedCommandLookup("id скрипта"), 0) -- закрываем тулбар Х
        reaper
    .Main_OnCommand(reaper.NamedCommandLookup("id скрипта"), 0) -- открываем тулбар 14
    else -- в противном случае
        reaper
    .Main_OnCommand(reaper.NamedCommandLookup("id скрипта"), 0) -- закрываем тулбар 14
        reaper
    .Main_OnCommand(reaper.NamedCommandLookup("id скрипта"), 0) -- открываем тулбар Х
    end
     
  33. Maestro Sound

    Maestro Sound Active Member

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

    Слава Member

    Регистрация:
    22 ноя 2006
    Сообщения:
    65
    Симпатии:
    19
    Уважаемые скриптописатели! Т.к. являюсь лишь скрипточитателем, имею к Вам просьбу.
    Есть в рипере такой экшн - Item: Import item media cues as project markers
    и есть такая опция в Project settings
    [​IMG]
    Так вот, мне нужен скрипт, к-рый бы делал обратное - прописывал маркера в item media cues.
    Понимаю, что запрос несколько туманный, поэтому сейчас более детально.

    Пишу многочасовые начитки. Чтецы ошибаются - я сразу, не останавливая, жму М (маркер) - в результате имею вэйву и 10-20 (30-40 :) ) маркеров в местах ошибок. Потом, когда редактирую, было бы очень удобно, чтоб маркера были привязаны к wav-ке, а не к таймлайну, но такого в рипере нет. С регионами работать не хочу (пробовал - мне не удобно). Уже было отчаялся, но вчера обратил внимание на то, что на картинке выше под спойлером - возможность сохранять маркера в wav. Попробовал как это выглядит на практике. А выглядит это так: если импортнуть wav из таким образом настроенного проекта в рипер (или любой аудиоредактор), на месте маркеров на этой импортированной вэйве увидим media cues. И они уже привязаны к вэйве т.е. если эту вэйву резать, двигать, то media cues двигаются вместе с новыми фрагментамы вэйвы. А это именно то, что нужно для удобного (быстрого) редактирования по маркерам.
    Так а чего ж я хочу? Да всё просто - закончил запись, выделил маркера, запустил скрипт и они (эти маркера) прописались в айтем(ы) уже как media cues. В противном случае нужно жать save и потом ре-импортировать вэйвы обратно в проект.

    Думаю, что запрос реально осуществимый, тем более что обратная операция (Item: Import item media cues as project markers) уже изначально встроена в рипер. Но чукча не писатель, чукча - читатель :) И именно поэтому буду весьма признателен за реализацию такого скрипта.
     
    Последнее редактирование: 7 дек 2017
  35. Broojacker

    Broojacker Active Member

    Регистрация:
    4 сен 2010
    Сообщения:
    111
    Симпатии:
    73
    Адрес:
    Киев
    Мне нужен экшн для рендера айтема с MIDI сенд трека на новый трек с сендом на мастер, уже нагородил такую телегу:

    Custom: Render item from MIDI track
    SWS: Save current track selection
    Script: mpl_Go to first send destination track.lua
    SWS: Mute all receives for selected track(s)
    SWS: Restore saved track selection
    SWS: Unmute all sends from selected track(s)
    Script: mpl_Go to first send destination track.lua
    Xenakios/SWS: Render receives of selected track as stems
    Track: Unmute tracks
    SWS: Unmute all receives for selected track(s)
    SWS: Enable master/parent send on selected track(s)
    SWS/S&M: Cut selected tracks sends
    Track: Go to previous track
    SWS/S&M: Split selected items at time selection, edit cursor (MIDI) or prior zero crossing (audio)

    Остался только экшн который бы удалял или выделял все айтемы кроме тех что в time selection, потому как экшн Xenakios/SWS: Render receives of selected track as stems рендерит весь трек.

    Select all item on selected track outside time selection.
    Есть ли подобный экшн или скрипт? Что то не могу нагуглить.
     
  36. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @Слава, Исключительно практический совет - назначьте на удобный хоткей "Item: Add stretch marker at cursor", используйте stretch markers вместо item media cues.
     
    Последнее редактирование: 7 дек 2017
  37. Слава

    Слава Member

    Регистрация:
    22 ноя 2006
    Сообщения:
    65
    Симпатии:
    19
    @Buyan,
    Как вариант пробовал раньше и их (stretch markers). Не понравилось то, что они - не нейтральные текстовые метки и, помнится, что-то я там случайно понаделал... Уже не помню точно что именно я нахимичил тогда, но отбраковал... Хотя, если никто из здешних талантищей не поможет с преобразованием маркеров в media cue, вероятно, ещё раз попробую поработать с stretch маркерами.
    Спасибо за помощь :)
     
  38. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.857
    Симпатии:
    8.357
    Пол:
    Мужской
    Адрес:
    Киев
    @Слава, без рендера ни как. Метки ведь в wav пишутся.
    Только рендер и переоткрывать
     
  39. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @Слава,
    Да просто нужно научится ими пользоваться. Можно заблокировать в момент записи и прослушивания, что-бы случайно не зацепить. А потом редактировать айтем без сплитов, с помощью тех-же stretch markers.
    Если активировать опцию Set default mouse modifier action for "Media item stretch marker left drag" to "Ripple move stretch markers", то можно использовать stretch markers для вырезания (стрэйчинга до минус-бесконечности) исключительно проблемных участков (между двумя маркерами).

    Если Вы недавно пользуетесь Reaper, то возможно имеют место привычки из предыдущих DAW:) Мне тоже поначалу в рипере было жутко неудобно, но все же я попытался привыкнуть к его логике и организации не прибегая к излишней кастомизации имитирующей другие DAW. Теперь понимаю насколько здесь все логичнее и удобней на самом деле по сравнению... Просто порой методика выполнения типичных операций может оказаться совершенно отличной от методик в других хостах, но более удобной и быстрой впоследствии.
    --- добавлено 7 дек 2017 ---

    Как по мне, то это как-то неэстетично, если для такой мелочи, без которой можно обойтись и тем более есть чем заменить, делать скрипт, который будет рендерить айтем, проверять кучу условий, установлены-ли нужные галочки в настройках, подменять текущий айтем и прочее... Но это исключительно мое мнение;), кому как удобно, тот так и делает.
     
    Последнее редактирование: 7 дек 2017
  40. Слава

    Слава Member

    Регистрация:
    22 ноя 2006
    Сообщения:
    65
    Симпатии:
    19
    Вот именно в этом не уверен... пока. Мне ещё хотелось бы узнать точку зрения EUGEN27771 по этому поводу. И если девствительно только рендер&переоткрыть то, вероятно, буду идти каким-то другим путём... Но
    моя методика ( :) ) меня устраивает и другие хосты здесь ни при чем. Мне лишь нужно как-то обойти это маленькое (?) неудобство с привязкой маркеров. Стретчинг аудио использую, но не в случае убирания лишнего (ошибочного) слова из предложения. Хотя, может быть, кому-то это и удобно, мне - нет.
    Так что пока жду. И... надежда умирает вместе с нами :)
     
    Buyan нравится это.
  41. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.255
    Симпатии:
    1.909
    Пол:
    Мужской
    1234.gif
     
    Buyan нравится это.
  42. Слава

    Слава Member

    Регистрация:
    22 ноя 2006
    Сообщения:
    65
    Симпатии:
    19
    @Aleksandr Oleynik,
    @Buyan,
    А-а-а!!! Я так и думаль!!!
    @EUGEN27771,
    Что это, прямая запись в файл?
    Т.е. рендер\ре-импорт не обязателен?
     
  43. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.255
    Симпатии:
    1.909
    Пол:
    Мужской
    Да, маркеры пишутся в файл напрямую. Но это только тестовый скрипт.
     
    Buyan нравится это.
  44. Слава

    Слава Member

    Регистрация:
    22 ноя 2006
    Сообщения:
    65
    Симпатии:
    19
    Так, ребята, кажись я офигенно протупил...
    Только что ещё раз проверил всю процедуру:
    в Project settings включил опцию сохранять маркера;
    включил запись, нащелкал 3 маркера;
    нажал стоп;
    не сохраняя проект и не рендеря ничего просто сдвинул (и удалил) маркера, а под ними, оказывается, уже есть media cues (!) Для пущей убедительности сразу (не сохраняя проект) открыл файл в вавозавре - да, media cues уже на месте.
    Т.е. файл уже содержит привязанные к нему маркера и его уже можно редактировать...
    Правда, я не уверен, что это тот же результат что и у вас, EUGEN27771, например у вас я вижу текст (M1 M2 M3 M4), а у меня вообще никакого текста...
    Т.е. какой формат того, что вставляет ваш скрипт - media cue, или это какие-то другие маркера. И можно ли те, или другие подвинуть, удалить (в рипере)?
     
    Последнее редактирование: 7 дек 2017
  45. CerberPic

    CerberPic Member

    Регистрация:
    17 фев 2017
    Сообщения:
    69
    Симпатии:
    20
    Пол:
    Мужской
    Выручайте, мучаюсь. :confused:
    Имеется строка с путями вида D:\Audio\File01D:\Audio\File02D:\Audio\File03. Без пробелов, но они и не нужны.
    Скриптом получаю путь D:\Audio\File02, с помощью string.find ищу его в этой строке. Всё нормально, находит и выдаёт индекс 16.
    Далее пытаюсь удалить найденное из строки, но не тут-то было. Уже всё перепробовал, ничего не помогает.
    Делаю так:
    PHP:
    finds string.find (stringfilename1true)
    -- 
    возвращает индекс 16
    string
    .gsub (stringfilename"")
    -- 
    и результата никакого.

    ---- 
    И даже вот так не хочет:

    finds string.find (stringfilename1true)
    sss string.sub (stringtonumber (finds), tonumber (finds) + #filename - 1)
    string.gsub (stringsss"")
     
    Последнее редактирование: 8 дек 2017
  46. EUGEN27771

    EUGEN27771 Well-Known Member

    Регистрация:
    23 апр 2010
    Сообщения:
    2.255
    Симпатии:
    1.909
    Пол:
    Мужской
    @CerberPic, строки в lua неизменяемые, нужно
    str = string.gsub (str, sss, "").
    И не используйте string как переменную - это таблица для строковой библиотеки.
     
  47. gazzz

    gazzz Gazzuar (Goa-trance)

    Регистрация:
    17 янв 2008
    Сообщения:
    235
    Симпатии:
    81
    Адрес:
    Lyubertsy
    странно, в таком скрипт виде работает
    Код:
    reaper.ShowConsoleMsg('')
    
    string = "D:\\Audio\\File01D:\\Audio\\File02D:\\Audio\\File03"
    filename = "D:\\Audio\\File02"
    finds = string.find (string, filename, 1, true)
    -- возвращает индекс 16
    reaper.ShowConsoleMsg(string.."\n"..filename.."\n")
    reaper.ShowConsoleMsg(string.gsub (string, filename, ""))
    
    
     
  48. @Michael

    @Michael Well-Known Member

    Регистрация:
    14 дек 2010
    Сообщения:
    795
    Симпатии:
    1.220
    Пол:
    Мужской
    Адрес:
    Орёл / Москва
    Всё работает вроде
    Код:
    s = [[D:\Audio\File01D:\Audio\File02D:\Audio\File03]]
    s_sub = [[D:\Audio\File02]]
    s = s:gsub(s_sub, '')
     
  49. Buyan

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    80
    Симпатии:
    12
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    Да, сам все проверил. Действительно таким образом cues прописываются в файл и видны в айтеме.
     
  50. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

    Регистрация:
    16 янв 2007
    Сообщения:
    15.857
    Симпатии:
    8.357
    Пол:
    Мужской
    Адрес:
    Киев
    @Archchie, слеш поставьте перед вторым PHP чтоб код не коверкался
     
    Archchie нравится это.

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