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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
@EUGEN27771, работает просто фантастически, спасибо, а что нужно добавить в скрипт и в какую часть кода, что-бы не включался loop source?
 
@Aleksandr Oleynik, по Вашей наводке.
Нужно еще сделать,чтобы при циклической(и не циклической тоже) записи при смене позиции неоконченные ноты заканчивались в месте смены позиции,и в новый айтем тоже переносились на момент его начала.
что нужно добавить в скрипт и в какую часть кода, что-бы не включался loop source?
Добавил,ссылка та же.
 
  • Like
Реакции: Dimson
Спасибо, что прониклись идеей и поверили в её реальность. Но идея - это всего лишь идея, а вы проделали серьёзную работу, да ещё и ряд достаточно глобальных новшеств и возможностей проверили и реализовали - ими ведь теперь и в других ситуациях можно пользоваться.
Нужно еще сделать,чтобы при циклической(и не циклической тоже) записи при смене позиции неоконченные ноты заканчивались в месте смены позиции,и в новый айтем тоже переносились на момент его начала.
Это не так просто видимо будет и не уверен, что нужно.
А если нажатые ноты в момент переноса позиции были сняты, что и как делать и как ловить это?
И зачем писать, оставшиеся нажатыми ноты при возврате цикла в начало? Ведь как правило их нажатость будет результат ошибки исполнителя.
[DOUBLEPOST=1447953440,1447939107][/DOUBLEPOST]@EUGEN27771, появилось наконец то время внимательно пощупать скрипт.
Есть вопросы и замечания.
Пока самое главное - Пользователь скорее всего будет использовать функцию в готовом проекте. Ты сделал так, что трэк с плагином становится в проекте Первым и прячется, соответственно все треки в проекте сдвигаются на один. А если в этом проекте уже есть привязка все возможная не к Имени Трэков, а к их номерам? Всё улетит.
Я об этом подумал, потому как на эти грабли вот наступил уже давным давно, когда новый трэк созданные (или перенесенный) в середину проекта или в его начало - рушит все привязки по номеру треков уже сделанные до этого.
Я у себя в скриптах и кастом экшинах привязываю ТОЛЬКО к Имени, но это я...
Вывод - нужно чтоб трэк с плагином в проекте становился последним. И тут есть тоже два варианта -
1. Вот как нажал Пользователь на функцию Ретро-Рек, так и получил в проекте, в его хвосте скрытый трек и дальше, если будет добовлять треки - они просто будут добовляться после скрытого.
2. Всё время следить, чтоб этот скрытый трек был последним - но это блин дефер :(
 
И зачем писать, оставшиеся нажатыми ноты при возврате цикла в начало? Ведь как правило их нажатость будет результат ошибки исполнителя.
Так работает обычная запись в цикле.
123.gif
Ноты,оставшиеся нажатыми заканчиваются в конце предыдущего айтема и переносятся в следующий.Дело в том,что при исполнении можно сыграть ноту чуточку раньше начала нового айтема,на несколько тиков например.Математически,это ошибка,но с точки зрения музыканта это вообще не ошибка.И при обычной записи программа это учитывает,потому что проще удалить лишние ноты,чем добавить новые.А в принципе,можно вообще сделать как опцию-добавлять-не добавлять.
Это не так просто видимо будет и не уверен, что нужно.
Это скорее всего будет даже проще,чем сейчас.JS собирающий все нужные данные уже сделал.А нужно будет мне,по крайней мере,может быть и еще кому-нибудь пригодится.Если сделать опцией-можно будет отключать.

трэк с плагином становится в проекте Первым и прячется
Только так.Вообще-то,можно сделать любым,это пара секунд,но будут неясности.
У любого проекта только одна стабильная точка отсчета для треков-это первый трек и всегда известно,что там висит JS-плагин и его не выключишь случайно,не заглушишь и не удалишь и т.п.В этом причина.
А если в этом проекте уже есть привязка все возможная не к Имени Трэков, а к их номерам? Всё улетит.
Мало кто делает такие сложные привязки,а тот кто делает без проблем сможет разобраться и перенести трек в любое место проекта.
 
Это скорее всего будет даже проще,чем сейчас.JS собирающий все нужные данные уже сделал.А нужно будет мне,по крайней мере,может быть и еще кому-нибудь пригодится.Если сделать опцией-можно будет отключать.
Как опцию - нормально!
Мало кто делает такие сложные привязки,а тот кто делает без проблем сможет разобраться и перенести трек в любое место проекта.
Тоже согласен.
 
Народ подскажите как реализовать такие действия:
1) вставить в Первый слот fx (melodyne, autotune) на выделенном треке(ах) (допустим там уже присутствуют плагины )
2) Все то же самое, только under cursor
Заранее огромное спасибо
 
1) вставить в Первый слот fx (melodyne, autotune) на выделенном треке(ах)

Добавлять эффекты на треки можно в Cycle Actions с помощью команды CONSOLE с добавлением "x" и названия эффекта
Например, чтобы добавить Ni Massive, можно ввести
CONSOLE x Massive
можно, например, написать очень нехитрый кастом, который будет выполнять 3 действия
1) добавит на выделенные треки эффект
2) выделит этот эффект
3) переместит этот эффект вверх, например, 10 раз (и если мы не добавляем в цепь больше 10 эффектов, то перемещаемый эффект становится первым в цепи)
должно получиться следующее
upload_2015-11-20_8-42-49.png

соответственно, добавить в начало кастома выделение трека под курсором
upload_2015-11-20_8-41-52.png
 
Последнее редактирование:
  • Like
Реакции: Mateush1982
@Mateush1982, Да очень просто, насчет under cursor незнаю
Итак, для этого понадобится SWS расширения, гуглим устанавливаем.

Далее...Безымянный.jpg
находим нужный слот Снимок.JPG и назначаем на этот экшн любую кнопку.
[DOUBLEPOST=1447991597,1447991460][/DOUBLEPOST]Уже ответили :)
 
  • Like
Реакции: lil-burn
@lil-burn, серьезно?) давно вроде обсуждали тут...
хотя в Рипере можно +100500 спопсобов придумать)
 
@elektrozz, смутило слово slot, подумал сначала, что resources сам по себе умеет добавлять цепь в определенный "слот", в т.ч. в начало цепи эффектов трека, вопрос-то был именно в этом. Сейчас покурил, и насколько понял, все-таки не умеет.
 
Возвращаясь к теме задержек (PDC) в Рипере:
Вопрос наверное к @@Michael, но может и у @EUGEN27771 какие-то новые идеи есть -
как получить доступ к PDC каждого из использованных в Проекте плагина? Есть ли такая возможность через хоть что-то?
Если такая возможность есть, то можно было-бы попробовать исправить досадную особенность Рипера - выставлять для плагина с PDC в 2 spl задержку кратную хосту.
Это, кстати, наиболее существенно сказывается на использовании сложного роутинга внутри трэкового, вот для которого сейчас @@Michael пытается сделать удобный GUI.
Я в общем боялся, что при использовании плагинов с задержкой в параллельной схеме на одном треке появится Рассинхрон - проверил, не появляется.
Но все задержки плагинов работающих в паралельных каналах - складываются, а это безусловно не правильно.
Если бы был доступ к PDC, то можно было-бы много чего подправить в работе Рипера при необходимости использования малых задержек.
 
@lil-burn, автоматически при создании чейна в директории в слот не добавляет, но если в ресурсах нажать auto-fill добавит все чейны по слотам.
 
В API для PDC ничего нет.
Это я знаю. Но может как-то иначе можно от плагина эту инфу получить. Рипер же её получает и она есть в куче мест.
[DOUBLEPOST=1448023431,1448016823][/DOUBLEPOST]
А как папку скриптом создать, и возможно ли?
И вообще манипуляции уже с имеющимися папками, файлами возможны? Хотябы перенос или копирование.
 
Насколько я понял, Рипер её по факту высчитывает, т.е. указать её нельзя (вроде).

А как папку скриптом создать, и возможно ли?
И вообще манипуляции уже с имеющимися папками, файлами возможны? Хотябы перенос или копирование.
В EEL не знаю, в Lua os.execute это всё делает, я это использовал тут (строки 72-87).
 
Последнее редактирование:
  • Like
Реакции: Aleksandr Oleynik
В EEL не знаю, в Lua os.execute это всё делает, я это использовал тут (строки 72-87).
:(
Я уже не первый раз сталкиваюсь с необходимостью садиться за LUA....
Но я и с EEL то разбираюсь больше по принципу Copy-Paste и помощь друга.....
Просто глядя на то, как мою идею реализовал Женя, сделав скрипт, который по сути генерит ВСЁ, что нужно для сложной функции в работе которой принимает участие и JS созданный и Трэк Тэмплэйт отстроенный -
хочу свои инструментальный стэки сделать таким же образом, чтоб не объяснять Пользователю НИ ЧЕГО - запустил скрипт, ответил на пару простых вопросов - и пользуйся.
Женина работа показала, что это реально. Но вот в моём случаи нужны ещё не JS плагины в проекте и нужно создать ряд стандартных для Рипера файлов дополнительных, с которыми конечно всё проще.
Можно конечно написать какой нибуть exe файл на чём нибудь, но это опять что-то учить и разбираться, хочется средствами Рипера попробовать.
 
Насколько я понял, Рипер её по факту высчитывает, т.е. указать её нельзя (вроде).
В JSFX имеется переменная которая сообщает хосту о задержке плагина - называется pdc_delay. Доступна для записи и чтения. Если хост через неё может узнать о задержке, то по идее и скрипт наверное может.
 
@belovw, и как JS может узнать задержку VST плага стоящего перед или после него?
На сколько я знаю, каждый плагин умеет сообщать о своей задержке, она прямо прописывается разработчиками в плаге, хост её не вычисляет, а прямо считывает с VST.
Может это-же можно как-то сделать и скриптом?
 
@belovw, и как JS может узнать задержку VST плага стоящего перед или после него?
@Aleksandr Oleynik, не туда. Посыл моего поста заключается в том что по аналогии с плагинами JSFX, у VST тоже должна быть какая-то переменная, которая сообщает хосту о задержке и что возможно до неё можно дотянуться с помощью скрипта.
 
Возможно, она есть в чанке AU/VST, но пока правильно расшифровать я её не могу (base64->string вроде нормально, string->hex нужна помощь спецов).
 
Нашел на просторах рипер-форума (тред № 157668) 2 скрипта, которые должны дублировать айтемы или треки, в зависимости от фокуса
Код:
function duplicate()
(
  Undo_BeginBlock2(0);
  GetCursorContext() === 0 ? (
    Main_OnCommand(40062, 0); // duplicate tracks
    Undo_EndBlock2(0, "Track : Duplicate Tracks", -1);
  ) : (
        start = 0;
        end = 0;
        GetSet_LoopTimeRange2(0, 0, 0, start, end, 0);
        start === end ? (
          Main_OnCommand(41295, 0); // duplicate items
          Undo_EndBlock2(0, "Item : Duplicate Items", -1);
        ) : (
          Main_OnCommand(41296, 0); // duplicate selected area of items
          Undo_EndBlock2(0, "Item: Duplicate Selected Area of Items", -1);
        );
      );
);

duplicate();
этот скрипт у меня работает почему-то только для айтемов, треки не дублирует
Код:
CountSelectedMediaItems(0) > 0 ? ( // if selected items
    Main_OnCommand(41295, 0); // duplicate items
):     CountSelectedMediaItems(0) == 0 && CountSelectedTracks(0) > 0 ? ( // if no selected items and tracks selected
    Main_OnCommand(40062, 0); // duplicate tracks
);
Вообще не работает, выдает ошибку синтаксиса
Error: C:\Users\bigburn\AppData\Roaming\REAPER\Scripts\Duplicate Tracks or Items_heda.eel:1: syntax error: 'ountSelectedMediaItems(0) <!> 0 ( if selected item'
в чем может быть дело
 
Хотел бы опять поднять старый вопрос, на который так и не нашёл решение -
Можно ли и как сделать подсветку Скрипту с defer (который работает пока не остановишь) -
On_Off_Lighting.gif
 
Aleksandr Oleynik,
Код:
function run ()
  -- сделать что-нибудь
  reaper.defer(run)
end

function exitnow()
  _, _, sectionID, cmdID = reaper.get_action_context()
  reaper.SetToggleCommandState(sectionID, cmdID, 0)
  reaper.RefreshToolbar2(sectionID, cmdID)
  gfx.quit()
end

_, _, sectionID,cmdID = reaper.get_action_context()
reaper.SetToggleCommandState(sectionID, cmdID, 1)
reaper.RefreshToolbar2(sectionID, cmdID)

reaper.atexit(exitnow)
run()
 
Последнее редактирование:
@@Michael, а в EEL?
этот lua делает ТО ЧТО НУЖНО (мелкую ошибку только подправил, лишняя запитая в строке -
_, _, ,sectionID,cmdID = reaper.get_action_context()).
Но я просто не перепишу гору кода из EEL в LUA :(

PS: СПАСИБО!!!!! Получилость перевести в eel этот скрипт! Очень полезная функция!
Во-первых, просто видно когда скрипт работает, а когда нет. Во-вторых, если этой функции нет, то я уже сто раз сталкивался с проблемами при отладке скриптов с defer - когда забываешь остановить один скрипт и запускаешь второй - и они друг другу мешают, а ты как дурак пытаешься разобраться что происходит.
PHP:
function run() (
tr = GetTrack(0, 2); //сделать что-нибудь
GetTrackUIVolPan(tr, volumeOut, panOut); //сделать что-нибудь
  defer("run()");
);

function exitnow() (
  get_action_context(#filename,sectionID,cmdID,mode,resolution,val);
  SetToggleCommandState(sectionID, cmdID, 0);
  RefreshToolbar2(sectionID, cmdID);
  gfx_quit();
);

get_action_context(#filename,sectionID,cmdID,mode,resolution,val);
SetToggleCommandState(sectionID, cmdID, 1);
RefreshToolbar2(sectionID, cmdID);
atexit("exitnow()");
run();
 
Последнее редактирование:
Возможно ли, находясь в медиа эксплорере рипера (например, перебирая сэмплы), запускать экшены из других секций, в частности из секции Main? Например, конкретная задача - воспроизводить/останавливать проект (экшен Transport: play/stop) нажатием на пробел непосредственно из окна медиа эксплорера. PS: насколько понимаю, без скрипта это не решить.
 
@lil-burn, можно,скрипт из одной строки
Main_OnCommand(int command, int flag)
int command=ID экшна из основного окна.
int flag=0,не помню что значит,просто ноль поставьте.
 
  • Like
Реакции: lil-burn

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