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

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

  1. Buyan

    Buyan Member

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

    CerberPic New Member

    Регистрация:
    17 фев 2017
    Сообщения:
    28
    Симпатии:
    9
    Пол:
    Мужской
    @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 в 04:04
  3. Supa75

    Supa75 Active Member

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

    Archchie Member

    Регистрация:
    24 окт 2017
    Сообщения:
    139
    Симпатии:
    20
  5. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

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

    Maestro Sound Active Member

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

    Вложения:

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

    Maestro Sound Active Member

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

    Вложения:

  8. CerberPic

    CerberPic New Member

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

    Aleksandr Oleynik Well-Known Member

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

    Maestro Sound Active Member

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

    Aleksandr Oleynik Well-Known Member

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

    Maestro Sound Active Member

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

    Aleksandr Oleynik Well-Known Member

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

    Maestro Sound Active Member

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

    CerberPic New Member

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

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    346
    Симпатии:
    27
    Спасибо
     
  17. Слава

    Слава Member

    Регистрация:
    22 ноя 2006
    Сообщения:
    62
    Симпатии:
    18
    Уважаемые скриптописатели! Т.к. являюсь лишь скрипточитателем, имею к Вам просьбу.
    Есть в рипере такой экшн - 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 в 20:09
  18. Broojacker

    Broojacker Member

    Регистрация:
    4 сен 2010
    Сообщения:
    65
    Симпатии:
    37
    Адрес:
    Киев
    Мне нужен экшн для рендера айтема с 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.
    Есть ли подобный экшн или скрипт? Что то не могу нагуглить.
     
  19. Buyan

    Buyan Member

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

    Слава Member

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

    Aleksandr Oleynik Well-Known Member

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

    Buyan Member

    Регистрация:
    19 апр 2016
    Сообщения:
    60
    Симпатии:
    8
    Пол:
    Мужской
    Род занятий:
    Хобби: Гитара, Флейта, Звукорежиссура.
    Адрес:
    Белая Церковь
    @Слава,
    Да просто нужно научится ими пользоваться. Можно заблокировать в момент записи и прослушивания, что-бы случайно не зацепить. А потом редактировать айтем без сплитов, с помощью тех-же 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 в 21:50 ---

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

    Слава Member

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

    EUGEN27771 Well-Known Member

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

    Слава Member

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

    EUGEN27771 Well-Known Member

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

    Слава Member

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

    CerberPic New Member

    Регистрация:
    17 фев 2017
    Сообщения:
    28
    Симпатии:
    9
    Пол:
    Мужской
    Выручайте, мучаюсь. :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 в 04:12
  29. EUGEN27771

    EUGEN27771 Well-Known Member

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

    gazzz Gazzuar (Goa-trance)

    Регистрация:
    17 янв 2008
    Сообщения:
    161
    Симпатии:
    41
    Адрес:
    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, ""))
    
    
     
  31. @Michael

    @Michael Well-Known Member

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

    Buyan Member

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

    Aleksandr Oleynik Well-Known Member

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

    Archchie Member

    Регистрация:
    24 окт 2017
    Сообщения:
    139
    Симпатии:
    20
    Народ подскажите пожалуйста что я делаю не правильно? первое действия срабатывает ,а второе нет
    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)
     
  35. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

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

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

    Archchie Member

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

    Aleksandr Oleynik Well-Known Member

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

    Archchie Member

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

    Aleksandr Oleynik Well-Known Member

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

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

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

    Archchie Member

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

    Aleksandr Oleynik Well-Known Member

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

    Archchie Member

    Регистрация:
    24 окт 2017
    Сообщения:
    139
    Симпатии:
    20
    отключить остальное ,включить ВСЁ
     
  43. Aleksandr Oleynik

    Aleksandr Oleynik Well-Known Member

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

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

    Archchie Member

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

    Aleksandr Oleynik Well-Known Member

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

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

    Archchie Member

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

    Aleksandr Oleynik Well-Known Member

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

    Archchie Member

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

    Aleksandr Oleynik Well-Known Member

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

    CerberPic New Member

    Регистрация:
    17 фев 2017
    Сообщения:
    28
    Симпатии:
    9
    Пол:
    Мужской
    @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
    Я понимаю, я там просто в качестве примера так написал.
     

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