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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
@Aleksandr Oleynik,
PHP:
count=0;
count2=0;

function run(val)
(get_action_context(#filename,sectionID,cmdID,mode,resolution,val);

val!=val2 ?
  (
    OscLocalMessageToHost("/track/1/volume",(val/resolution));//volume(track1)
    get_action_context(#filename,sectionID,cmdID,mode,resolution,val2);
    count=count+1;
  
   );
  defer("run();");
);
defer("run();");
Это очень старый пример,я смотреть ничего не стал,как было,так и выкладываю.Кто-то давно очень просил,потом нашли другое решение,а это осталось,в целом по нему можно понять механизм,а дальше-делеть по-нормальному
 
  • Like
Реакции: Aleksandr Oleynik
@EUGEN27771, насколько понял, он настраивает громкость трека, но как конкретно - непонятно.
Вот нашел скрипт, которым можно регулировать громкость айтемов с помощью колеса
Код:
function VAL2DB(x)(
  x < 0.0000000298023223876953125 ? -150 : max(-150, log(x)* 8.6858896380650365530225783783321);
);
function DB2VAL(x) ( exp((x)*0.11512925464970228420089957273422 ));
want_item = 1; // set to 0 for take volume rather than item volume
cnt=0;
tr=0;
get_action_context(#foo,0,0, mode, res, val);
val != 0 ? loop(GetNumTracks(),
  trh = GetTrack(0,tr);
  idx=0;
  loop(GetTrackNumMediaItems(trh),
    item = GetTrackMediaItem(trh,idx);
    IsMediaItemSelected(item) && (want_item || (tk = GetActiveTake(item))) ? (
      vol = want_item ? GetMediaItemInfo_Value(item,"D_VOL") : GetMediaItemTakeInfo_Value(tk,"D_VOL");
      ph = vol < 0.0;
      vol = DB2VAL(VAL2DB(abs(vol)) + (val > 0 ? 0.5 : -0.5));   
      want_item ? SetMediaItemInfo_Value(item,"D_VOL",vol) : SetMediaItemTakeInfo_Value(tk,"D_VOL",ph ? -vol : vol);    
      cnt+=1;
      z=1;
    );
    idx+=1
  );
  tr+=1
);
cnt ? UpdateTimeline();
 
Та я пока вот и не могу понять этого механизма...
Как скриптом услышать midi сигнал входной?
Что чем управляет и за каким сигналом следит.

PS: Всё! Врубился! СПАСИБО!
Вообше-то круто! Ни какого OSCII-bot по факту и не нужно.
Только в скрипте defer не очень ясно зачем, он меня и сбил. Он бы нужен был, если бы фидбэк сделать.
В общем если просто внешним фейдером обучить экшин для громкости первого трека - то вот так -
PHP:
function run() (
get_action_context(#filename,sectionID,cmdID,mode,resolution,val);
    OscLocalMessageToHost("/track/1/volume",(val/resolution)); //volume(track1)   
);

run();
 
Последнее редактирование:
Вообще зашел сюда написать, что экшены мьюта и соло работают некорректно с группами треков, напр. если полярно сгруппированы мьюты треков 1 и 2 и находятся в состояниях допустим 1 - мьют вкл, 2 - мьют выкл, то при выделении одного из этих треков и запуске toggle mute selected tracks (через экшен, не тыкая на кнопку мьют), экшен сбросит полярность сгруппированных элементов
toggle mute bug.gif
если есть идея по mute tracks obeyng grouping, который работал бы и для полярно сгруппированных элементов, было бы оч здорово
 
Последнее редактирование:
он настраивает громкость трека, но как конкретно - непонятно.
Очень просто - импортируете его и обучаете на внешнюю миди команду или колесо мыши и всё.
PS: Не с мышёй погарячился - видимо для мыши нужно скрипт переписывать...
Но от внешнего CC midi фейдера всё прекрасно пашет
 
Последнее редактирование:
Изначально для миди было,я не помню уже,общий смысл-то понятен.Для мыши не знаю,разбираться пока нет возможности
 
lil-burn,
Код:
function action(id) reaper.Main_OnCommand(id, 0) end
_,_,_,_,_,_,val = reaper.get_action_context()
if val > 0 then action(1012) else action(1011) end

Aleksandr Oleynik,
Код:
is_new_value,filename,sectionID,cmdID,mode,resolution,val = reaper.get_action_context()

function print(val) if val ~= nil then reaper.ShowConsoleMsg(tostring(val)..'\n') end end
if is_new_value then is_new_value_s = 'true' else is_new_value_s = 'false' end

print('info:'..'\n'..[[val will be set to a relative or absolute value depending on mode (=0: absolute mode, >0: relative modes).
resolution=127 for 7-bit resolution, =16383 for 14-bit resolution.
Notes: sectionID, and cmdID will be set to -1 if the script is not part of the action list.
mode, resolution and val will be set to -1 if the script was not triggered via MIDI/OSC.]]..'\n')

print('is_new_value: '..is_new_value_s)
print('filename:     '..filename)
print('sectionID:    '..sectionID)
print('cmdID:        '..cmdID)
print('mode :        '..mode)
print('resolution:   '..resolution)
print('val:             '..val)
 
Последнее редактирование:
lil-burn,
Код:
function action(id) reaper.Main_OnCommand(id, 0) end
_,_,_,_,_,_,val = reaper.get_action_context()
if val > 0 then action(1012) else action(1011) end
Это гениально! Вот сижу играюсь) назначил на колесо плей-стоп, а что - между прочим, тоже прикольно) Еще бы возможность менять назначения горячих клавиш с помощью скриптов - вообще рай был бы, но думаю все и так идет к этому)
 
Я вот выпил немного,и подумал,запустил тут 1000 буферов(26 часов),наверно я идиот,но оказалось,все сработало,сначала слегка тормознуло кстати,но дальше пошло как по нотам,это вообще великолепно.
Вот как
5.gif
Это,блин,26 часов беспрерывной записи в фоне.На моем дрючке,конечно,проц и память подгружает,но на современных компах будет практически незаметно.
С чем всех и поздравляю.
Что могу по итогу сказать-мы имеем практически неограниченную(в разумных пределах) запись в фоне,как миди,так и аудио.С аудио надо будет допилить,но это уже мелочи жизни.
Спасибо всем за участие.
[DOUBLEPOST=1449183278,1449180510][/DOUBLEPOST]@Aleksandr Oleynik, @lil-burn, по моему,кроме меня,только вам это интерено,спасибо за внимание.В итоге у нас будет полная запись в фоне и миди и аудио,с аудио надо допиливать,но будет.
 
@EUGEN27771, это Вам и Михаилу спасибо, вы умеете делать очень крутые вещи! а народ не прочухал еще просто, мне кажется у многих крышу сносит от возможностей рипера (кстати, вроде это Александра слова). Сносит в хорошем смысле, хочется все попробовать, и что-то упускается по-началу. Но со временем полезные вещи станут еще ценнее и популярнее, завоюют сердца людей и Джастин однажды запустит какой-нибудь ваш скрипт и скажет: "Блин, это определенно надо добавить!"
 
  • Like
Реакции: EUGEN27771
@lil-burn, какие есть интересные идеи?Я в последннее время чего-то от музыки все дальше,но если что-то понравится и это реально,можно попытаться сделать,только не одноразовое.
 
@EUGEN27771, спасибо, весь в работе самый первый ретро скрипт ваш)
Вчера заметил что не хватает pass through key to main window экшена в секции Media Explorer.
Очень нужная вещь, выбрал луп семпл, бац по пробелу синхронно все играет, а так приходится ждать начало первого такта.
 
@elektrozz,
самый первый ретро скрипт ваш)
Рекомендую,возьмите последний,он гораздо лучше,там пишется вообще все и с учетом всех позиций,он лучше даже обычной записи,именно сам для себя делал,ссылки те же,обновлено
 
по моему,кроме меня,только вам это интерено,спасибо за внимание.В итоге у нас будет полная запись в фоне и миди и аудио,с аудио надо допиливать,но будет.
Женя, интересно может и ещё кому-то, но они просто боятся того уровня, на которое это всё вышло.
Если тебе удастся сделать однокнопочную утилиту - ею будут пользоваться МНОГИЕ!
И да, поддержу @lil-burn, если бы не вы с Михаилом - фиг бы я сейчас допиливал свой Скриптовый вариант Инструментального Стэка.
Который тоже, по большому счёту, мало кому интересен.... Так что... - это участь энтузиастов :)
[DOUBLEPOST=1449187693,1449187581][/DOUBLEPOST]@EUGEN27771, у меня идей на пару лет реализации хватит.
Я вот писал тебе в личке - сделать ЧЕЛОВЕЧЕСКИЙ FX Chain Snapshot, а не то, что сделали SWS.
Я писал, что SWS тупо запоминает ВСЕ!!!!!!!! параметры и потом ресторит ВСЕ!!!! параметры ВСЕХ плагинов на отмеченных треках. А реально от текущего состояния к тому, на которое нужно Ресторить, может отличаться один параметр в одном плаге.
 
Последнее редактирование:
  • Like
Реакции: EUGEN27771
@EUGEN27771, я то думал что еще не готов. спасибо что сообщили, обязательно скачаю и проверю.
 
@Aleksandr Oleynik, Вам спасибо за поддержку
если тебе удастся сделать однокнопочную утилиту
Если мне не надоест,то там не проблема все объединить,изначально так задумывал,там большинство функций одинаковые,только делать разницу между миди-треком и аудио-треком,это очень просто.Главное,чтобы механизм был похожим.Изначально-проблемой точно была длина аудио-буфера,сейчас этого нет,но все равно нет определенности-какой именно длины оптимально?
[DOUBLEPOST=1449192146,1449188178][/DOUBLEPOST]Вот я сижу пьяный и думаю-а может быть попробовать в С++ разобраться,полазить,это для меня загадка пока.Может быть я смогу там лучше сделать,он же имеет прямые входы-выходы,я как понимаю,он их их из системы берет?
[DOUBLEPOST=1449192642][/DOUBLEPOST]Давайте сделаем тему по С++.
Кто шарит в языке,пусть подсказывает по языку,ему это не трудно,а Кто шарит в Рипере- Пусть подсказывает по Риперу,и все!!!
 
Женя, C++ конечно круто, и в нём разобравшись можно и VST писать.
Но мне кажется, что быстро это не получиться.
Я вот уже три попытки делал перепрыгнуть с eel на lua - и все пока провалились.
 
делать ЧЕЛОВЕЧЕСКИЙ FX Chain Snapshot
Это все равно придется каждое значение проверять,потому и сделано так.
А реально от текущего состояния к тому, на которое нужно Ресторить, может отличаться один параметр в одном плаге.
Если применить другой механизм,то есть запоминать только измененные параметры,тогда возможно,но тогда и механизм сложнее,нужно постоянно учитывать информацию об изменениях,оно не стоит свеч
 
Lua синтаксически намного проще и во многом логичней EEL, не говоря уже том, сколько по этому языку информации, в том числе и на русском языке.
 
Lua синтаксически намного проще и во многом логичней EEL, не говоря уже том, сколько по этому языку информации, в том числе и на русском языке.
Михаил, всё это и вижу уже и понимаю, но пишу проект не простой изначально в eel и перевести весь код в lua для меня пока тяжело. Особенно если учесть тот факт, что мне помогает периодически (в сложных местах) старший сын и я не весь код понимаю на 100%, так как он делает это с многоуровневой логикой.
Но да - я понимаю, что в eel писать ни кто не будет при наличии lua.
 
Женя, C++ конечно круто, и в нём разобравшись можно и VST писать.
Но мне кажется, что быстро это не получиться.
Я вот уже три попытки делал перепрыгнуть с eel на lua - и все пока провалились.
Быстро точно не получится,согласен полностью,это даже не обсуждается.
Главное зацепиться,я пока не нашел за что,но это реально.
eel с lua-это другое,тут еще спорный вопрос,что лучше,ell однозначно быстрее,были тесты,lua,конечно, вариативнее.В скриптах все равно сложно решать такие задачи,где lua очень сильно нужен.
Михаил,конечно,делает очень сложные вещи в своих скриптах,такое на eel выглядело бы очень запутано,если это вообще возможно,это супер-круто!
Есть определенная грань в eel,когда уже сам начинаешь терять нить,и потом трудно разобраться.
Чего все не могут по-началу понять-это обращение с памятью.
Тут нет массивов,но если хорошо подойти,то можно с памятью сделать хоть 20-мерные таблицы,проблема,только в том,что объем ограничен.Не знаю,как в lua,может быть и там ограничения есть.
[DOUBLEPOST=1449220119,1449219879][/DOUBLEPOST]
я понимаю, что в eel писать ни кто не будет при наличии lua.
eel в три раза быстрее,если что-то важное и ресурсоемкое,то на eel именно и надо писать
 
eel в три раза быстрее,если что-то важное и ресурсоемкое,то на eel именно и надо писать
Спасибо Женя! Я этого не знал и для меня это ооооочень важно. Значит eel. А как ты освоишь C++, буду тоже пробовать :)
 
Парни, нужна 100% информация.
Для меня это ооочень важно, скрипт у меня ведь в дефере висит непрерывно.
 
Aleksandr Oleynik, EUGEN27771,

schwa (один из нынешних программеров Рипера):
My recommendation in general would be to use Lua except in cases where performance is critical, such as real-time audio processing, in which case JS/EEL is more appropriate.

Т.е. для аудио разумеется JS=EEL использовать (собственно, а как иначе), а real-time аудио у нас в скриптах нигде и нет, поскольку частота обновлений defer не привязана к частоте дискретизации.
 
Последнее редактирование:
Я точно наблюдал ситуацию при которой частота дефера в eel-е уменьшается при нагрузке вычислениями в скрипте.
[DOUBLEPOST=1449224645,1449223767][/DOUBLEPOST]@@Michael, вы ведь можете придумать какой-то синтетический тест с дефером и общением с Рипером, что собственно мы и пишем в скриптах? Проверить, сделав его идентично в eel и lua
 

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