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

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

reaper.MB('step'..step+1,'',0) - это по сути проверка работы скрипта, данная функция аналог print в самом LUA - выводит сообщение на опртеделённом этапе скрипта и показывает, что скрипт работает так, как вы хотели.
Естественно, эту строку нужно убирать или коментить (два тире перед строкой) перед сохранение окончательной версии скрипта.
[DOUBLEPOST=1512818541][/DOUBLEPOST]
Понимаю их раздраженность "чайниками"
Это не раздражённость, это понимание того, что помощь идёт в песок.
[DOUBLEPOST=1512818862][/DOUBLEPOST]
и задавайте вопросы вида "как работает", а не "что и куда вставить"
+100500
Михаил, но любое обучение идёт с большей мотивацией, если уже на первых его шагах что-то получается сделать работающее, а не чисто для теории освоения.
Посему - давайте будем терпимее к желающим научиться.
Я, кстати, тоже ПОСТОЯННО учусь...
Вот с Set(Get)State что-то ни как не мог разобраться...
 
Последнее редактирование:
  • Like
Реакции: EUGEN27771 и CerberPic
Попытки запихнуть стандартные Экшины в скрипт и воспользоваться его функционалом только для Логики (if, then, for, do, else.......) - это путь в ни куда.
Ну тут не соглашусь . Зачем учить Азбуку если цель Написать Роман "Война и Мир"? все само собой придет, надоест запихивать стандартные екшины в скрипты и неотвратимо придем к API:) Это точно
 
  • Like
Реакции: Archie's
Ну тут не соглашусь
Можете не соглашаться, но я то этот путь прошёл - тогда хотя бы прислушайтесь к опыту и мнению.
Ведь прям сразу сподкнулись об отсутствие части стандартных Экшинов для VSTi и делать винигрет из Экшинов и API можно только если хорошо понимаешь что делаешь.

Ну и я ведь тоже разделяю негативное отношение Михаила к вашим попыткам тыканий в небо, а значит, на каком то этапе просто не стану им потакать также как и Михаил.
 
Ну тут не соглашусь . Зачем учить Азбуку если цель Написать Роман "Война и Мир"? все само собой придет, надоест запихивать стандартные екшины в скрипты и неотвратимо придем к API Это точно
Полностью согласен! сначала с условиями всякими в голове устаканится ,а потом и потихоньку экшены из скриптов начинать убирать ,так понимание и приходит,а если все и сразу начинаешь пихать в голову ,то просто путаница получается и вообще ничего не понимаешь.
 
Вот видите Вы прошли, а нам не разрешаете
Почему же не разрешаю?
Я вам скрипт выложил первый (ущербный) на чисто Экшинах и логических функциях.
Но ПОТОМ выложил на API - и тишина ----- так Не Пойдёт! :)
 
Подскажите, есть ли возможность вывода диалогового окна, но не с OK/Cancel, а со своими параметрами?
К примеру, чтобы при запуске скрипта для фриза выскакивал диалог с вариантами Mono, Stereo, Multichannel.
А ещё просто интересно, чем reaper.MB( msg, title, type ) отличается от reaper.ShowMessageBox( msg, title, type )? По всему видно, что это функции-близнецы, а также что предпочтение больше отдаётся MB. Есть ли какие-то глобальные различия в работе этих функций?
 
Идентичны.
Касаемо кастомных кнопок - только свой интерфейс (gfx) или расширение.
 
Последнее редактирование:
  • Like
Реакции: CerberPic
@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 i = 1,5 do --increase               
             ComandID = 40155 reaper.Main_OnCommand(ComandID,0)--Peaks: Increase peaks view gain               
         end   
    elseif step == 1 then     
         for i = 1,5 do --increase               
                   ComandID = 40155 reaper.Main_OnCommand(ComandID,0) 
         end   
    elseif step == 2 then   
         for i = 1,5 do --increase               
                   ComandID = 40155 reaper.Main_OnCommand(ComandID,0)             
         end   
    elseif step == 3 then
         for i = 1,5 do --increase               
                   ComandID = 40155 reaper.Main_OnCommand(ComandID,0)           
         end 
    elseif step == 4 then
         for i = 1,5 do --increase               
                   ComandID = 40155  reaper.Main_OnCommand(ComandID,0)
         end       
    elseif step == 5 then                             
         for i = 1,25 do --increase                         
                   ComandID = 40156   reaper.Main_OnCommand(ComandID,0)--Peaks: Decrease peaks view gain                   
         end                                                 
    end
  end   
  cur_key = reaper.GetExtState( 'test', 'step' )
  if not tonumber(cur_key) then cur_key = 0 else cur_key =tonumber(cur_key) end
  if cur_key > steps-1 then cur_key = 0 end
  Action(cur_key)
  reaper.SetExtState( 'test', 'step', cur_key+1, false ) 
     
reaper.Undo_EndBlock("Peak",1)
 
Вы с моим вторым скриптом разобрались?
Вот на него вроде смотришь все описано, все понятно, но опять же непонятно от куда вы это все взяли ?Пока с экшенами делал про всякие if,for, else понял что это такое и как работает,а вот сами команды как вы ищите, по какому принципу? не могу понять.
 
Последнее редактирование:
В зависимости от надобности, поиск идет в API Help (генерируется из редактора соответствующей кнопкой). Многие команды ходовые и интуитивно ищутся по ключевым словам в самом названии команды или описании. Некоторые неочевидны и описаниями обделены, тут спасает поиск глобальный, Гугл, форум кокос, поиск примеров использования в репозиториях ReaPack.
 
Коллеги, мне очень нравится работа - Script: me2beats_Vertical zoom to tracks with items, minimize others.lua, но когда в проекте в папках есть ещё подпапки с VSTi и группами, то работает не корректно, просто всё минимизируя. Когда удаляю эти папки - работает нормально. Это можно подправить?
GIF.gif
 
Последнее редактирование:
@YuriOl, сейчас проверил - у меня всё корректно работает.
 

Вложения

  • gif.gif
    gif.gif
    1,4 MB · Просмотры: 240
Скажите вообще с чего начинать поиск всех команд ? откуда вы их берете ?По моему если исходить из логики, то там вообще ничего не найти.
Не всегда просто найти нужную API функцию, а иногда её и нет в общем, приходится её создавать из других, из стандартных LUA функций, а бывает, что и тупичёкс...

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

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

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

PHP:
----------------------------------------------------------------------------------------------------
local msg = function(M) reaper.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_state) then -- если значения ещё нет, то -
  toggle_state = 0                 -- то назначаем его = 0
else
  toggle_state = tonumber(toggle_state) -- если есть, то берём его и превращаем из строки в номер
end

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

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

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

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

Если есть интерес разобраться как этот скрипт создан, готов по полочкам разложить, объяснить.
 
Последнее редактирование:
@Aleksandr Oleynik, а за что отвечает extraflags в Undo_EndBlock? Кто-то единицу пишет, кто-то ноль, у меня чаще корректно работает при -1, его обычно и пишу.
 
toggle_state = reaper.GetExtState('section_FX', 'On_Off') -- проверяем значение ключа On_Off
if not tonumber(toggle_state) then -- если значения ещё нет, то -
toggle_state = 0 -- то назначаем его = 0
else
toggle_state = tonumber(toggle_state) -- если есть, то берём его и превращаем из строки в номер
end
Зачем эта функция? назначение on-off? А все понял она скрипт @step@

А в каких случаях это скрипту нужно?
 
Последнее редактирование:
@Aleksandr Oleynik, а за что отвечает extraflags в Undo_EndBlock? Кто-то единицу пишет, кто-то ноль, у меня чаще корректно работает при -1, его обычно и пишу.
Не разбирался с этим. Я в общем в своих скриптах редко использую Undo блок
[DOUBLEPOST=1512866942][/DOUBLEPOST]
Зачем эта функция? назначение on-off? А все понял она скрипт @step@

А в каких случаях это скрипту нужно?
Она нужна, если нужно запоминать состояние чего либо после закрытия скрипта и до закрытия проекта.
Ну вот в частности решение toggle или step.
Ну или несколько скриптов, которые должны знать о состоянии друг друга.
 
Последнее редактирование:
Вот что то начал делать ,ну опять же с экшенами(Проверьте что правильно,а что не правильно вроде все работает ?) предполагаю что на место экшенов нужно что то вроде reaper.GetMediaItem ну и что то связаное с peaks
В таких вот ситуациях (когда нужно сделать что-то из функий присутствующих в стандартных Экшинах, я даже не заморачиваюсь, тоже использую конструкцию вызова Экшина.
 
Прошу прощения, не нашёл подобного :
Нарезал куски из аудио на нескольких треках...и эти треки надо зарендерить в один трек ( который может быть встал бы под эти треки )..
спс.
 
Нарезал куски из аудио на нескольких треках...и эти треки надо зарендерить в один трек ( который может быть встал бы под эти треки )..
спс.
Кастом на две строчки (нужен скрипт из Reapack):
1. Упаковать выделенные треки в папку (Script: me2beats_Create folder from selected tracks.lua),
2. Сделать стим папки (SWS/AW: Render tracks to stereo stem tracks, obeying time selection).
При этом итоговый аудио-файл будет по длине тайм-селекшна, если нет тайм-селекшна - то по всей длине ваших нарезанных кусков.
 
  • Like
Реакции: igor13r
Так, пресеты-таки. По крайней мере для обучения - вещь невероятная.
Сами настройки очень близки к ReaComp, поэтому я прикинул, что их можно на ReaComp и выставить спец. кнопочкой.
Мне нравится.
Посмотреть вложение 139744
А где данный апгрейчик взять то?
 
  • Like
Реакции: Слава
Столкнулся с такой проблемой, что ни экшн SWS/S&M: Delete selected items' takes and source files (no undo), ни функция os.execute с командой на удаление не работают, если в пути к файлу имеется кириллица. При том, что при вызове консоли (которую os.execute как раз и использует) вручную всё прекрасно удаляется. Уже весь гугл перерыл, пробовал всяческие функции, какие только находил - результат нулевой. Возможно это как-то решить?
 
@diggidon,
Благодарствую..., но у меня с первым скрптом вот это :
 

Вложения

  • 2017-12-10_23-55-00.png
    2017-12-10_23-55-00.png
    4,4 KB · Просмотры: 243
@Aleksandr Oleynik, да я в курсе, но только вот сидеть и переименовывать все папки, чтобы потом куча проектов не находила своих данных, как-то не лучшая перспектива. Да и хотелось бы, чтобы не у меня одного этот скрипт работал.
 
@igor13r, у меня с этим скриптом всё отлично.
Ищите причину в вашем конфиге - версия Рипера, версия SWS, и т.д.
З.Ы. У меня долгое время вместо скрипта камрада me2beats отлично работал мой собственный кастом экшн строк на 12-15 емнип. Завтра приеду на студию, сделаю и выложу кастом по вашему ТЗ.
 

Сейчас просматривают