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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
@@Michael, а чем Вы пользуетесь при написании,прямо в Рипере?Или есть что-то получше-для Lua-то должно быть.На этом черном фоне как-то не особо приятно что-то делать,и глаза устают,и хрен поймешь где что находится,если кода больше пары страниц.На github и то понятнее в браузере.
Еще,посмотрел Ваши скрипты,очень серьезно,такое кол-во кода-Вы по частям делаете,или все сразу?
Спрашиваю,чтобы понять,как лучше,может я все неправильно делаю и есть способ упростить.Может быть есть какой-то более системный подход?
 
Да, IDE так себе, согласен, но постоянно лазить в NotePad++ лично мне очень неудобно (хотя там, говорят , много полезностей всяких). По поводу сразу или нет - зависит от скрипта, стараюсь сразу базовые вещи прописывать, чтобы потом не возвращаться. Ну и конечно надо использовать консоль. Иногда закладки делаю, что-то вроде
PHP:
function bookmark() end
чтобы к нужному месту правой кнопкой возвращаться.
 
Последнее редактирование:
  • Like
Реакции: EUGEN27771 и lil-burn
@crutifixus,
smart insert track+.gif
Smart insert track, то бишь хитрамудрая вставка трека:
- вставляет выделенный трек с учетом глубины вложенности
- если не выделено ни одного трека, вставляет трек в конец плей-листа, учитывая глубину вложенности последнего текущего трека
- новый создаваемый трек автоматически становится последним в папке, что удобно при использовании заводских экшенов вставки треков (например insert new track) совместно с данным.

Код:
if reaper.CountSelectedTracks(0) > 0 then
  seltr = reaper.GetSelectedTrack(0, 0)
  dep = reaper.GetMediaTrackInfo_Value(seltr, "I_FOLDERDEPTH")
  if dep < 0 then
    reaper.Main_OnCommand(40001, 0)
    new = reaper.GetSelectedTrack(0, 0)
    reaper.SetMediaTrackInfo_Value(seltr, "I_FOLDERDEPTH", 0)
    reaper.SetMediaTrackInfo_Value(new, "I_FOLDERDEPTH", dep)
  else
    reaper.Main_OnCommand(40001, 0)
  end
else
  n = reaper.CountTracks(0)
  if n > 0 then
    was_last_tr = reaper.GetTrack(0, n-1)
    dep = reaper.GetMediaTrackInfo_Value(was_last_tr, "I_FOLDERDEPTH")
    reaper.SetOnlyTrackSelected(was_last_tr)
    reaper.Main_OnCommand(40702, 0)
    new = reaper.GetSelectedTrack(0, 0)
    reaper.SetMediaTrackInfo_Value(was_last_tr, "I_FOLDERDEPTH", 0)
    reaper.SetMediaTrackInfo_Value(new, "I_FOLDERDEPTH", dep)
  end
end

скрипт во вложении
 

Вложения

@crutifixus,
Посмотреть вложение 109025
Smart insert track, то бишь хитрамудрая вставка трека:
- вставляет выделенный трек с учетом глубины вложенности
- если не выделено ни одного трека, вставляет трек в конец плей-листа, учитывая глубину вложенности последнего текущего трека
- новый создаваемый трек автоматически становится последним в папке, что удобно при использовании заводских экшенов вставки треков (например insert new track) совместно с данным.

Код:
if reaper.CountSelectedTracks(0) > 0 then
  seltr = reaper.GetSelectedTrack(0, 0)
  dep = reaper.GetMediaTrackInfo_Value(seltr, "I_FOLDERDEPTH")
  if dep < 0 then
    reaper.Main_OnCommand(40001, 0)
    new = reaper.GetSelectedTrack(0, 0)
    reaper.SetMediaTrackInfo_Value(seltr, "I_FOLDERDEPTH", 0)
    reaper.SetMediaTrackInfo_Value(new, "I_FOLDERDEPTH", dep)
  else
    reaper.Main_OnCommand(40001, 0)
  end
else
  n = reaper.CountTracks(0)
  if n > 0 then
    was_last_tr = reaper.GetTrack(0, n-1)
    dep = reaper.GetMediaTrackInfo_Value(was_last_tr, "I_FOLDERDEPTH")
    reaper.SetOnlyTrackSelected(was_last_tr)
    reaper.Main_OnCommand(40702, 0)
    new = reaper.GetSelectedTrack(0, 0)
    reaper.SetMediaTrackInfo_Value(was_last_tr, "I_FOLDERDEPTH", 0)
    reaper.SetMediaTrackInfo_Value(new, "I_FOLDERDEPTH", dep)
  end
end

скрипт во вложении

Да , это оно )) еще раз спасибо
 
  • Like
Реакции: EUGEN27771
Меня сын присадил на Atom. Поставил плагин под LUA - пока очень нравится
Надо попробовать.
[DOUBLEPOST=1451252829,1451252287][/DOUBLEPOST]
недеструктивный expload многоканальных файлов
Наверное,когда не делается физической копии.Тогда нужно-сделать копию выд. айтема(акт.тейка) на новые треки (по к-ву каналов в айтеме).Для каждой такой копии указать соотв. "I_CHANMODE".
То есть,физически,файл останется один,просто в каждом новом тейке будет активен только один определенный канал.
 
Узнать кол-во каналов в источнике.Дальше,например,дублировать трек с айтемом и менять "I_CHANMODE" в текущем активном тейке.
 
@EUGEN27771, Женя, насчёт алгоритма я уже продумал. Вопрос встал в синтаксисе. )) Не знаю с чего начать изучать. подсоби, друг!
 
Оно самое. Мужики, с чего начать?
Есть функция -
reaper.GetMediaItemTakeInfo_Value(MediaItem_Take take, string parmname)
string parmname = I_CHANMODE, int *, channel mode (0=normal, 1=revstereo, 2=downmix, 3=l, 4=r)
[DOUBLEPOST=1451255076,1451255015][/DOUBLEPOST]
Не знаю с чего начать изучать. подсоби, друг!
Тебя выгнали с филармонии?
Этож капец музыке :(
 
Узнать кол-во каналов
PHP:
Item_ID = reaper.GetSelectedMediaItem(0,0)
if Item_ID then Take_ID = reaper.GetActiveTake(Item_ID)
  if Take_ID then
     PCM_source=reaper.GetMediaItemTake_Source(Take_ID)
     SourceNumChan = reaper.GetMediaSourceNumChannels(PCM_source)
  end
end
Сделать нужный канал активным
reaper.SetMediaItemTakeInfo_Value(Take_ID,"I_CHANMODE",Act_Ch)-
Act_Ch= нужный канал+2,потому что(0=normal, 1=revstereo, 2=downmix, 3=l, 4=r)
 
  • Like
Реакции: Aleksandr Oleynik
А, ну да...., с учётом, что там может быть не один тэйк...
[DOUBLEPOST=1451256913,1451255781][/DOUBLEPOST]@EUGEN27771, проверил твой скрипт -
PHP:
function msg(str)
  if str == nil then str = 'nil' end
  reaper.ShowConsoleMsg(str..'\n')
end

Item_ID = reaper.GetSelectedMediaItem(0,0)
if Item_ID then Take_ID = reaper.GetActiveTake(Item_ID)
  if Take_ID then
     PCM_source=reaper.GetMediaItemTake_Source(Take_ID)
     SourceNumChan = reaper.GetMediaSourceNumChannels(PCM_source)
     msg(SourceNumChan)
  end
end
Правильно определяет -
Channel_01.png
 
Смотрю на Ваши потуги как баран на новые ворота. Дайте мне азбуку.
[DOUBLEPOST=1451258101,1451258003][/DOUBLEPOST]
Тебя выгнали с филармонии?
Наоборот. Выскочил проект в котором эта функция будет постоянно нужна. Вот и хотел запилить, да не тут-то было
 
мотрю на Ваши потуги как баран на новые ворота. Дайте мне азбуку.
Азбука для LUA есть, в отличии от EEL :(
Lua за 60 минут
Справочное руководство по языку Lua 5.1

Но Нужно ещё и API Reaper-а -
ReaScript API

Ну и смотри готовые Мишины скрипты -
https://github.com/MichaelPilyavskiy/ReaScripts
Жени -
https://github.com/EUGEN27771/Reaper-Scripts
И X-Raym -
https://github.com/X-Raym/REAPER-ReaScripts
Для Рипера
[DOUBLEPOST=1451258703,1451258208][/DOUBLEPOST]
Вот и хотел запилить, да не тут-то было
Ой, лучше проси Женю или Мишу ---- сам будешь долго вникать :(
Я не возьмусь - учусь только...
[DOUBLEPOST=1451259401][/DOUBLEPOST]

А вот так определит для всех выделенных айтемов, а не для одного (начинаю потихоньку врубаться) -

PHP:
function msg(str)
  if str == nil then str = 'nil' end
  reaper.ShowConsoleMsg(str..'\n')
end

counttItem = reaper.CountMediaItems(0)
if counttItem == nil then return end
for i = 1, counttItem do
  Item_ID = reaper.GetSelectedMediaItem(0, i-1)
  if Item_ID ~= nil then
    Take_ID = reaper.GetActiveTake(Item_ID)
    if Take_ID ~= nil then
      PCM_source=reaper.GetMediaItemTake_Source(Take_ID)
      SourceNumChan = reaper.GetMediaSourceNumChannels(PCM_source)
      msg(SourceNumChan)
    end
  end
end
 
  • Like
Реакции: belovw
ОК. Пишу скрипт - вставить новый трэк
reaper.InsertTrackAtIndex(0, 0)

он срабатывает только после анду. В смысле сразу не рисует. Что я делаю не так?
 
@belovw, update tracklist после вставки.
===
Скрипт немного подправил и перенес в тему со скриптами
 

Вложения

  • 123.gif
    123.gif
    192 KB · Просмотры: 80
Последнее редактирование:
Меня сын присадил на Atom. Поставил плагин под LUA - пока очень нравится
Надо бы попробовать тоже, а то когда с такого плана таблицами имеешь дело, то запутаться легко (+ вся эта таблица пишется стрингом в extstate и при запуске скрипта парсится обратно в таблицу :D)
tablesjpg_2174498_20049259.jpg
 
  • Like
Реакции: Aleksandr Oleynik
@EUGEN27771, ???)))
имею в виду в контесктном меню скрипта в экшен листе такая опция
wish.jpg
нажали и открылось виндоусовское окно с расположением файла, наподобии экшена
"Open selected item path in explorer/finder ".
Не обязательно в контесктном меню, главное чтобы как-нибудь оперативно открыть папку со скриптом
Можно открыть Dev Environment и там посмотреть расположение, но вбивать его потом все равно руками надо.
Без помощи разрабов рипера даже не представляю, как это сделать
На реквестах создал тред, может что-нибудь придумают)
 
Понял,я просто о другом подумал.Папку со скриптов и сам скрипт можно открыть,задач в том,чтоб найти выделенный в данный момент.Сейчас не могу посмотреть, может где-то и есть
 
  • Like
Реакции: lil-burn
@EUGEN27771, даже хоть например "открыть последний запущенный скрипт"..
или такая идея: мы же можем копировать ID скрипта в буфер обмена (из контекстного меню в экшен-листе). А сабжевый скрипт будет брать из буфера эту строку, находить в reaper.kb, а там вроде все расположения подписаны. Как идея?)
 
Тоже по идее @belovw,
Open Item(Var Actions depending of item source)
Скрипт выполняет разные экшны,в зависимости от содержимого(midi,wave,empty,rex и т.п) активного тейка выделенного айтема.
123.gif
Можно назначить другие экшны(в начале скрипта).
Спасибо, @EUGEN27771!
Можно ли добавить возможность назначения Action ID *.lua скрипта в начале скрипта?
 
Можно так,надо поразбираться.Сейчас просто времени мало,а задумок всяких много.Приходится как-то распределять.
Можно ли добавить возможность назначения Action ID *.lua скрипта в начале скрипта
Да,добавил.Должно работать,не проверял
 
Последнее редактирование:
Да,добавил.Должно работать,не проверял
Выдаёт ошибку;
...\Open Item(Var Actions depending of item source).lua:57: bad argument #1 to 'Main_OnCommandEx' (number expected, got nil)

Поменял так в секции MIDI;
PHP:
--------------------------
  MIDI       =    _6a077edc5197b94c8046440f5c9690e2
  WAVE       =    "_SWS_TOGZOOMHORIZ"
  EMPTY      =    40850
  REX        =    "_SWS_TOGZOOMHORIZ"
  FLAC       =    "_SWS_TOGZOOMHORIZ"
  MP3        =    "_SWS_TOGZOOMHORIZ"
  CLICK      =    0
--if no sel item or no-action(0)--
 
Последнее редактирование:

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