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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
@naash_g, для вас было бы идеально иметь один скрипт на колесо, который в зависимости от контекста (курсор над TCP, MCP или Items) везде изменял бы громкость шагом в 1 Db. К сожалению, я не являюсь опытным "скриптостроителем" и не смогу вам пока помочь, но может, кто-нибудь, всё-таки, откликнется из умельцев.
 
да да, мне такое и нужно))
Так тебе никто и не помог.
Скрипты работают на айтемах,треках и микшере*.
*Первых два скрипта в микшере работают, а третий который на колесо мыши к сожалению в микшере не работает, потому что поломалось апи функция "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()
 
Последнее редактирование:
потому что поломалось апи функция "get_action_context" и надо писать по этому поводу разрабам.
Там похоже вообще API не видит зону Микшера ни какое!
GetMousePosition() ведь тоже не работает на микшере
 
@Archie's,спасибо огромное! Если починят-сможете сделать? или он готов, только нужно разрабов дождаться?
Еще вопрос-как мне отсюда эти скрипты скачать правильно без ошибок?
 
А был скрипт/экшн для группирования панорамы и уровня выбранных треков?
Нужен ещё такой, чтобы добавлял Pan Reverse для выделенных треков, уже состоящих в группах.
 
@naash_g, если вас интересует именно как правильно скопировать, то, если развернуть код, в правом верхнем углу есть специальная кнопка. Но если вас интересует вся процедура, то нужно создать через экшн лист новый скрипт, поместить туда скопированный код и сохранить его.
На всякий случай мультик:

Copy_new_script.gif
 
  • Like
Реакции: naash_g
Может странный вопрос. Как мне вернуть нормальное отображение кода скрипта? С номерами строк, символами и так далее...
Мне кажется раньше было не так:
 

Вложения

  • Снимок экрана 2021-02-06 в 23.21.31.jpg
    Снимок экрана 2021-02-06 в 23.21.31.jpg
    290,6 KB · Просмотры: 131
Подскажите как настроить, чтобы кастомный плагин открывался в цепи. До обновления 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
 

Вложения

  • Gif.gif
    Gif.gif
    60,8 KB · Просмотры: 125
Добрый день. Ребят, помогите допилить экшн, пожалуйста.
Тейп стоп экшн. Он применяет js fx (spin down) к айтему. И хотелось бы, чтобы параметр Time сразу появлялся на айтеме в виде автоматизации (Как на фото). Заранее спасибо!

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

Вложения

  • Gif.gif
    Gif.gif
    6,8 KB · Просмотры: 116
Помогите, кто-нибудь советом, пожалуйста. Есть начало скрипта. Вот код, с помощью которого я получаю высоту выделенных нот в миди эдиторе:
Код:
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.
Можно, в принципе и сразу, типа, если питч такой-то (перечислить все цифры всех возможных нот данного аккорда), то действие такое-то. Но это будет не совсем нормально для дальнейшей работы со скриптом.
 
Парни, не могу найти аналог , Reduce Number of Points (Envelope), в midi СС , в эдиторе. Реквест есть, https://forum.cockos.com/showthread.php?t=237600. Может быть, уже что то сделали с этим запросом, и есть скрипт?
 
Последнее редактирование:
  • Like
Реакции: riko
Помогите, кто-нибудь советом, пожалуйста. Есть начало скрипта. Вот код, с помощью которого я получаю высоту выделенных нот в миди эдиторе:
Код:
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
Просто хотел отписать, насчет старенького, но очень правильного и надежного скрипта - 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
 
Последнее редактирование:
Просто хотел отписать, насчет старенького, но очень правильного и надежного скрипта - 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*
 
Вместо AND
@Trasher, спасибо большое! Буду пробовать.
Вместо AND только OR(мой косяк,т.к. условие с оператором and всегда будет false при любом значении value).Если честно получится портянка(не есть хорошо)По поиску определения ноты отдельной ,проще делить с остатком(оператор %[будет находить имя ноты,но без октавы,для октавы придется усложнять прописывать отдельно])В Lua и API Reapera я не шарю,попробую на EEL.
 
@Trasher, спасибо, ещё не брался, чуть позже буду разбираться. Октава на самом деле не нужна. Мне наоборот нужно обобщить. Если определения более сложных аккордов, там важнее просто самая нижняя нота, так как аккорды по басу определяются в большинстве случаев. Но это не сейчас. Пока мне достаточно информации. Я очень слаб пока в создании скриптов. Уже большое спасибо)))) Если что, я отпишусь))) Или переспрошу))))
 
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
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;
Нужным делом кстати занимаетесь))Удачи в разработке!
Ещё раз спасибо!!! Отпишусь, что получится.
 
В похожем, от того же разработчика скрипте Smooth CCs, то же самое можно сделать? Заменил в ковычках название "MIDI Velocity/CC tool". на "Smooth CCs" выдаёт ошибку 'JS_Window_AttachTopmostPin' argument 1: expected void*
У меня так работает
1613951937262.png

1613951954280.png
 
  • Like
Реакции: riko
Коллеги, подскажите пожалуйста! Я в теме @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

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

Вложения

то режет все айтемы вертикально, сверху и снизу. Есть же какой-то код - правило, который будет разрешать разрезать айтем только когда курсор мыши находится над айтемом, а не над треком?
В начало скрипта добавь
Код:
screen_x, screen_y = reaper.GetMousePosition()
item, take = reaper.GetItemFromPoint( screen_x, screen_y, true )
if not item then return end
 
  • Like
Реакции: YuriOl
@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);
 
Что-то не получается
Ой я не заметил что твои скрипты ееэль, исправь свои на луа, данный например код вообще без условий, просто исправь расширения на луа и в коде комментарии переделать, переднии знаки. Или нужно кого-либо просить чтобы моё условие переписали в ееэль, я бы и сам одну строку переписал, но не могу сейчас
 
  • Like
Реакции: YuriOl

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