ReaScripts (скрипты для Reaper) - делимся (1 онлайн

arkaine

Active Member
13 Сен 2007
640
128
43
Подскажите, пожалуйста.

Многие экшны в Media/MIDI Item'ах предпочитаю совершать относительно Mouse Cursor'а.

И вот, например, есть

* ReaScript Name: Select all MIDI notes and events right of cursor

* Author: spk77

Который совершается относительно Edit Cursor'а:

cursor_ppq_pos = MIDI_GetPPQPosFromProjTime(take, GetCursorPosition());

Как бы заменить совершаемое действие на/относительно Mouse Cursor?

Можно было бы заморочиться и создать Custom Action, в котором сохранять позицию Edit Cursor'а, двигать Edit Cursor к Mouse Cursor'у и возвращать Edit Cursor в сохранённую позицию, но проблема в том, что если Item Zoom'нут, то такой экшн даст скачки/смены вида Item'а (позиции Zoom Scroll'а).
 

arkaine

Active Member
13 Сен 2007
640
128
43
Не в ту тему написал. Перенести бы в:
 

edkashinsky

New Member
23 Дек 2022
2
10
3
34
Всем привет! Меня зовут Эд и я саунд-дизайнер и программист. Недавно я перешел с Аблетона в Рипер и хотел бы тут делиться своими полезными скриптами. Мне по саунд-дизайну довольно часто нужно подготавливать клипы для рендера, чтобы у них по краям не было тишины. И часто это бывают клипы (типа выстрелов), у которых громкая атака и длинный затухающий хвост. И чтобы автоматизировать кроп, я написал скрипт, который делает все за меня по индивидуальным трешолдам. Но это может быть полезно не только в саунд-дизайне, но и в работе с войсоверами или другими звуковыми слоями

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

Скрипты называются: ek_Edge silence cropper и ek_Edge silence cropper (no prompt)

No-prompt-версия берет настройки из первого скрипта и обрезает выделенные айтемы без окна GUI. Очень удобно выставить низкие значения трешолда и небольшие фейды и использовать этот скрипт на хоткее. Это сильно экономит время компинга

Установить можно через рипак: https://github.com/edkashinsky/reaper-reableton-scripts
 

Вложения

robotgard

Well-Known Member
9 Сен 2018
1.476
1.927
113
может быть полезно не только в саунд-дизайне, но и в работе с войсоверами или другими звуковыми слоями
Отличная вещь.

А еще была бы удобной опция - сдвигать заодно обрезанные клипы к началу дорожки.
Это для тех ситуаций, когда массово работаешь с кучей фрагментов на разных дорожках, а после обрезки рендерить по дорожкам.
 

Vilia33

Active Member
8 Ноя 2009
418
103
43
ek_Edge silence cropper скрипт не находит у меня.Какой адрес репозитория ? подскажите
 

serpen

New Member
1 Фев 2023
20
5
3
17
Я решил поделится своими скриптами, пожалуйста напишите, если работает как-то не так или странно.


Делит каждую выделенную ноту на две при скроллинге вперед, делает одну из двух при скроллинге назад при условии что начало первой и конец второй совпадают.
Код:
function Stutter()
  local take=reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetActive())
  local _,CountEvts=reaper.MIDI_CountEvts(take)
  if CountEvts>0 then
    s={}                                --the script does not work without this table, this is how lua tables are arranged
    for nado=1,127 do          
      s[nado]={}
      s[nado][0]={}
    end
    index=0
    for i=0,CountEvts-1 do
      _,sel,muted,start,ending,chank,pitch,vel=reaper.MIDI_GetNote(take,i+index)
      if sel==true then
          --first note
          s[pitch][#s[pitch]+1]={}                                ----grouping by pitch
          s[pitch][#s[pitch]].sel=sel
          s[pitch][#s[pitch]].muted=muted
          s[pitch][#s[pitch]].start=start
          s[pitch][#s[pitch]].ending=start+(ending-start)/2
          s[pitch][#s[pitch]].chank=chank
          s[pitch][#s[pitch]].pitch=pitch
          s[pitch][#s[pitch]].vel=vel
          --second note
          s[pitch][#s[pitch]+1]={}
          s[pitch][#s[pitch]].sel=sel
          s[pitch][#s[pitch]].muted=muted
          s[pitch][#s[pitch]].start=start+(ending-start)/2
          s[pitch][#s[pitch]].ending=ending
          s[pitch][#s[pitch]].chank=chank
          s[pitch][#s[pitch]].pitch=pitch
          s[pitch][#s[pitch]].vel=vel
         
          reaper.MIDI_DeleteNote(take,i+index)
          index=index-1
       
      end
    end

    for x=1,#s do
      if #s[x]>=1 then
        for y=1,#s[x] do
          reaper.MIDI_InsertNote(
          take,
          s[x][y].sel,
          s[x][y].muted,
          s[x][y].start,
          s[x][y].ending,
          s[x][y].chank,
          s[x][y].pitch,
          s[x][y].vel)
         end
      end
    end
  end
end
function Destutter()
  local take=reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetActive())
  local _,CountEvts=reaper.MIDI_CountEvts(take)
  if CountEvts>0 then
    s={}                      --the script does not work without this table, this is how lua tables are arranged
    for nado=1,127 do
      s[nado]={}
      s[nado][0]={}
      s[nado][0].counter=0
    end
    index=0
    for i=0,CountEvts-1 do
      _,sel,muted,start,ending,chank,pitch,vel=reaper.MIDI_GetNote(take,i+index)
      if sel==true then
        if  s[pitch][#s[pitch]].ending==start and s[pitch][0].counter<1 then    --combines every two notes into one if their end and beginning coincide
          s[pitch][#s[pitch]].ending=ending                                     --grouping by pitch
          reaper.MIDI_DeleteNote(take,i+index)
          index=index-1
          s[pitch][0].counter=s[pitch][0].counter+1                      
        else
          s[pitch][#s[pitch]+1]={}
          s[pitch][#s[pitch]].sel=sel
          s[pitch][#s[pitch]].muted=muted
          s[pitch][#s[pitch]].start=start
          s[pitch][#s[pitch]].ending=ending
          s[pitch][#s[pitch]].chank=chank
          s[pitch][#s[pitch]].pitch=pitch
          s[pitch][#s[pitch]].vel=vel
          reaper.MIDI_DeleteNote(take,i+index)
          index=index-1
          s[pitch][0].counter=0
        end
      end
    end

    for x=1,#s do
      if #s[x]>=1 then
        for y=1,#s[x] do
          reaper.MIDI_InsertNote(
          take,
          s[x][y].sel,
          s[x][y].muted,
          s[x][y].start,
          s[x][y].ending,
          s[x][y].chank,
          s[x][y].pitch,
          s[x][y].vel)
         end
      end
    end
  end
end

_,_,_,_,_,_,val=reaper.get_action_context()
reaper.Undo_BeginBlock()
if val>0 then
  for_undo="Stutter selected notes 1.2"
  Stutter()
else
  for_undo="Destutter selected notes 1.2"
  Destutter()
end
reaper.Undo_EndBlock(for_undo,0)
Тоже что и предыдущий но не две ноты а три
Код:
function Stutter()
  local take=reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetActive())
  local _,CountEvts=reaper.MIDI_CountEvts(take)
  if CountEvts>0 then
    s={}
    for nado=1,127 do
      s[nado]={}
      s[nado][0]={}
    end
    index=0
    for i=0,CountEvts-1 do
      _,sel,muted,start,ending,chank,pitch,vel=reaper.MIDI_GetNote(take,i+index)
      if sel==true then
          --first
          s[pitch][#s[pitch]+1]={}
          s[pitch][#s[pitch]].sel=sel
          s[pitch][#s[pitch]].muted=muted
          s[pitch][#s[pitch]].start=start
          s[pitch][#s[pitch]].ending=start+(ending-start)/3
          s[pitch][#s[pitch]].chank=chank
          s[pitch][#s[pitch]].pitch=pitch
          s[pitch][#s[pitch]].vel=vel
          --second
          s[pitch][#s[pitch]+1]={}
          s[pitch][#s[pitch]].sel=sel
          s[pitch][#s[pitch]].muted=muted
          s[pitch][#s[pitch]].start=start+(ending-start)/3
          s[pitch][#s[pitch]].ending=start+(ending-start)*2/3
          s[pitch][#s[pitch]].chank=chank
          s[pitch][#s[pitch]].pitch=pitch
          s[pitch][#s[pitch]].vel=vel
          --third
          s[pitch][#s[pitch]+1]={}
          s[pitch][#s[pitch]].sel=sel
          s[pitch][#s[pitch]].muted=muted
          s[pitch][#s[pitch]].start=start+(ending-start)*2/3
          s[pitch][#s[pitch]].ending=ending
          s[pitch][#s[pitch]].chank=chank
          s[pitch][#s[pitch]].pitch=pitch
          s[pitch][#s[pitch]].vel=vel
          reaper.MIDI_DeleteNote(take,i+index)
          index=index-1
       
      end
    end

    for x=1,#s do
      if #s[x]>=1 then
        for y=1,#s[x] do
          reaper.MIDI_InsertNote(
          take,
          s[x][y].sel,
          s[x][y].muted,
          s[x][y].start,
          s[x][y].ending,
          s[x][y].chank,
          s[x][y].pitch,
          s[x][y].vel)
         end
      end
    end
  end
end

function Destutter()
  local take=reaper.MIDIEditor_GetTake(reaper.MIDIEditor_GetActive())
  local _,CountEvts=reaper.MIDI_CountEvts(take)
  if CountEvts>0 then
    s={}
    for nado=1,127 do
      s[nado]={}
      s[nado][0]={}
      s[nado][0].counter=0
    end
    index=0
    for i=0,CountEvts-1 do
      _,sel,muted,start,ending,chank,pitch,vel=reaper.MIDI_GetNote(take,i+index)
      if sel==true then
        if  s[pitch][#s[pitch]].ending==start and s[pitch][0].counter<2 then
          s[pitch][#s[pitch]].ending=ending
          reaper.MIDI_DeleteNote(take,i+index)
          index=index-1
          s[pitch][0].counter=s[pitch][0].counter+1
        else
          s[pitch][#s[pitch]+1]={}
          s[pitch][#s[pitch]].sel=sel
          s[pitch][#s[pitch]].muted=muted
          s[pitch][#s[pitch]].start=start
          s[pitch][#s[pitch]].ending=ending
          s[pitch][#s[pitch]].chank=chank
          s[pitch][#s[pitch]].pitch=pitch
          s[pitch][#s[pitch]].vel=vel
          reaper.MIDI_DeleteNote(take,i+index)
          index=index-1
          s[pitch][0].counter=0
        end
      end
    end

    for x=1,#s do
      if #s[x]>=1 then
        for y=1,#s[x] do
          reaper.MIDI_InsertNote(
          take,
          s[x][y].sel,
          s[x][y].muted,
          s[x][y].start,
          s[x][y].ending,
          s[x][y].chank,
          s[x][y].pitch,
          s[x][y].vel)
         end
      end
    end
  end
end

_,_,_,_,_,_,val=reaper.get_action_context()
reaper.Undo_BeginBlock()
if val>0 then
  for_undo="Stutter selected notes 1.3"
  Stutter()
else
  for_undo="Destutter selected notes 1.3"
  Destutter()
end
reaper.Undo_EndBlock(for_undo,0)
Код:
--i'm dont know kak eto komentirovat'

function basic()
  function CountChildren(Track)
    reaper.SetTrackSelected(Track,true)
    reaper.Main_OnCommand(reaper.NamedCommandLookup("_SWS_SELCHILDREN"),0)
    CountSel=reaper.CountSelectedTracks(0)
    if CountSel>0 then
      return true
    else
      return false
    end
  end

    local CountTracks=reaper.CountTracks(0)
    if CountTracks~=0 then
      reaper.Main_OnCommand(40297,0)
      local EmpTracks={}
      c=-1
        for i=0, CountTracks-1 do
          Track=reaper.GetTrack(0,i)
          if reaper.GetMediaTrackInfo_Value(Track,"I_FOLDERDEPTH")==1 then
            if reaper.GetTrackNumSends(Track,-1)==0 and CountChildren(Track)==false and reaper.CountTrackMediaItems(Track)==0 then
            c=c+1
            EmpTracks[c]=Track
            end
          else
            if reaper.GetTrackNumSends(Track,-1)==0 and reaper.CountTrackMediaItems(Track)==0 then
              c=c+1
              EmpTracks[c]=Track
            end
          end
        end
      if c>-1 then
        for x=0,#EmpTracks do
          reaper.DeleteTrack(EmpTracks[x])
        end
      end
    end
  end
reaper.Undo_BeginBlock()
flag=true
C_pre=0
C_post=reaper.CountTracks(0)
while C_pre~=C_post do
  C_post=reaper.CountTracks(0)
  basic()
  CountTracks=reaper.CountTracks(0)
  C_pre=C_post
  C_post=CountTracks
end


reaper.Undo_EndBlock("Remove empty tracks ignore folder",0)
 
Последнее редактирование:

knst

New Member
28 Мар 2023
14
0
1
33
Здравствуйте. Хотелось бы узнать, возможно ли перенести прорисовку скриптов (Envelope-Based Compressor и Envelope-Based Deesser) с айтема на поле автоматизации? (графа «show envelope in lane» в случае с прорисовкой не работает)
 

AlexLazer

Well-Known Member
26 Янв 2009
2.668
1.412
113
40
Russia, Stavropol
soundprofi.ru
Одну точку, Ctrl-A, Ctrl+C, курсор на линию и Ctrl-V. Ну и удалить конечно на айтеме)
 
Последнее редактирование:

KikoKentaurus

Active Member
27 Апр 2020
135
31
28
25
Обратите внимание, пользователь заблокирован на форуме.
Отличная вещь.

А еще была бы удобной опция - сдвигать заодно обрезанные клипы к началу дорожки.
Это для тех ситуаций, когда массово работаешь с кучей фрагментов на разных дорожках, а после обрезки рендерить по дорожкам.
А отдельного скрипта с такой функцией не существует? Snapping tool или типа того)
 

Tavera

New Member
11 Ноя 2021
4
0
1
31
Хочу узнать..


Например чтобы три клэпа друг под другом в леере выделить быстро мышкой, прибавить общую громкость и срендерить к себе в папку одной вавкой, сохраняя обработку .но игнорируя сенды (ревера и тд)

как через экшены это сделать... Подскажите пожалуйста
 

Pankotskiy

New Member
18 Июн 2023
26
2
3
44
Всем привет!
Помогите, пожалуйста! Нужен скрипт - для работы в миди редакторе - рандомайзер (арпеджиатор). Во фруктах был такой. Наверняка и для рипера имеется.
Чтобы прям в пианоролле открывалась панель управления, где можно было бы указывать тональность, лад, диапазон рандомизации в октавах или в тонах, аккордовые ноты выдавать, либо все ноты лада....., чтобы выдавались случайные комбинации и чтобы их можно было генерировать занова, подбирая наилучший вариант.
И чтобы прям на сетке сразу менялся результат.
Заранее спасибо!
 

zga

Well-Known Member
15 Авг 2004
2.602
1.880
113
none
Всем привет!
Помогите, пожалуйста! Нужен скрипт - для работы в миди редакторе - рандомайзер (арпеджиатор). Во фруктах был такой. Наверняка и для рипера имеется.
Чтобы прям в пианоролле открывалась панель управления, где можно было бы указывать тональность, лад, диапазон рандомизации в октавах или в тонах, аккордовые ноты выдавать, либо все ноты лада....., чтобы выдавались случайные комбинации и чтобы их можно было генерировать занова, подбирая наилучший вариант.
И чтобы прям на сетке сразу менялся результат.
Заранее спасибо!
не совсем оно, но похоже

 

Pankotskiy

New Member
18 Июн 2023
26
2
3
44

maxmusic

New Member
10 Дек 2008
17
10
3
Нифигасе какая мощная штукенция ! Спасибо !
 

maxmusic

New Member
10 Дек 2008
17
10
3
Не в ту тему написал. Перенести бы в:
-- Выделить трек, запустить скрипт (Lua)
local trackSel = reaper.GetSelectedTrack(0,0);
reaper.SetMediaTrackInfo_Value(trackSel,"I_RECINPUT",4096+(63<<5)+0);
reaper.SetMediaTrackInfo_Value(trackSel,'I_RECARM',1);
reaper.Main_OnCommand(40493, 0)

а лучше один раз создать трек-темплейт и всё, дело сделано ))
 

maxmusic

New Member
10 Дек 2008
17
10
3
Добавил возможность выбора моно/стерео рендера и именование трека и айтема




Имейте ввиду что если у вас в настройках выставленные посылы не по умолчанию, то будет рендерить соотвественно этим настройкам, у меня было выставлено значение -25,00 db, и я долго тупил и думал что это где-то в скрипте, а потом до меня дошло, что тормоз тоже механизм )))

231775
 

Вложения

Последнее редактирование:

MSerg

Well-Known Member
30 Ноя 2015
872
1.539
93
Друзья, не знаю, куда написать. Попробую сюда.

Мои тулбары со временем так разрослись, что стали сложными для быстрого поиска нужных плагин. Я хочу прокачать тулбар, а именно:

1. Добавить "перенос строки" для кнопок.
2. Добавить строку "текст"

Легкими движениями руки... в фотошопе... получается приблизительно такая структура тулбара:
232227


Просто представьте, что сейчас эти кнопки слипшиеся в одно месиво. И я даже боюсь туда что-то добавлять т.к. в слипшейся каше итак не просто находить, что нужно.

Я это вижу так:
1. Захожу в Customize Bar
232229


2. жму Add...
232231


3. Нахожу toolbar: add line (которого пока не существует)
232232


4. Добавляю скрипт между нужными кнопками и все последующие кнопки теперь находятся внизу с отрывом в пол размера кнопки
232234


5. Нажимаю на свойства линии и выбираю Text icon...
232235


6. Указываю нужный текст и он становится заголовком для все последующих кнопок, которые спускаются ещё на пол кнопки ниже, чтобы заголовок поместился с комфортным для глаза расстоянием от верхних кнопок.

232233


Что скажете? Есть на форуме специалист, способный реализовать такую фичу для тулбара?
 

Вложения

Antonio

Well-Known Member
9 Ноя 2003
4.373
1.581
113
48
Алматы
@MSerg,
@Mr_Tsonts наверняка подскажет. У него этих менюшек.... И скрипт специальный, очень классный. Я пробовал, понравился, но менюшки не люблю.
 

Mr_Tsonts

Well-Known Member
18 Апр 2019
1.656
1.341
113
56
Киев
@MSerg,
@Mr_Tsonts наверняка подскажет. У него этих менюшек.... И скрипт специальный, очень классный. Я пробовал, понравился, но менюшки не люблю.
А я только этим скриптом сейчас и пользуюсь. Что тут подсказывать - Dfk's Build-Your-Own Custom Toolbar Utility (v.1.05) - Cockos Incorporated Forums
 
  • Like
Реакции: Antonio и Landre

DmitrijSorokin

Well-Known Member
12 Мар 2019
232
426
63
На странице 319 страницы руководства Reaper указана ссылка на руководство по JS-плагинам от Keith Haydon (K8ch на форуме Reaper):

233227


https://keithhaydon.com/Reaper/JSFX.pdf (June 2022)

Но я случайно заметил, что там лежит и 2 версия:

https://keithhaydon.com/Reaper/JSFX2.pdf (July 2023)

Это такой огромный труд, 117 страниц скриншотов и описаний JS. Мастхэв однозначно!

233228
233229
233230


В тему - ссылка на коллекцию репозиториев: https://rmmedia.ru/threads/123627/page-2#post-2834822

PS. На случай удаления прикрепил три версии:

JSFXresc.doc (June 2022, doc)
JSFX.pdf (June 2022)
JSFX2.pdf (July 2023)
 

Вложения

DmitrijSorokin

Well-Known Member
12 Мар 2019
232
426
63
Cлежу за новыми скриптами от Steviekeys
Bass X
Big Bad Delay
Big Bad Delay 2
Dynamic Saturation
Echo Live Vocal In Stereo
eventhorizon blowncapacitor bugfix
Haas Delay and filtering
KneeComp
limit smash
limit smash v3
live limit
Lyra GR meter mod
Maximum Resolution Dither
OCD Fractional Gain volume control
Odd n Even Saturation
Odd Saturation
Pascal GR meter mod
Perfect Mono
RCDither Experimental
RCLimiter GR meter mod
Retro Bus Warmth
Retro Distortion
Retro Fuzz
Retro limiter
Retro-Q
Retro-Q V2
Retro-Q V3
Smooth Clipper
Subtle Un Digitizer
Transient softener
Tube Limit Clipper
Wow Tape Delay
У него нет репозитория, скрипты можно скачать здесь: https://stash.reaper.fm/u/Steviekeys

PS. На всякий случай прикрепил коллекцию на текущий момент.
 

Вложения

  • Like
Реакции: Beckoff и Antonio

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