Помогите создать экшн / кастом экшн / скрипт (5 онлайн)

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
@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

Maestro Sound

Active Member
1 Ноя 2007
721
86
28
Попытки запихнуть стандартные Экшины в скрипт и воспользоваться его функционалом только для Логики (if, then, for, do, else.......) - это путь в ни куда.
Ну тут не соглашусь . Зачем учить Азбуку если цель Написать Роман "Война и Мир"? все само собой придет, надоест запихивать стандартные екшины в скрипты и неотвратимо придем к API:) Это точно
 
  • Like
Реакции: Archie's

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Ну тут не соглашусь
Можете не соглашаться, но я то этот путь прошёл - тогда хотя бы прислушайтесь к опыту и мнению.
Ведь прям сразу сподкнулись об отсутствие части стандартных Экшинов для VSTi и делать винигрет из Экшинов и API можно только если хорошо понимаешь что делаешь.

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

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
Ну тут не соглашусь . Зачем учить Азбуку если цель Написать Роман "Война и Мир"? все само собой придет, надоест запихивать стандартные екшины в скрипты и неотвратимо придем к API Это точно
Полностью согласен! сначала с условиями всякими в голове устаканится ,а потом и потихоньку экшены из скриптов начинать убирать ,так понимание и приходит,а если все и сразу начинаешь пихать в голову ,то просто путаница получается и вообще ничего не понимаешь.
 

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Вот видите Вы прошли, а нам не разрешаете
Почему же не разрешаю?
Я вам скрипт выложил первый (ущербный) на чисто Экшинах и логических функциях.
Но ПОТОМ выложил на API - и тишина ----- так Не Пойдёт! :)
 

CerberPic

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

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Идентичны.
Касаемо кастомных кнопок - только свой интерфейс (gfx) или расширение.
 
Последнее редактирование:
  • Like
Реакции: CerberPic

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
@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)
 

Archie's

Well-Known Member
24 Окт 2017
1.936
1.296
113
Вы с моим вторым скриптом разобрались?
Вот на него вроде смотришь все описано, все понятно, но опять же непонятно от куда вы это все взяли ?Пока с экшенами делал про всякие if,for, else понял что это такое и как работает,а вот сами команды как вы ищите, по какому принципу? не могу понять.
 
Последнее редактирование:

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
В зависимости от надобности, поиск идет в API Help (генерируется из редактора соответствующей кнопкой). Многие команды ходовые и интуитивно ищутся по ключевым словам в самом названии команды или описании. Некоторые неочевидны и описаниями обделены, тут спасает поиск глобальный, Гугл, форум кокос, поиск примеров использования в репозиториях ReaPack.
 

YuriOl

Well-Known Member
6 Май 2005
1.060
590
113
55
Луганск
youtube.com
Коллеги, мне очень нравится работа - Script: me2beats_Vertical zoom to tracks with items, minimize others.lua, но когда в проекте в папках есть ещё подпапки с VSTi и группами, то работает не корректно, просто всё минимизируя. Когда удаляю эти папки - работает нормально. Это можно подправить?
GIF.gif
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Скажите вообще с чего начинать поиск всех команд ? откуда вы их берете ?По моему если исходить из логики, то там вообще ничего не найти.
Не всегда просто найти нужную 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)
Если есть интерес разобраться как этот скрипт создан, готов по полочкам разложить, объяснить.
 
Последнее редактирование:

CerberPic

Member
17 Фев 2017
70
22
8
35
@Aleksandr Oleynik, а за что отвечает extraflags в Undo_EndBlock? Кто-то единицу пишет, кто-то ноль, у меня чаще корректно работает при -1, его обычно и пишу.
 

Maestro Sound

Active Member
1 Ноя 2007
721
86
28
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

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

А в каких случаях это скрипту нужно?
Она нужна, если нужно запоминать состояние чего либо после закрытия скрипта и до закрытия проекта.
Ну вот в частности решение toggle или step.
Ну или несколько скриптов, которые должны знать о состоянии друг друга.
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.063
113
62
Киев
Вот что то начал делать ,ну опять же с экшенами(Проверьте что правильно,а что не правильно вроде все работает ?) предполагаю что на место экшенов нужно что то вроде reaper.GetMediaItem ну и что то связаное с peaks
В таких вот ситуациях (когда нужно сделать что-то из функий присутствующих в стандартных Экшинах, я даже не заморачиваюсь, тоже использую конструкцию вызова Экшина.
 

igor13r

New Member
8 Ноя 2013
22
1
3
saransk
Прошу прощения, не нашёл подобного :
Нарезал куски из аудио на нескольких треках...и эти треки надо зарендерить в один трек ( который может быть встал бы под эти треки )..
спс.
 

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
Нарезал куски из аудио на нескольких треках...и эти треки надо зарендерить в один трек ( который может быть встал бы под эти треки )..
спс.
Кастом на две строчки (нужен скрипт из Reapack):
1. Упаковать выделенные треки в папку (Script: me2beats_Create folder from selected tracks.lua),
2. Сделать стим папки (SWS/AW: Render tracks to stereo stem tracks, obeying time selection).
При этом итоговый аудио-файл будет по длине тайм-селекшна, если нет тайм-селекшна - то по всей длине ваших нарезанных кусков.
 
  • Like
Реакции: igor13r

Maestro Sound

Active Member
1 Ноя 2007
721
86
28
Так, пресеты-таки. По крайней мере для обучения - вещь невероятная.
Сами настройки очень близки к ReaComp, поэтому я прикинул, что их можно на ReaComp и выставить спец. кнопочкой.
Мне нравится.
Посмотреть вложение 139744
А где данный апгрейчик взять то?
 
  • Like
Реакции: Слава

CerberPic

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

CerberPic

Member
17 Фев 2017
70
22
8
35
@Aleksandr Oleynik, да я в курсе, но только вот сидеть и переименовывать все папки, чтобы потом куча проектов не находила своих данных, как-то не лучшая перспектива. Да и хотелось бы, чтобы не у меня одного этот скрипт работал.
 

diggidon

Administrator
Команда форума
26 Май 2008
6.832
7.486
113
51
Днепр UA
@igor13r, у меня с этим скриптом всё отлично.
Ищите причину в вашем конфиге - версия Рипера, версия SWS, и т.д.
З.Ы. У меня долгое время вместо скрипта камрада me2beats отлично работал мой собственный кастом экшн строк на 12-15 емнип. Завтра приеду на студию, сделаю и выложу кастом по вашему ТЗ.
 

Сейчас онлайн (Пользователей: 0, Гостей: 5)