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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
как можно, например, на подобии скриптов save/restore track selection 4 ноя 2015 сделать save/restore mouse modifier? Напр, можно запустить
SetMouseModifier("MM_CTX_ITEM_CLK", 0, "40746" ) - разделение айтемов с пом ЛКМ,
а затем вернуть настройку модифаера в дефолтный с пом.
SetMouseModifier("MM_CTX_ITEM_CLK", 0, "-1" ),
но вернется именно в дефолтный вариант, а надо в тот, который был настроен пользователем
 
PHP:
    function Get_ID_By_Name(name)
      kb_table = {}
      filename = reaper.GetResourcePath()..'/'..'reaper-kb.ini'
      file = io.open(filename, "r")
      content = file:read("*all")
      for line in io.lines(filename) do table.insert(kb_table, line) end
      file:close()
   
      for i = 1, #kb_table do
        if string.find(kb_table[i], name) ~= nil then
          temp_t = {}
          for word in string.gmatch(kb_table[i], '.-[%s]') do table.insert(temp_t, word) end
          return '_'..string.sub(temp_t[4],0,-2)
        end
      end
    end
 
    command_name = Get_ID_By_Name('!_VolTest001.eel')
    reaper.ShowConsoleMsg(command_name)
    reaper.Main_OnCommand(reaper.NamedCommandLookup(command_name), 1)

Тут по ходу вот какая странность обнаружилась - из скрипта скрипт запустить в Экшины помещённый - не получается :(
 
Попробуй скопировать ещё раз, я там поправил кое-что
upd Да, что-то из окна экшнов не запускается.
 

Вложения

  • tesgsgg.gif
    tesgsgg.gif
    166 KB · Просмотры: 79
Последнее редактирование:
Попробуй скопировать ещё раз, я там поправил кое-что
Проблема не в твоём коде, а с тем, что команда -
reaper.Main_OnCommand(reaper.NamedCommandLookup(command_ID), 1) - не работает для импортированных в Рипер в виде Экшинов Скриптов.
У меня не работает.
PS: Ну вот, у тебя тоже.
 
@Aleksandr Oleynik, а что означает единица? я пока ноль везде ставлю
=======
Допустим, получил питч выделенного тейка. Как можно запомнить это значение, чтобы использовать в другом скрипте?
UPD: один из вариантов нашел, SetExtState - GetExtState
 
Последнее редактирование:
@Aleksandr Oleynik, а что означает единица? я пока ноль везде ставлю
Еденицу Михаил там поставил.
Вообще-то я и сам не знаю за что отвечает int flag.
[DOUBLEPOST=1449593819,1449593626][/DOUBLEPOST]
Как можно запомнить это значение, чтобы использовать в другом скрипте?
Главный вопрос ГДЕ запомнить.
Скрипты умеют читать код друг друга, но это нужно писать в коде сразу.
на сколько мне известно, какой-то глобальной памяти для скриптов в Рипере нет, могу ошибаться.
У меня тоже есть проблема как что-то сохранить и потом подгрузить это что-то из другого скрипта -
но я это делаю путём создания Скрипта, который потом импортируется вторым скриптом.
 
@Aleksandr Oleynik, ну вот минут через 10 как спросил, нашел один из вариантов, SetExtState - GetExtState
и сразу заюзал в скрипте copy-paste take pitch :)
copy selected take pitch
Код:
if reaper.CountSelectedMediaItems(0) > 0 then
  sel_item = reaper.GetSelectedMediaItem(0, 0)
  act_take = reaper.GetActiveTake(sel_item)
  sel_take_pitch = reaper.GetMediaItemTakeInfo_Value(act_take, "D_PITCH")
  reaper.SetExtState("Buffer", "pitch", sel_take_pitch, false)
end

paste selected take pitch
Код:
if reaper.CountSelectedMediaItems(0) > 0 then
  p = reaper.GetExtState("Buffer", "pitch")
  sel_item = reaper.GetSelectedMediaItem(0, 0)
  act_take = reaper.GetActiveTake(sel_item)
  reaper.SetMediaItemTakeInfo_Value(act_take, "D_PITCH", p)
  reaper.UpdateArrange()
end
этот сыроват еще, надо for прикрутить, чтобы применял питч к нескольким выделенным, пока только к первому выделенному
 
  • Like
Реакции: Aleksandr Oleynik
Хорошие успехи!
[DOUBLEPOST=1449595744,1449595428][/DOUBLEPOST]
PHP:
    kb_table = {}
    filename = reaper.GetResourcePath()..'/'..'reaper-kb.ini'
    file = io.open(filename, "r")
    content = file:read("*all")
    for line in io.lines(filename) do table.insert(kb_table, line) end
    file:close()

   table.insert(kb_table, 1, 'SCR 4 0 _mpl_test2 "Custom: mpl_test2.lua" mpl_test2.lua')

    file = io.open(filename, "w")
    file:write(table.concat(kb_table, '\n'))
    file:close()
Михаил, а какой синтаксис, если нужно в вписываемой в файл строке -
PHP:
 table.insert(kb_table, 1, 'SCR 4 0 _mpl_test2 "Custom: mpl_test2.lua" mpl_test2.lua')
вставлять часть данных, как вычисляемая переменная?
Ну вот _mpl_test2 заменить на переменную, а не просто текст.
В eel делал бы через sprintf(), а как в lua?
 
Последнее редактирование:
  • Like
Реакции: lil-burn
"Что-то "..переменная.." что-то ещё"
Пробелы не забудь. Адрес в двойных кавычках и с / (чтобы и на винде и на маке работало)
Что-то вроде: переменная..' "C:/блаблабла.EEL"'
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik
Последний на сегодня вопрос :)
- как в строке из переменной убрать какой-то символ? В частности первое подчёркивание.
Опять-же в eel-е я нашёл как, а в lua пока не нашёл :(
Ну вот записал я в переменную command_name строку - _mpl_test2, как потом убрать первое подчёркивание при записи в ini?

PS: Я читаю параллельно документацию и простенькие примеру проверяю.... так глядишь и перейду на lua :)
 
Подчёркивание там нужно, не помню зачем. Как минимум, чтобы при сортировке по ID в экшнлисте скрипты и кастомы вверху болтались.
http://lua-users.org/wiki/StringLibraryTutorial
string.sub(s, i [, j])
s:sub(i [,j])

Return a substring of the string passed. The substring starts at i. If the third argument j is not given, the substring will end at the end of the string. If the third argument is given, the substring ends at and includes j.

> = string.sub("Hello Lua user", 7) -- from character 7 until the end
Lua user
> = string.sub("Hello Lua user", 7, 9) -- from character 7 until and including 9
Lua
> = string.sub("Hello Lua user", -8) -- 8 from the end until the end
Lua user
> = string.sub("Hello Lua user", -8, 9) -- 8 from the end until 9 from the start
Lua
> = string.sub("Hello Lua user", -8, -6) -- 8 from the end until 6 from the end
Lua
 
  • Like
Реакции: Aleksandr Oleynik
Подчёркивание там нужно, не помню зачем. Как минимум, чтобы при сортировке по ID в экшнлисте скрипты и кастомы вверху болтались.
оно нужно при написании скрипта, а в ini файле его убирают. Правда скрипт-экшин всё равно пока не запускается скриптом :(
Может что-то поломали в последнем Рипере?
Как будто раньше запускался так кастом Экшин-Скрипт
 
Последнее редактирование:
А у меня не работает и при директ стринге с ID скриптов
с ID Custom Action - работает
 
Последнее редактирование:
А как-то можно отобразить вэйвформу/пики айтема в gfx окне? где то видел такое , у Михаила если не ошибаюсь в каком то скрипте, стал искать не- нашёл(, подскажите пожалуйста.
 
Да, я слил буфер audioaccessor в таблицу и нарисовал её, с телефона долго копировать, поищи уменя в гитхабе warping tool в тестовом репозитории
 
  • Like
Реакции: nounaim
Я Toolbar создал. Только как его теперь на одну кнопку (VSTi как у тебя) привязать !!!
Создать кнопку с командой Toolbar: Open/close toolbar (#) с номером вашего VSTi Toolbar где вам хочется...
 
  • Like
Реакции: Mateush1982
Ребят, кому попадался скрипт подобной вещи? Или хотя бы как такое сделать? В хозяйстве точно пригодится
 
Последнее редактирование:
Можно ли как-либо удалить wav-файлы по имени из папки проекта?Не могу найти ничего по этому вопросу.
 
@diggidon, может быть,но хотелось бы автоматически.
В общем,я это сделал...
1.gif
Ретроспектив-рекорд для Аудио в стерео с любым размером буфера.
Пишет все,запись в циклах,и вообще в любых позициях независимо от премещений по проекту.При запуске скрипта все раскладывается по своим местам в виде тейков,точность по-сэмпловая.Пока,правда,черновой вариант,но все работает четко.Вскоре будет готовый к использованию.
И вот для полного счастья,надо бы прямо из скрипта удалять лишние файлы(остаются после склейки буферов),было бы вообще замечательно.
 
EUGEN27771, наводящее API :
EnumProjects
EnumerateFiles
Enumerate Subdirectories
string.find
os.execute("remove "..file)-как в EEL удалить файл не помню

Откуда ты знаешь, что пишутся именно в папку проекта (возможно, папка для записи другая)?
 
Последнее редактирование:
EnumProjects
EnumerateFiles
Enumerate Subdirectories
string.find
os.execute("remove "..file)-как в EEL удалить файл не помню
Спасибо огромное,попробую найти.
Откуда ты знаешь, что пишутся именно в папку проекта (возможно, папка для записи другая)?
Их вроде(если не в папке проекта) можно вычислить,где-то видел.
На крайний случай-есть запасной вариант- есть экшн-удалить айтем и исходный файл,но тогда придется пределывать многовато.
 
Придется переделать.
:(
[DOUBLEPOST=1449792484,1449792389][/DOUBLEPOST]
Не нашел я,как в eel можно удалить файл.
Увы, не первое и не последнее ограничение EEL.
Я вот смотрю ЧТО МОЖНО делать при помощи таблиц в LUA и ...... потихоньку его ковыряю....
 

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