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

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.095
700
113
53
Киев
@naash_g, для вас было бы идеально иметь один скрипт на колесо, который в зависимости от контекста (курсор над TCP, MCP или Items) везде изменял бы громкость шагом в 1 Db. К сожалению, я не являюсь опытным "скриптостроителем" и не смогу вам пока помочь, но может, кто-нибудь, всё-таки, откликнется из умельцев.
 

Archie's

Well-Known Member
24 Окт 2017
1.936
1.291
113
да да, мне такое и нужно))
Так тебе никто и не помог.
Скрипты работают на айтемах,треках и микшере*.
*Первых два скрипта в микшере работают, а третий который на колесо мыши к сожалению в микшере не работает, потому что поломалось апи функция "get_action_context" и надо писать по этому поводу разрабам.
Чем смог, тем помог.

JavaScript:
    --Archie_var; Volume down on tracks or items by 1 dB.lua
  
  
    -------------
    local DB = -1
    -------------
  
  
  
    ---------------------------------------------------------
    local function no_undo();reaper.defer(function()end);end;
    ---------------------------------------------------------
  
  
    ----------------------------------------------------
    local screen_x,screen_y = reaper.GetMousePosition()
    local item, take = reaper.GetItemFromPoint(screen_x,screen_y,false)
    local track,info = reaper.GetTrackFromPoint(screen_x,screen_y)
  
    if item then
      
        local vol = reaper.GetMediaItemInfo_Value( item, 'D_VOL' )
        local vol = 20 * math.log(vol,10);
        reaper.SetMediaItemInfo_Value(item,"D_VOL",(10^((vol+DB)/20)))
      
    elseif info == 0 then
        if track then
      
            local vol = reaper.GetMediaTrackInfo_Value( track, 'D_VOL' )
            local vol = 20 * math.log(vol,10);
            reaper.SetMediaTrackInfo_Value(track,"D_VOL",(10^((vol+DB)/20)))
        end
    end
    reaper.UpdateArrange()
    ----------------------------------------------------
    no_undo()
JavaScript:
    --Archie_var; Volume up on tracks or items by 1 dB.lua
  
  
  
    ------------
    local DB = 1
    ------------
  
  
  
    ---------------------------------------------------------
    local function no_undo();reaper.defer(function()end);end;
    ---------------------------------------------------------
  
  
    ----------------------------------------------------
    local screen_x,screen_y = reaper.GetMousePosition()
    local item, take = reaper.GetItemFromPoint(screen_x,screen_y,false)
    local track,info = reaper.GetTrackFromPoint(screen_x,screen_y)
  
    if item then
      
        local vol = reaper.GetMediaItemInfo_Value( item, 'D_VOL' )
        local vol = 20 * math.log(vol,10);
        reaper.SetMediaItemInfo_Value(item,"D_VOL",(10^((vol+DB)/20)))
      
    elseif info == 0 then
        if track then
      
            local vol = reaper.GetMediaTrackInfo_Value( track, 'D_VOL' )
            local vol = 20 * math.log(vol,10);
            reaper.SetMediaTrackInfo_Value(track,"D_VOL",(10^((vol+DB)/20)))
        end
    end
    reaper.UpdateArrange()
    ----------------------------------------------------
    no_undo()
JavaScript:
    --Archie_var; Volume change on tracks or items by 1 dB (mouse wheel).lua
  
  
    ------------
    local DB = 1
    ------------
  
  
  
  
    ---------------------------------------------------------
    local function no_undo();reaper.defer(function()end);end;
    ---------------------------------------------------------
  
  
    ----------------------------------------------------
    local _,_,_,_,_,_,val = reaper.get_action_context()
    if val <= 0 then
        DB = DB-DB*2
    end
    ----------------------------------------------------
  
   
    ----------------------------------------------------
    local screen_x,screen_y = reaper.GetMousePosition()
    local item, take = reaper.GetItemFromPoint(screen_x,screen_y,false)
    local track,info = reaper.GetTrackFromPoint(screen_x,screen_y)
  
    if item then
      
        local vol = reaper.GetMediaItemInfo_Value( item, 'D_VOL' )
        local vol = 20 * math.log(vol,10);
        reaper.SetMediaItemInfo_Value(item,"D_VOL",(10^((vol+DB)/20)))
      
    elseif info == 0 then
        if track then
      
            local vol = reaper.GetMediaTrackInfo_Value( track, 'D_VOL' )
            local vol = 20 * math.log(vol,10);
            reaper.SetMediaTrackInfo_Value(track,"D_VOL",(10^((vol+DB)/20)))
        end
    end
    reaper.UpdateArrange()
    ----------------------------------------------------
    no_undo()
 
Последнее редактирование:

Aleksandr Oleynik

Well-Known Member
16 Янв 2007
25.964
19.027
113
59
Киев
потому что поломалось апи функция "get_action_context" и надо писать по этому поводу разрабам.
Там похоже вообще API не видит зону Микшера ни какое!
GetMousePosition() ведь тоже не работает на микшере
 

naash_g

Mixing...
5 Авг 2008
2.427
527
113
Che...
@Archie's,спасибо огромное! Если починят-сможете сделать? или он готов, только нужно разрабов дождаться?
Еще вопрос-как мне отсюда эти скрипты скачать правильно без ошибок?
 

drumwizard

Well-Known Member
18 Дек 2011
561
263
63
43
Санкт-Петербург
А был скрипт/экшн для группирования панорамы и уровня выбранных треков?
Нужен ещё такой, чтобы добавлял Pan Reverse для выделенных треков, уже состоящих в группах.
 

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.095
700
113
53
Киев
@naash_g, если вас интересует именно как правильно скопировать, то, если развернуть код, в правом верхнем углу есть специальная кнопка. Но если вас интересует вся процедура, то нужно создать через экшн лист новый скрипт, поместить туда скопированный код и сохранить его.
На всякий случай мультик:

Copy_new_script.gif
 
  • Like
Реакции: naash_g

Martin111

Member
18 Фев 2015
444
16
18
51
Подскажите как настроить, чтобы кастомный плагин открывался в цепи. До обновления sws всё работало! На гиф загрузил синт, покрутил ручку, фокус сместился. (Нужно чтобы открылся Pro Q3)
Такой Custom: Vst
SWS/S&M: Resources - Paste FX chain to selected tracks, slot 1
SWS/S&M: Show FX chain for selected tracks (selected FX)
SWS/S&M: Select last FX for selected tracks
 

Вложения

  • 60,8 KB Просмотры: 21

Slightman

New Member
1 Дек 2015
1
0
1
36
Добрый день. Ребят, помогите допилить экшн, пожалуйста.
Тейп стоп экшн. Он применяет js fx (spin down) к айтему. И хотелось бы, чтобы параметр Time сразу появлялся на айтеме в виде автоматизации (Как на фото). Заранее спасибо!

196779
 

Martin111

Member
18 Фев 2015
444
16
18
51
Подскажите пожалуйста скрипт, возвращающий фокус на выделенный плагин в окне эффектов? Нужно для того, чтобы следующий загружаемый "кнопкой" плагин не просто загружался, но и открывался! Как писал ранее, перестало работать после обновления sws.
 

Вложения

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.095
700
113
53
Киев
Помогите, кто-нибудь советом, пожалуйста. Есть начало скрипта. Вот код, с помощью которого я получаю высоту выделенных нот в миди эдиторе:
Код:
function Msg(param)
reaper.ShowConsoleMsg(tostring(param).."\n")
end
reaper.Undo_BeginBlock()
local hwnd = reaper.MIDIEditor_GetActive()
local take = reaper.MIDIEditor_GetTake(hwnd)
local retval, notecnt, _, _ = reaper.MIDI_CountEvts(take)
if notecnt > 0 then
for i = 0, notecnt-1 do
retval, sel, _, startpos, endpos, _, pitch, _ = reaper.MIDI_GetNote(take, i)
if sel then
Msg("Midi_note = "..pitch)
end
end   
end
reaper.Undo_EndBlock("Get_midi_note", -1)
Выглядит это так:
Get midi note.gif


Вопрос вот в чём. Известен питч всех выделенных нот. Теперь нужно ввести определение, что если питч, например, 36 или 48 или 60( и так далее), то это C, а если питч 43 или 55 или 67 ( и так далее), то это E, (ну и по всем нотам). А дальше - если питч - С +E+G, то это С, а если D+F+A, то это Dmin, и так далее, то есть, в зависимости от того, в какой аккорд складываются выделенные ноты будет какое-то действие с различными вводными, в зависимости от аккорда.
Не могу понять, как написать такое условие. Подскажите, кто-нибудь))
Именно, как оформить, что С = 36 или 48 или 60 и так далее, а С (до мажор) = C+E+G.
Можно, в принципе и сразу, типа, если питч такой-то (перечислить все цифры всех возможных нот данного аккорда), то действие такое-то. Но это будет не совсем нормально для дальнейшей работы со скриптом.
 

riko

Well-Known Member
27 Авг 2007
486
263
63
45
Парни, не могу найти аналог , Reduce Number of Points (Envelope), в midi СС , в эдиторе. Реквест есть, https://forum.cockos.com/showthread.php?t=237600. Может быть, уже что то сделали с этим запросом, и есть скрипт?
 
Последнее редактирование:

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.095
700
113
53
Киев
  • Like
Реакции: riko

Trasher

Well-Known Member
12 Янв 2013
437
317
63
Помогите, кто-нибудь советом, пожалуйста. Есть начало скрипта. Вот код, с помощью которого я получаю высоту выделенных нот в миди эдиторе:
Код:
function Msg(param)
reaper.ShowConsoleMsg(tostring(param).."\n")
end
reaper.Undo_BeginBlock()
local hwnd = reaper.MIDIEditor_GetActive()
local take = reaper.MIDIEditor_GetTake(hwnd)
local retval, notecnt, _, _ = reaper.MIDI_CountEvts(take)
if notecnt > 0 then
for i = 0, notecnt-1 do
retval, sel, _, startpos, endpos, _, pitch, _ = reaper.MIDI_GetNote(take, i)
if sel then
Msg("Midi_note = "..pitch)
end
end 
end
reaper.Undo_EndBlock("Get_midi_note", -1)
Выглядит это так:Посмотреть вложение 197000

Вопрос вот в чём. Известен питч всех выделенных нот. Теперь нужно ввести определение, что если питч, например, 36 или 48 или 60( и так далее), то это C, а если питч 43 или 55 или 67 ( и так далее), то это E, (ну и по всем нотам). А дальше - если питч - С +E+G, то это С, а если D+F+A, то это Dmin, и так далее, то есть, в зависимости от того, в какой аккорд складываются выделенные ноты будет какое-то действие с различными вводными, в зависимости от аккорда.
Не могу понять, как написать такое условие. Подскажите, кто-нибудь))
Именно, как оформить, что С = 36 или 48 или 60 и так далее, а С (до мажор) = C+E+G.
Можно, в принципе и сразу, типа, если питч такой-то (перечислить все цифры всех возможных нот данного аккорда), то действие такое-то. Но это будет не совсем нормально для дальнейшей работы со скриптом.
Если условно то If(value EQUAL 36 AND value EQUAL 48 AND value EQUAL 60..etc)[В верхнем регистре оператор присваивания и лог оператор "И" ]
 
  • Like
Реакции: Mr_Tsonts

borisuperful

Well-Known Member
31 Янв 2013
1.844
883
113
Просто хотел отписать, насчет старенького, но очень правильного и надежного скрипта - MIDI Velocity tool. Со временем в ReaScript появилась возможность создания скрепки, чтобы окно прикрепить на виду, но эта функция делается через js_API и соответственно в обозреваемом скрипте нету. Для этого требуется добавить в конце кода следующие строчки. Можно в самом конце, можно перед run, главное после unit, иначе не инициализируется. После этого появится скрепка в шапке окна

Код:
extension_api("JS_Window_AttachTopmostPin", extension_api("JS_Window_Find", "MIDI Velocity/CC tool", 1));
Код
1613917156110.png

Скрипт
1613917934183.png
 
Последнее редактирование:

riko

Well-Known Member
27 Авг 2007
486
263
63
45
Просто хотел отписать, насчет старенького, но очень правильного и надежного скрипта - MIDI Velocity tool. Со временем в ReaScript появилась возможность создания скрепки, чтобы окно прикрепить на виду, но эта функция делается через js_API и соответственно в обозреваемом скрипте нету. Для этого требуется добавить в конце кода следующие строчки. Можно в самом конце, можно перед run, главное после unit, иначе не инициализируется. После этого появится скрепка в шапке окна

Код:
extension_api("JS_Window_AttachTopmostPin", extension_api("JS_Window_Find", "MIDI Velocity/CC tool", 1));
Код
Посмотреть вложение 197093

Скрипт
Посмотреть вложение 197097
В похожем, от того же разработчика скрипте Smooth CCs, то же самое можно сделать? Заменил в ковычках название "MIDI Velocity/CC tool". на "Smooth CCs" выдаёт ошибку 'JS_Window_AttachTopmostPin' argument 1: expected void*
 

Trasher

Well-Known Member
12 Янв 2013
437
317
63
Вместо AND
@Trasher, спасибо большое! Буду пробовать.
Вместо AND только OR(мой косяк,т.к. условие с оператором and всегда будет false при любом значении value).Если честно получится портянка(не есть хорошо)По поиску определения ноты отдельной ,проще делить с остатком(оператор %[будет находить имя ноты,но без октавы,для октавы придется усложнять прописывать отдельно])В Lua и API Reapera я не шарю,попробую на EEL.
 

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.095
700
113
53
Киев
@Trasher, спасибо, ещё не брался, чуть позже буду разбираться. Октава на самом деле не нужна. Мне наоборот нужно обобщить. Если определения более сложных аккордов, там важнее просто самая нижняя нота, так как аккорды по басу определяются в большинстве случаев. Но это не сейчас. Пока мне достаточно информации. Я очень слаб пока в создании скриптов. Уже большое спасибо)))) Если что, я отпишусь))) Или переспрошу))))
 

Trasher

Well-Known Member
12 Янв 2013
437
317
63
C++:
//input_note=?[номер ноты для которой необходимо вычислить имя]
//Note_Names[список имен нот]

desc:Find_Note_Name
slider1:Note_Number=0<0,128,1>input_note=?
slider2:0<0,11,1{C,C#,D,D#,E,F,F#,G,G#,A,A#,B}>Note_Names
options: no_meter

@slider
//Поиск имени ноты кратно 12[находим остаток согласно 12]
result_note_name = Note_Number % 12;
slider2 = result_note_name;
Нужным делом кстати занимаетесь))Удачи в разработке!
 
  • Like
Реакции: Mr_Tsonts

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.095
700
113
53
Киев
C++:
//input_note=?[номер ноты для которой необходимо вычислить имя]
//Note_Names[список имен нот]

desc:Find_Note_Name
slider1:Note_Number=0<0,128,1>input_note=?
slider2:0<0,11,1{C,C#,D,D#,E,F,F#,G,G#,A,A#,B}>Note_Names
options: no_meter

@slider
//Поиск имени ноты кратно 12[находим остаток согласно 12]
result_note_name = Note_Number % 12;
slider2 = result_note_name;
Нужным делом кстати занимаетесь))Удачи в разработке!
Ещё раз спасибо!!! Отпишусь, что получится.
 

borisuperful

Well-Known Member
31 Янв 2013
1.844
883
113
В похожем, от того же разработчика скрипте Smooth CCs, то же самое можно сделать? Заменил в ковычках название "MIDI Velocity/CC tool". на "Smooth CCs" выдаёт ошибку 'JS_Window_AttachTopmostPin' argument 1: expected void*
У меня так работает
1613951937262.png

1613951954280.png
 
  • Like
Реакции: riko

YuriOl

Well-Known Member
6 Май 2005
975
488
63
52
Луганск
www.youtube.com
Коллеги, подскажите пожалуйста! Я в теме @Archie's, проблему свою описал по его классным скриптам - Script: Archie_Item; Split (selected) item(s) under mouse cursor(`).lua... https://rmmedia.ru/threads/134701/page-56#post-2588129/ Видно что-то у меня индивидуально подглючивает при разреке айтемов при большом количестве треков, папок и малом вертикальном масштабе, раз больше ни у кого этого не происходит. Я в скриптописании пока не очень.,.)) но вот сделал для себя четыре штуки необходимые для меня, нормально работающих при моей индивидуальной проблеме кроме одного неудобства, которое преодолеть я надеюсь вы мне подскажите как.
Смысл такой.
В модификаторах я повесил скрипты на клик колёсика, - при дефолте режет и снимает выделения с айтемов, с Shift - не снимает, с Ctrl - выделяет левую часть разрезанных айтемов, а при Alt - правую сторону. Привык, - для меня логично!)
Screenshot_1.jpg

Иногда, когда случайно применю любой этот свой доморощенный)) скрипт, НО не на айтеме, а на пустом треке, то режет все айтемы вертикально, сверху и снизу. Есть же какой-то код - правило, который будет разрешать разрезать айтем только когда курсор мыши находится над айтемом, а не над треком?
Скрипты:
 

Вложения

Archie's

Well-Known Member
24 Окт 2017
1.936
1.291
113
то режет все айтемы вертикально, сверху и снизу. Есть же какой-то код - правило, который будет разрешать разрезать айтем только когда курсор мыши находится над айтемом, а не над треком?
В начало скрипта добавь
Код:
screen_x, screen_y = reaper.GetMousePosition()
item, take = reaper.GetItemFromPoint( screen_x, screen_y, true )
if not item then return end
 
  • Like
Реакции: YuriOl

YuriOl

Well-Known Member
6 Май 2005
975
488
63
52
Луганск
www.youtube.com
@Archie's,спасибо!
Что-то не получается. Я понимаю, что наверное в моих так называемых скриптах что-то не то))
Screenshot_1.jpg

Вот например мой первый, который не изменяет после разрезки выделение айтемов.
Где у меня лажа?)
Код:
/*
   * ReaScript Name: Script: YuriOl_Split (selected) item(s) at mouse cursor (No change Selection).eel
*/

screen_x, screen_y = reaper.GetMousePosition()
item, take = reaper.GetItemFromPoint( screen_x, screen_y, true )
if not item then return end 
    
Undo_BeginBlock();
PreventUIRefresh(1);
c_pos = GetCursorPosition();
Main_OnCommand(40513,0); // move edit cursor to mouse cursor
Main_OnCommand(40529,0); // Select item under mouse cursor (leaving other items selected)
Main_OnCommand(40757,0); // Split items at edit cursor (no change selection)
SetEditCurPos(c_pos, 0, 0);
PreventUIRefresh(-1);
Undo_EndBlock("Split selected items at mouse cursor",-1);
 

Archie's

Well-Known Member
24 Окт 2017
1.936
1.291
113
Что-то не получается
Ой я не заметил что твои скрипты ееэль, исправь свои на луа, данный например код вообще без условий, просто исправь расширения на луа и в коде комментарии переделать, переднии знаки. Или нужно кого-либо просить чтобы моё условие переписали в ееэль, я бы и сам одну строку переписал, но не могу сейчас
 
  • Like
Реакции: YuriOl

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