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

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Поменял так в секции MIDI
Я же кавычки для примера поставил и написал сверху предупреждение,правда,английский мой хренов,но думаю,смысл должен быть понятен.
Попробуйте с кавычками.
То есть,если ID строковый,нужны кавычки!
Вот так: MIDI = "_6a077edc5197b94c8046440f5c9690e2"
Если число,то без кавычек.
Так: EMPTY = 40850
 
  • Like
Реакции: Beckoff

belovw

Well-Known Member
22 Апр 2009
9.257
8.450
113
50
RK Almaty
@EUGEN27771, в скрипте Open Item... не хватает VIDEO типа айтема. Себе разобрался как добавить. А тебе наверное надо обновить скрипт в общей теме.
Работает как надо -доволен как слон. Изучаю варианты экшенов для повышения эргономики.

Женя , а как можно было бы ввести условия в зависимости от модификаторов мыши? Как вариант сделать несколько копий скрипта для модификаторов.
 
  • Like
Реакции: Beckoff

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
  • Like
Реакции: Beckoff

Beckoff

читатель..постоянный.
6 Май 2008
816
382
63
Ташкент
Я же кавычки для примера поставил и написал сверху предупреждение,правда,английский мой хренов,но думаю,смысл должен быть понятен.
Попробуйте с кавычками.
Работает!
С английским у вас всё нормально, зто я не сообразил.. Благодарю!
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
мы не можем пока проверить, виден ли выделенный трек в данный момент в окне аранжировки?
Например, на скрине выделен трек 2, и он виден, трек 6 виден, но не полностью, 7 и > уже не видны
upload_2015-12-30_11-4-22.png
хочу в нескольких скриптах замутить скролл к выделенному треку по такому принципу:
1) если трек полностью виден в данный момент, то скролла не происходит
2) если трек не виден или виден не полностью, происходит промотка до того момента, когда выделенный трек становится полностью виден, дальше не скроллит
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@belovw, вечером сделаю.Постараюсь все,что найду добавить.
====
Добавил,вроде бы все.Некоторые типы в рипере объединены,поэтому,если не видно конкретного формата,это не значит,что его нет.Но,конечно,я мог что-то упустить,все проверять по файлам очень долго.
==
Попутно исправил проблему-если файл был в реверсе или только секция(часть) использовалась в проекте тип определялся,как "section".
Теперь source-тип определяется всегда.
 
Последнее редактирование:
  • Like
Реакции: belovw

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Парсишь kb.ini в таблицу по строкам, ищешь совпадения по id, выводишь из этой строки адрес.
Если у тебя после этого ответа всё еще есть желание заморочиться, то можешь глянуть например сюда.
 
  • Like
Реакции: lil-burn

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@@Michael, spk помог)
Код:
action_id_string = "_de1181dc7a360f46b72e649467aee1cd"

function starts_with(text,prefix)
  return string.sub(text, 1, string.len(prefix)) == prefix
end


function split(str, sep)
  return str:match("([^" .. sep .. "]+)[" .. sep .. "]+(.+)")
end


function get_kb_ini_path(action_id_string)
  local resource_path = reaper.GetResourcePath()
  local kb_ini_path = ""
  local os = reaper.GetOS()
  if os ~= "Win32" and os ~= "Win64" then
    kb_ini_path = resource_path .. "/" .. "reaper-kb.ini"
  else
    kb_ini_path = resource_path .. "\\" .. "reaper-kb.ini"
  end
  if reaper.file_exists(kb_ini_path) then
    return kb_ini_path
  end
end


function get_script_path_from_action_id_string(action_id_string)
  local kb_ini_path = get_kb_ini_path()
  local line_found = false
  local path = ""
  for line in io.lines(kb_ini_path) do
    if starts_with(line, "SCR") then
      for word in line:gmatch("%S+") do
        -- is "action_id_string" in this line?
        if "_" .. word == action_id_string then
          line_found = true
          -- if "action_id_string" is in this line,
          -- store the line to "path" variable for further string manipulation
          path = line
          break
        end
      end
    end
    if line_found then
      -- "path to script" in reaper-keyb.ini seems to be at the end of a line
      -- hopefully reversing the line and splitting by '"' will work...
      path = string.reverse(path)
      path = split(path, '"')
      -- reverse back to normal
      path = string.reverse(path)
      return path
    end
  end
end

path = get_script_path_from_action_id_string(action_id_string)
еще бы научиться брать данные из буфера и открывать папки
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@lil-burn, не понял,там берутся пути из файла,если папки нужны,то без имени файла и все
То есть,даже в этом скрипте отмотать до первого слеша "\".Благо,в lua строковые функции позволяют что угодно делать без проблем.
Меня это сейчас в ступор вводит.И таблицы тоже.Там,где раньше было одно-два решения,сейчас 10-20,и непонятно,что лучше.
Может кто-то прояснить-нужно,например,создать массив 5 х 25.
Можно сделать одну таблицу с циклом 5,как в eel было,и там это был единственный вариант.
В lua Можно сделать таблицу таблиц по 5 .Можно наоборот по 25.
Я подозреваю,что это абсолютно равнозначно в lua,но не уверен...
И так и так будет верно,однако,нужно чтобы было верно с точки зрения ресурсов.Для мелких задач,даже для любых скриптов,наверное,это не имеет никакого значения.
Это из очевидного,еще можно вариантов 10 придумать.И это самый простейший пример.
Если идти дальше,нужно это учесть,мало ли,чем черт не шутит,таки доберемся до С.
==
Другой пример-что выгоднее-поиск в короткой строке,или вставка элемента в таблицу со сдвигом?Начал изучать графику,нужно поставить check на меню и убрать предыдущий check,сделал пока так,но ощущение,что это нерационально...
Снимок.PNG
Еще по графике вопрос-как убрать старые,например,строки-я просто зарисовываю их фоновым цветом,но,опять же,ощущение,что это проще делается.Короче,незнание порождает изобретение велосипедов,причем,с многоугольными колесами порой.
===
Ладно,если сам не разберешься,за тебя никто не разберется.Только время,наряду с остальными делами.О,так "цоф" и "хад",да я еще как-то и читать успеваю.
 
Последнее редактирование:
  • Like
Реакции: lil-burn

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
Что нужно для апдейта высоты tcp через reaper.SetMediaTrackInfo_Value(.., 'I_HEIGHTOVERRIDE', ...) ?
высота меняется только после щелкания мышью по tcp
test height.gif
@EUGEN27771, нашел Ваш ответ на примерно такой же вопрос http://rmmedia.ru/threads/118091/page-15#post-1955912
если имелось в виду TrackList_UpdateAllExternalSurfaces(), то все равно не апдейтится
 

Furqat

Well-Known Member
27 Окт 2012
729
290
63
Tashkent
Подскажите экшн(или скрипт), который создаёт автоматизацию плагина(в инсерте) минимум движениями?
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@Furqat, FX: Show/hide track envelope for last touched FX parameter.
Работает так:
1. крутим параметр плагина
2. запускаем экшен (экшен назначаем на сочетание клавиш)
[DOUBLEPOST=1451718928,1451718671][/DOUBLEPOST]@EUGEN27771, нашел, что мне нужно было в предыдущем посте - reaper.TrackList_AdjustWindows(false):). Еще бы понять, за что здесь отвечают true и false
 
  • Like
Реакции: Furqat

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Еще бы понять, за что здесь отвечают true и false
Сам не знаю,попробуйте оба варианта,будет видно.Сама функция обновляет трек-лист после изменений,например,добавления трека и т.п.
[DOUBLEPOST=1451728661,1451728461][/DOUBLEPOST]Если я правильно понял,то в настройках ищите авто-добавление огибающей при касании ручки,это минимум действий.То есть,просто ставите режим автоматизации отличный от read,трогаете крутилку или фейдер и все
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
в одном скрипте использую SetMediaItemTake_Source, в связи с этим вопрос:
пики ребилдятся только через экшены (например, с пом. Rebuild peaks for selected items)?
в API пока нет такого?
просто при обновлении волноформ мелькает окно, что необязательно в этом случае
 

lil-burn

Well-Known Member
15 Авг 2012
903
638
93
Екатеринбург
@@Michael, поймал интересный глюк с SetMediaItemTake_Source при работе такого скрипта
Код:
if reaper.CountSelectedMediaItems(0) ~= nil then
  mouse_it = reaper.BR_ItemAtMouseCursor()
  if mouse_it ~= nil then
    source_take = reaper.GetActiveTake(mouse_it)
    source = reaper.GetMediaItemTake_Source(source_take)
    it = reaper.GetSelectedMediaItem(0, 0)
      take = reaper.GetActiveTake(it)
      reaper.SetMediaItemTake_Source(take, source)
--    reaper.UpdateItemInProject(it)
--    reaper.UpdateArrange()
    reaper.Main_OnCommand(40441, 0)
  end
end
скрипт получает источник активного тейка под курсором мыши и устанавливает этот источник для активного тейка выделенного айтема.

суть глюка: если после выполнения скрипта попробовать удалить один из этих двух айтемов (или трек с этими айтемами), то наступает коллапс и армагеддон (в конце гиф) и приходится рестартить рипер.
bug.gif
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
Это копец,почти сдаюсь.
Изучал по-немногу Луа,дальше должно пойти.Конечно,делаю все не так,как надо,но там все решаемо со временем.Пока могу сказать(возможно и не так) подход очень сильно отличается от eel,некоторые вещи делаются настолько элементарно,что сложно подумать.
Но проблема не в том.Около недели часов по пять без перебоя убил на графику,с самыми основами разобрался,но даже не в этом дело.
Как вообще строить интерфейс,чтобы он был хотя бы не убийственно тупым?То бишь вопрос не по скриптам самим,а по реализации.
Для примера-сделал простой вариант scale transpose.Нужны 6 кнопок-root,scale ,up-down+L-R(переместить выделение влево-вправо и уменьшить-увеличить в 2 раза-на правую мышь)=4 кнопки.Все работает,и даже,возможно будет масштабироваться ,не проблема.Для меня пойдет.
Вопрос.Как их расположить?Свой позорищный вариант не показываю,могу показать только,что все работает.Посмотрел примеры Михаила-очень красиво все устроено.
Короче,можно уже пытаться что-то делать,но непонятно как по интерфейсу теперь.
ПС.Забыл упомянуть,что все равно не сдамся,у меня в запасе содрать с калькулятора какого-то,не херня-посморел калькуляторы-тоже.Удручает разряженность-у меня 4- кнопки как джойстик на древней приставке,если кто помнит те старые-добрые,прорвемся
 
Последнее редактирование:

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@Aleksandr Oleynik, зря,возможности грандиозные.
ПС.Русские не здаются.Еще попробуем.
С самим интерфейсом,я чуток разобрался,все работает.Кнопки,менюшки делаются.На все отклики мыши,клавиш отзываются.
Скоро будут масштабироваться,думаю,не проблема,с таблицами это легко,уже почти.
Короче,проблема будет в построении интерфейса.Но решится,думаю.
Вообще,Вы спрашивайте о графике,а я что буду сам узнавать подскажу без проблем.С основами немного разобрался.Собственно,так и с JS,и со скриптами было.Если друг друга не подталкивать,можно замерзнуть!Я б даже за JS(что-то с миди связано было,помните)не взялся бы никогда
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
26.360
20.064
113
62
Киев
Так я и с lua пока очень на Вы. Куда мне с GUI разбираться?
Вот Михаил уже освоил, теперь вот ты научишься - будет кому дурацкие вопросы задавать :)
 

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
дурацкие вопросы задавать
дурацкие это грубо сказано,я сам дурак полный в этом плане.Старюсь учиться,времени упущено слишком много,информация уже не идет,как вода.В любом случае,если что знаю,увижу вопрос,отвечу 100%.Здесь всегда так делал и буду делать,тут люди интеллигентные.
 

@Michael

Well-Known Member
14 Дек 2010
969
1.461
93
Орёл / Москва
Разложи по полочкам (функциям, точнее), так проще делать намного. Отдельно координаты (я привык делать xywh таблицы), отдельно трекинг мыши, отдельно графика (у меня вся графика в буфер в последнее время пишется для экономии ресурсов). Впринципе такого плана GUI особо не нужен в простых скриптах (в любом случае есть фреймворк spk для упрощения этого всего), просто глазу чуть приятнее:


Ну а эргономика зависит от фантазии, тут уже как придётся. Я ориентируюсь на то, чтобы самому юзать было удобно.
 
Последнее редактирование:
  • Like
Реакции: lil-burn и EUGEN27771

EUGEN27771

Well-Known Member
23 Апр 2010
2.293
1.995
113
@@Michael, я понял,спасибо большое! я по твоим скриптам,вобщем-то и смотрел,у тебя конечно,очень круто,как для меня.Но,в принципе,так и делал,все по функциям до мелочей раскладывал,потом стал объединять по-немногу,тут таблицы пригодились очень кстати,потом пошли таблицы в таблицах,короче,луа здесь вообще вне конкуренции.
Впринципе такого плана GUI особо не нужен в простых скриптах (в любом случае есть фреймворк spk для упрощения этого всего)
Если бы раньше это видел,меньше бы возился,но оно и к лучшему.
Короче,все равно я проще написал,мне просто кнопки были нужны,но можно все допиливать.
Сам вид крайне хреновый получается!,но доберемся и до него,главное,что это работает, и практически с нуля со всеми подножками сделано наконец-то.
В общем,начал понимать по-немногу графику,нужно развиваться,потом может быть лучше получится.
Вижу,тут нужен еще тех.дизайнерский подход.Спасибо за сочувствие,я уже приуныл слегка
ПС.слайдеры у spk77 довольно тупые,у тебя интереснее
ППС,в любом случае spk77 спасибо тоже,почитал,объясняет,что зачем,это важно
[DOUBLEPOST=1452759916,1452754755][/DOUBLEPOST]===
О,еще вспомнил,по JS super8 графику смотрел сначала,там тоже дизайн хреновенький,по сравнению с твоим,а его,насколько я понял чуть-ли не Джастин сам писал или по просьбе(функции только он написал(недокументированно причем),так и сразу лупер этот появился,заметь!).
Может к ним в команду устроишься,у тебя идей новых куча,уже готовые наработки есть,английский знаешь..!смотрю,на кокосовском форуме знающих людей много,но они все почему-то ленивые(про СВС,конечно,не говорю), почти никто ничего делать не хочет,единицы только,человек 5-10 и ты делаешь лучшее из них,и это факт,попробуй
 

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