ReaScripts (скрипты для Reaper) - делимся

Немного поправил первый пост. Если кому есть что дополнить (ссылки и прочие интересности) - дополню.
 
Здравствуйте, друзья! Существует ли скрипт для синхронизации трэков решающий проблемы с несинхронными Word Clock-ами? К примеру есть два одинаковых , но разных по качеству трека записанных одновременно на концерте разными устройствами (Скажем, один из них - это multi-miked multitrack, а другой сумма). У них разный Word Clock и по времени они плывут? Вопрос, есть ли скрипт, который может их синхронизировать. (То есть не менять длину нот stretch marker-ами) а просто в нужных местах, скажем каждые 20 секунд split items и подвигать айтем синхронизируя его с исходником.
 
@Дима Горелик, такой задачи не существует. Записанные треки синхронизировать как то иначе, чем кинуть на разные дорожки в Reaper - не нужно!
Если они, как вы написали выше, «плывут», то это скорее всего проблема музыкантов (не ритмично игравших), либо (если это была одновременная запись) - какие то сумасшедшие проблемы дивайсов или кривых рук тех, кто писал.
Встречал таких ламеров, которые ухитрялись писать с устройства синхорнизированного в 48 kHz в DAW с частотой 44,1 kHz. Такую хрень нужно разбирать отдельно, возвращая в нормальную частоту исходники перед их использованием.
 
Скрипт проверяет есть ли time selection, если есть - убирает его, если нет - закрывает плавающие окна.
Зависит от SWS Extension (если sws не установлен - закрывать окна не будет).

Юзкейс: вешаешь скрипт на "esc", и в midi редакторе по первому нажатию esc убирает time selection если он есть, если нет - закрывает midi редактор.
Зачем: по умолчанию в контексте окна аранжировки по esc убирается time selection, а в контексте midi редактора - закрывается midi редактор. Мне это доставляло боль. Поведение, реализованное в скрипте, мне кажется более логичным.
script_show.gif
 

Вложения

Последнее редактирование:
  • Like
Реакции: Kokarev Maxim и zybex00
@Alexmolecul, порог ниже попробуйте. Вообще, это скрипт очень старый, множество недостатков.
Этот лучше - https://raw.githubusercontent.com/EUGEN27771/ReaScripts/master/Various/gen_Envelope-based Deesser.eel
Тоже строит огибающую, только иначе - работает как многие плагины(подобный алгоритм), плюс намного, в разы быстрее.
---------------------------------------
По поводу картинки. В первом скрипте есть картинка, во втором нет.
Первый скрипт на Lua, там проще - картинку какую-никакую нарисовал, но сам алгоритм корявый.
Второй скрипт на EEL, на момент написания сделать картинку мне было действительно трудно, но там алгоритм нормальный. Картинку на данный момент сделать не так сложно. Если все же сделаю - она может пойти сразу на диэссер, компрессор, гейт, транзиент-детектор и триггер. Поэтому, смысл вроде бы есть.
 
Последнее редактирование:
@EUGEN27771, ситуация такая, я "подравниваю" огибающую громкости с помощью скрипта gen_Envelope-based Compressor.eel, а потом хотел бы еще и "с" ки убавить скриптом gen_Envelope-based Deesser.eel, но разумеется огибающая каждый раз создается заново, обнуляя предыдущую, можно как то совместить эти скрипты или сделать, чтобы они друг друга не отменяли?
 
Простенький скрипт, чтобы увеличивать/уменьшать отображение пиков без необходимости нажимать на shift+стрелки, достаточно в нужную сторону покрутить колесо
Код:
local _,_,_,_,_,_,val = reaper.get_action_context() 

function Peaks()
if val > 0 then
reaper.Main_OnCommand(40155, 0)
end
if val < 0 then
reaper.Main_OnCommand(40156, 0)
end
end

reaper.defer(Peaks)
 
  • Like
Реакции: BAYANBAYAN
можно как то совместить эти скрипты или сделать, чтобы они друг друга не отменяли?
В идеале надо просто эту функцию интегрировать, чтобы кривая формировалась как и в зависимости от настроек компрессора, так и в зависимости от настроек де-эссера, одновременно и вместе
 
  • Like
Реакции: Alexmolecul
@Nagor, это для айтемов работает. Да как угодно, хоть для всех. Но если айтемов много, то может начать тупить при детектировании транзиентов
 
  • Like
Реакции: Nagor
Скрипт чтобы удалять нечетные стретч-маркеры. Чтобы были четные, в DeleteTakeStretchMarkers где i-1, поставить i+1
Код:
script_title = "Remove every odd stretch marker"
reaper.Undo_BeginBlock()
reaper.PreventUIRefresh(1)

function main()
count_items = reaper.CountSelectedMediaItems()
for i = 0, count_items-1 do
  selitem = reaper.GetSelectedMediaItem(0,i)
  if selitem == nil then return end
  take = reaper.GetActiveTake(selitem)
  num = reaper.GetTakeNumStretchMarkers(take)
  for i = 0, num-1 do
   retval, pos, srcpos = reaper.GetTakeStretchMarker( take, 0 )
   reaper.DeleteTakeStretchMarkers( take, i-1,1 )
  end
end
end

main()

reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)
reaper.Undo_EndBlock(script_title,-1)
 
Простенький скрипт, чтобы увеличивать/уменьшать отображение пиков без необходимости нажимать на shift+стрелки, достаточно в нужную сторону покрутить колесо
[/code]
Подскажите, я правильно понял, что это надо назначать на колесо мыши в модификаторах? А в каком разделе модификатора?
 
@BAYANBAYAN, нет, action list. При вписывавнии шотрката нужно задать любое сочетание shift alt ctrl win, и крутануть колесо
 
  • Like
Реакции: BAYANBAYAN
@Nagor, а. я ж про другое подумал :)) Если про peak view, да, на всех конечно. Это штатная фишка, которую интегрировал в колесо
 
Последнее редактирование:
  • Like
Реакции: Nagor
Друзья, а есть ли такой скрипт? У меня тут задача встала по равномерной расстановке айтемов внутри определенного временного отрезка. Может кто такой видел? Но тут надо не по сетке, а именно чтобы просто между всеми айтемами на дорожке было равное пустое расстояние.
 
Удаление контента с выделенного трека без перемещения правой части контента. То есть айтемы и енвелопы. Позже посмотрю вариант для айтемов автоматизации. На первый взгляд не хватает API
Код:
reaper.Undo_BeginBlock(1)
reaper.PreventUIRefresh(1)


local count_tracks = reaper.CountSelectedTracks(0)
local time_selection_start, time_selection_end = reaper.GetSet_LoopTimeRange( 0, 1, 0, 0, 0)
if time_selection_start == time_selection_end then return end


if count_tracks == 0 then return end


for i=0, count_tracks-1 do
  local get_track = reaper.GetSelectedTrack(0,i)
  local count_envelopes = reaper.CountTrackEnvelopes(get_track)
  for j=0, count_envelopes-1 do
    local get_envelope = reaper.GetTrackEnvelope(get_track, j)
    local count_points = reaper.CountEnvelopePoints(get_envelope)
    local _, point_value_start, _, _, _ = reaper.Envelope_Evaluate(get_envelope, time_selection_start, 0, 0)
    local _, point_value_end, _, _, _ = reaper.Envelope_Evaluate(get_envelope, time_selection_end, 0, 0)
    if count_points ~= 0 then
      for h=0, count_points-1 do
        reaper.DeleteEnvelopePointRange(get_envelope, time_selection_start, time_selection_end+0.00000000000001)
      end
    end
    reaper.InsertEnvelopePoint(get_envelope, time_selection_start, point_value_start, 0, 0, 0, 0)
    reaper.InsertEnvelopePoint(get_envelope, time_selection_end, point_value_start, 0, 0, 0, 0)
    reaper.InsertEnvelopePoint(get_envelope, time_selection_end, point_value_end, 0, 0, 0, 0)
  end
 local count_items = reaper.CountTrackMediaItems(get_track)
 for t=count_items, 0, -1 do
  local get_item = reaper.GetTrackMediaItem(get_track, t)
  if get_item then
    reaper.SplitMediaItem( get_item, time_selection_end)
    reaper.SplitMediaItem( get_item, time_selection_start)
  end
 end   
   local count_items_two = reaper.CountTrackMediaItems(get_track)
    for z=count_items_two, 0, -1 do
      local get_item_selection = reaper.GetTrackMediaItem(get_track, z)
      if get_item_selection then
        local info_start = reaper.GetMediaItemInfo_Value(get_item_selection,'D_POSITION')
        if info_start >= time_selection_start and info_start <= time_selection_end-0.00000000000001 then
          reaper.DeleteTrackMediaItem(get_track, get_item_selection)
        end
      end
    end
end

   
     
reaper.Undo_EndBlock("Remove contents from selected items", -1)
reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)

То же самое для всех треков

Код:
reaper.Undo_BeginBlock(1)
reaper.PreventUIRefresh(1)


local count_tracks = reaper.CountTracks(0)
local time_selection_start, time_selection_end = reaper.GetSet_LoopTimeRange( 0, 1, 0, 0, 0)
if time_selection_start == time_selection_end then return end


if count_tracks == 0 then return end


for i=0, count_tracks-1 do
  local get_track = reaper.GetTrack(0,i)
  local count_envelopes = reaper.CountTrackEnvelopes(get_track)
  for j=0, count_envelopes-1 do
    local get_envelope = reaper.GetTrackEnvelope(get_track, j)
    local count_points = reaper.CountEnvelopePoints(get_envelope)
    local _, point_value_start, _, _, _ = reaper.Envelope_Evaluate(get_envelope, time_selection_start, 0, 0)
    local _, point_value_end, _, _, _ = reaper.Envelope_Evaluate(get_envelope, time_selection_end, 0, 0)
    if count_points ~= 0 then
      for h=0, count_points-1 do
        reaper.DeleteEnvelopePointRange(get_envelope, time_selection_start, time_selection_end+0.00000000000001)
      end
    end
    reaper.InsertEnvelopePoint(get_envelope, time_selection_start, point_value_start, 0, 0, 0, 0)
    reaper.InsertEnvelopePoint(get_envelope, time_selection_end, point_value_start, 0, 0, 0, 0)
    reaper.InsertEnvelopePoint(get_envelope, time_selection_end, point_value_end, 0, 0, 0, 0)
  end
 local count_items = reaper.CountTrackMediaItems(get_track)
 for t=count_items, 0, -1 do
  local get_item = reaper.GetTrackMediaItem(get_track, t)
  if get_item then
    reaper.SplitMediaItem( get_item, time_selection_end)
    reaper.SplitMediaItem( get_item, time_selection_start)
  end
 end   
   local count_items_two = reaper.CountTrackMediaItems(get_track)
    for z=count_items_two, 0, -1 do
      local get_item_selection = reaper.GetTrackMediaItem(get_track, z)
      if get_item_selection then
        local info_start = reaper.GetMediaItemInfo_Value(get_item_selection,'D_POSITION')
        if info_start >= time_selection_start and info_start <= time_selection_end-0.00000000000001 then
          reaper.DeleteTrackMediaItem(get_track, get_item_selection)
        end
      end
    end
end

   
     
reaper.Undo_EndBlock("Remove contents from selected items", -1)
reaper.UpdateArrange()
reaper.PreventUIRefresh(-1)
 
Последнее редактирование:
  • Like
Реакции: Maestro Sound
@borisuperful, для одиночных итемов (внезависимости от выделенного трека, работать по выделенному итему) для Mouse Modifiers Удобней на не выделенном треке а под курсором мышки
 
Последнее редактирование:
Еще возник вопрос: допустим есть у меня какой-то айтем (ну или группа айтемов) и мне нужно, чтобы этот айтем после копирования сразу вставился в одно из мест, где у меня стоит маркер. Такое возможно?
 
Еще возник вопрос: допустим есть у меня какой-то айтем (ну или группа айтемов) и мне нужно, чтобы этот айтем после копирования сразу вставился в одно из мест, где у меня стоит маркер. Такое возможно?
Вы имеете в виду наверное "эдит-курсор", а не "маркер"?
если так, то сделайте простой кастом экшн и повесьте его на хоткей

- Edit: Copy items
- Item: Paste items/tracks

Если таки "маркер", то Вам нужно знать его номер и вставить соотв. экшн между "копи" и "пэйст"
Screenshot_1.png
 
Вы имеете в виду наверное "эдит-курсор", а не "маркер"?
если так, то сделайте простой кастом экшн и повесьте его на хоткей

- Edit: Copy items
- Item: Paste items/tracks

Если таки "маркер", то Вам нужно знать его номер и вставить соотв. экшн между "копи" и "пэйст"
Посмотреть вложение 154679
\

Имел в виду именно маркер. Спасибо. Попробую.
 
Имеется ли у скрипта возможность определить громкость в какой-либо момент? Если да, то как?
 
Давно хочется одну такую фишку, но пока не придумал как и не нашел.
Некое подобие Propagate для трека или эффекта. В идеале клонировать эффект и накручивая что-то на одном, автоматически дублировать на его теневые копии(ю).
Нет ли ничего этакого?
 
Подскажите пожалуйста.Я где-то давно здесь видел энвелоп компресор который работает на базе envelope volume Reaper.Подскажите где его найти.Спасибо
 

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