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

Тема в разделе "Reaper", создана пользователем @Michael, 19 июн 2015.

  1. borisuperful

    borisuperful Well-Known Member

    Регистрация:
    31 янв 2013
    Сообщения:
    1.154
    Симпатии:
    398
    Удаление контента с выделенного трека без перемещения правой части контента. То есть айтемы и енвелопы. Позже посмотрю вариант для айтемов автоматизации. На первый взгляд не хватает 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)
    
    
    
     
    Последнее редактирование: 27 дек 2018
    Maestro Sound нравится это.
  2. Maestro Sound

    Maestro Sound Active Member

    Регистрация:
    1 ноя 2007
    Сообщения:
    541
    Симпатии:
    58
    @borisuperful, для одиночных итемов (внезависимости от выделенного трека, работать по выделенному итему) для Mouse Modifiers Удобней на не выделенном треке а под курсором мышки
     
    Последнее редактирование: 22 дек 2018
  3. Денис Фет

    Денис Фет Active Member

    Регистрация:
    22 апр 2007
    Сообщения:
    903
    Симпатии:
    234
    Пол:
    Мужской
    Адрес:
    Московская обл. г. Куровское
    А есть скрипт, который выполняет функцию "DeBreath" ? Ну то есть, который вырезает дыхания и т.п.
     
  4. Martin111

    Martin111 Member

    Регистрация:
    18 фев 2015
    Сообщения:
    390
    Симпатии:
    16
    Пол:
    Мужской
    @Денис Фет, такого скрипта нет, потому что ручной метод работы с такими вещами самый управляемый.
     
  5. Денис Фет

    Денис Фет Active Member

    Регистрация:
    22 апр 2007
    Сообщения:
    903
    Симпатии:
    234
    Пол:
    Мужской
    Адрес:
    Московская обл. г. Куровское
    Еще возник вопрос: допустим есть у меня какой-то айтем (ну или группа айтемов) и мне нужно, чтобы этот айтем после копирования сразу вставился в одно из мест, где у меня стоит маркер. Такое возможно?
     
  6. Supa75

    Supa75 Active Member

    Регистрация:
    21 мар 2017
    Сообщения:
    500
    Симпатии:
    108
    Пол:
    Мужской
    Адрес:
    Днепр, Украина
    Вы имеете в виду наверное "эдит-курсор", а не "маркер"?
    если так, то сделайте простой кастом экшн и повесьте его на хоткей

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

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

    Денис Фет Active Member

    Регистрация:
    22 апр 2007
    Сообщения:
    903
    Симпатии:
    234
    Пол:
    Мужской
    Адрес:
    Московская обл. г. Куровское
    \

    Имел в виду именно маркер. Спасибо. Попробую.
     
  8. maksukay

    maksukay New Member

    Регистрация:
    31 дек 2018
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Имеется ли у скрипта возможность определить громкость в какой-либо момент? Если да, то как?
     

Поделиться этой страницей