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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
@diggidon, Если просто оставить дефолтный interval в 0.015, то:
Код:
--[[
 * ReaScript Name: Replace envelope points by linear points at regular interval
 * About: A way to delete multiple points across different envelopes and tracks.
 * Instructions: Make a selection area or no. Select track with visible armed envelope or no. Execute the script.
 * Author: X-Raym
 * Author URI: https://www.extremraym.com
 * Repository: GitHub > X-Raym > REAPER-ReaScripts
 * Repository URI: https://github.com/X-Raym/REAPER-ReaScripts
 * Licence: GPL v3
 * Forum Thread: Script (LUA): Scripts (Lua): Multiple Tracks and Multiple Envelope Operations
 * Forum Thread URI: http://forum.cockos.com/showthread.php?t=157483
 * REAPER: 5.0 RC5
 * Extensions: SWS 2.7.3 #0
 * Version: 1.0
--]]

--[[
 * Changelog:
 * v1.0 (2015-03-18)
  + Initial release
--]]

-- ----- CONFIG =====>

preserve_edges = true
interval = 0.015

-- <===== CONFIG -----


function UserInput()
  retval, user_input_str = reaper.GetUserInputs("Replace with Linear Points", 1, "Interval ? (s)", interval) -- We suppose that the user know the scale he want
    if retval then
    interval = tonumber(user_input_str)
  end
  return retval
end

function DeleteAtTimeSelection()

  if time_selection == true then

    if point_time > start_time and point_time < end_time then
      reaper.DeleteEnvelopePointRange(env, start_time, end_time)
    end

  else
    retval_last, time_last, valueSource_last, shape_last, tension_last, selectedOut_last = reaper.GetEnvelopePoint(env, env_points_count-1)
    reaper.DeleteEnvelopePointRange(env, 0, time_last+1)
  end

end

function Action(env)

  -- PRESERVE EDGES EVALUATION
  if time_selection == true and preserve_edges == true then -- IF we want to preserve edges of time selection

    retval3, valueOut3, dVdSOutOptional3, ddVdSOutOptional3, dddVdSOutOptional3 = reaper.Envelope_Evaluate(env, start_time, 0, 0)
    retval4, valueOut4, dVdSOutOptional4, ddVdSOutOptional4, dddVdSOutOptional4 = reaper.Envelope_Evaluate(env, end_time, 0, 0)

  end -- preserve edges of time selection

  -- GET THE ENVELOPE
  retval, envelopeName = reaper.GetEnvelopeName(env, "envelopeName")
  br_env = reaper.BR_EnvAlloc(env, false)

  active, visible, armed, inLane, laneHeight, defaultShape, minValue, maxValue, centerValue, type, faderScaling = reaper.BR_EnvGetProperties(br_env, true, true, true, true, 0, 0, 0, 0, 0, 0, true)

  -- IF ENVELOPE IS A CANDIDATE
  if visible == true and armed == true then

    -- LOOP THROUGH POINTS
    env_points_count = reaper.CountEnvelopePoints(env)

    -- IF THERE IS MORE THAN POINT (aka, if there is something to analyse)
    if env_points_count > 1 then

      -- EVAL
      -- get last point aka get envelope limit
      retval_last, time_last, valueSource_last, shape_last, tension_last, selectedOut_last = reaper.GetEnvelopePoint(env, env_points_count-1)

      if time_selection == true then
        iterations  = math.ceil((end_time - start_time) / interval)
      else
        iterations = math.ceil(time_last / interval)
      end

      value_eval = {} -- init table

      for m = 1, iterations do

        retval_eval, value_eval[m], dVdSOut_eval, ddVdSOut_eval, dddVdSOut_eval = reaper.Envelope_Evaluate(env, m * interval + start_time, 0, 0)

      end

      -- DELETE AREA
      if env_points_count > 0 then
        for k = 0, env_points_count-1 do
          retval, point_time, valueOut, shapeOutOptional, tensionOutOptional, selectedOutOptional = reaper.GetEnvelopePoint(env, k)

          DeleteAtTimeSelection()

        end
      end

      -- INSERTION
      for m = 1, iterations do

        reaper.InsertEnvelopePoint(env, m * interval + start_time, value_eval[m], 0, 0, true, true) -- INSERT startLoop point

      end

      -- PRESERVE EDGES INSERTION
      if time_selection == true and preserve_edges == true then

        reaper.DeleteEnvelopePointRange(env, start_time-0.000000001, start_time+0.000000001)
        reaper.DeleteEnvelopePointRange(env, end_time-0.000000001, end_time+0.000000001)

        reaper.InsertEnvelopePoint(env, start_time, valueOut3, 0, 0, true, true) -- INSERT startLoop point
        reaper.InsertEnvelopePoint(env, end_time, valueOut4, 0, 0, true, true) -- INSERT startLoop point

      end
    end

    reaper.BR_EnvFree(br_env, 0)
    reaper.Envelope_SortPoints(env)

  end
end

function main()
  reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function.

  -- GET CURSOR POS
  offset = reaper.GetCursorPosition()

  -- GET TIME SELECTION
  start_time, end_time = reaper.GetSet_LoopTimeRange2(0, false, false, 0, 0, false)

  -- IF TIME SELECTION
  if start_time ~= end_time then
    time_selection = true
  end

  -- LOOP TRHOUGH SELECTED TRACKS
  env = reaper.GetSelectedEnvelope(0)

  if env == nil then
    selected_tracks_count = reaper.CountSelectedTracks(0)
    if selected_tracks_count > 0 then
      for i = 0, selected_tracks_count-1  do
        -- GET THE TRACK
        track = reaper.GetSelectedTrack(0, i) -- Get selected track i
        -- LOOP THROUGH ENVELOPES
        env_count = reaper.CountTrackEnvelopes(track)
        for j = 0, env_count-1 do
          -- GET THE ENVELOPE
          env = reaper.GetTrackEnvelope(track, j)
          Action(env)
        end -- ENDLOOP through envelopes
      end -- ENDLOOP through selected tracks
    end
  else
      Action(env)
  end -- endif sel envelope
  reaper.Undo_EndBlock("Replace envelope points by linear points at regular interval", -1) -- End of the undo block. Leave it at the bottom of your main function.
end -- end main()

reaper.PreventUIRefresh(1) -- Prevent UI refreshing. Uncomment it only if the script works.
main() -- Execute your main function
reaper.PreventUIRefresh(-1) -- Restore UI Refresh. Uncomment it only if the script works.
reaper.UpdateArrange() -- Update the arrangement (often needed)

-- Update the TCP envelope value at edit cursor position
reaper.TrackList_AdjustWindows( false )
 
  • Like
  • Love
Реакции: Antonio и diggidon
Сюда/не сюда.))
Подскажите, может есть такой скрипт/экшн, который бы выполнял инвертирование миди нот (начала и конца, высоты с сохранением ноты, высоты с учетом инвертирования начала и конца, и т.п.?
 
Всем привет!
Пожалуйста помогите написать или подскажите куда копать :)
Очень хочу получить инструмент редактирования envelope как в logic pro, чтоб одним движением стирались ненужные точки.
По умолчанию в рипер так:
225993


А хочется так, как в logic:
225994


в результате не нужно делать много манипуляций чтоб удалять ненужное
 
Всем привет!
Пожалуйста помогите написать или подскажите куда копать :)
Очень хочу получить инструмент редактирования envelope как в logic pro, чтоб одним движением стирались ненужные точки.
По умолчанию в рипер так:
Посмотреть вложение 225993

А хочется так, как в logic:
Посмотреть вложение 225994

в результате не нужно делать много манипуляций чтоб удалять ненужное

Выглядит сложновато в реализации скриптом. Инструмент "карандаш" (freehand draw) сделает всю работу точно так же, разве что чуть с другим визуалом. По умолчанию это движение мыши с удерживанием ctrl. Если во время движения дополнительно нажать shift, то точек будет намного меньше: только по разрешению сетки. Я сразу переназначил, чтоб точки только по сетке рисовались, это удобно и легко можно шаг регулировать.
 
Последнее редактирование:
Очень хочу получить инструмент редактирования envelope как в logic pro, чтоб одним движением стирались ненужные точки.
в результате не нужно делать много манипуляций чтоб удалять ненужное
Envelope reduce number of points. Нет? Выделил все точки кроме крайних, и уменьшил слайдером причем все плавно.
 
  • Like
Реакции: Antonio
Всем привет, подскажите пожалуйста, существует ли экшн, чтобы взять в фокус envelope volume на выделенном айтеме, что бы не нажимать на них каждый раз мышкой? И ещё вопрос: существует ли обратное действие этому (SWS/BR: Apply next action to all visible envelopes in selected tracks if there is no track envelope selected), что бы следующий экшн применялся к айтемам? (нужно для создания кастом экшна)
 
Последнее редактирование:
Всем привет!
Подскажите, есть ли в Рипере опция, чтобы просматривать и редактировать миди партии разных дорожек в одном окне?
Посмотрела видео, как это сделано в Кубейсе - человек записал 4 партии струнных на разные дорожки, а потом открывает окно, где все эти партии вместе, причем доступны к редактированию.
Знаю, что можно видеть "тени" выделенных треков, но может и такая штука с "партитурой" и редактированием тоже есть?
 
Друзья, всех с пятницей!
Случился перерыв в работе, и есть время, чтобы заняться тем, чем обычно заниматься некогда.
Я к вам с пачкой вопросов, уж простите))

Вопрос 1
Хочу создать трек с текстом (названия аккордов), настроить и забить в шаблон.
Создаю пустой item, пишу в нем текст, и - в окошке нет настройки шрифта!

230078


У других в этом окошке они есть

230079


Собственно, меня устраивает и stretch, но сам факт сильно удивил. Если кто знает, где зарыта собака, буду благодарна.

Вопрос 2

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


230081


Вопрос 3

Можно ли сделать в тулбаре отдельные кнопки, которые будут открывать не все FX, а отдельные папки - допустим, кнопка для папки с эквалайзерами. А на другую кнопку с компрессорами и т.д?
 
Вопрос 2

На микшере у меня почему-то нет регулятора ширины . Опять же у всех есть, а у меня нет - обидно, однако)))
Можно ли его как-то добавить через настройки, или это зависит от темы, или еще от чего-то?
File => Project settings => Advanced => Pan mode => Stereo pan => Save as default project settings

width_dedault.gif
 
  • Like
Реакции: AlexLazer и Katrina_Kim
Хм. Возможно, это только на Маках работает... Впервые подобное вижу. Причём, даже не гуглится.

Знаю только один способ: если в текстовом окне в выпадающем меню выбрать "Stretch image/text", то текст автоматически будет увеличиваться, если увеличить размер трека.
 
  • Like
Реакции: Katrina_Kim
Всем привет. Подскажите пожалуйста.
Нужен такой экшн/скрипт - чтобы при двойном клике на миди айтем ставился курсор вначало миди айтема -
открывался айтем - потом зумились ноты на всё окно миди эдитора НО зум нужен только горизонтальный. получилось сделать,
но с вертикальным и горизонтальным зумом, экшена такого не нашёл который зумит только по горизонтали
 
Последнее редактирование:
Помогите создать экшн, чтобы вызывать контекстное меню в миди редакторе на сочетание клавиш ctrl+right click. По умолчанию стоит right click, но у меня на правую кнопку мыши удаление нот.
 
Помогите дописать скриптик, Нужен зум ин при котором окно аранжировки двигается началом к эдит курсору
Скрипт почти готов, но работает не всегда и если зум большой то зумится не до конца и при большом приближении работает слишком быстро а при маленьком слишком медленно. Видимо формула какая то нужна чтобы плавно работало:
Код:
function loop()
    startTimeOut, endTimeOut = reaper.BR_GetArrangeView(0)
    editcursorpos = reaper.GetCursorPosition()
    reaper.BR_SetArrangeView(0, editcursorpos,endTimeOut-5)
end

reaper.defer(loop)
 
Последнее редактирование:
Помогите дописать скриптик, Нужен зум ин при котором окно аранжировки двигается началом к эдит курсору
Скрипт почти готов, но работает не всегда и если зум большой то зумится не до конца и при большом приближении работает слишком быстро а при маленьком слишком медленно. Видимо формула какая то нужна чтобы плавно работало:
Код:
function loop()
    startTimeOut, endTimeOut = reaper.BR_GetArrangeView(0)
    editcursorpos = reaper.GetCursorPosition()
    reaper.BR_SetArrangeView(0, editcursorpos,endTimeOut-5)
end

reaper.defer(loop)
Код:
function loop()
    local startTimeOut, endTimeOut = reaper.BR_GetArrangeView(0)
    local editCursorPos = reaper.GetCursorPosition()
    local arrangeWidth = endTimeOut - startTimeOut
    local zoomSpeed = 0.01 -- Скорость зума (можно настроить)

    -- Вычисляем новые значения начала и конца окна аранжировки
    local newStart = editCursorPos - arrangeWidth * 0.5
    local newEnd = editCursorPos + arrangeWidth * 0.5

    -- Плавно перемещаемся к новым значениям
    local delta = (newStart - startTimeOut) * zoomSpeed
    reaper.BR_SetArrangeView(0, startTimeOut + delta, endTimeOut + delta)

    reaper.defer(loop)
end

loop()

может потребоваться изменить функцию BR_SetArrangeView, чтобы указать нужное направление зума (например, 1 для приближения или -1 для отдаления) и изменить значения -5 и 0.5, чтобы настроить отступы при зуме.
 
  • Like
Реакции: nounaim
Код:
function loop()
    local startTimeOut, endTimeOut = reaper.BR_GetArrangeView(0)
    local editCursorPos = reaper.GetCursorPosition()
    local arrangeWidth = endTimeOut - startTimeOut
    local zoomSpeed = 0.01 -- Скорость зума (можно настроить)

    -- Вычисляем новые значения начала и конца окна аранжировки
    local newStart = editCursorPos - arrangeWidth * 0.5
    local newEnd = editCursorPos + arrangeWidth * 0.5

    -- Плавно перемещаемся к новым значениям
    local delta = (newStart - startTimeOut) * zoomSpeed
    reaper.BR_SetArrangeView(0, startTimeOut + delta, endTimeOut + delta)

    reaper.defer(loop)
end

loop()

может потребоваться изменить функцию BR_SetArrangeView, чтобы указать нужное направление зума (например, 1 для приближения или -1 для отдаления) и изменить значения -5 и 0.5, чтобы настроить отступы при зуме.
Cпасибо, теперь всё зумится с нормальной скоростью :Dle12:. Сам бы я неделю наверно с этим разбирался бы.
Пришлось немного изменить чтобы скрипт работал только когда кнопка нажата.
Вот, может пригодиться кому то:
Код:
function loop()
    local startTimeOut, endTimeOut = reaper.BR_GetArrangeView(0)
    local editCursorPos = reaper.GetCursorPosition()
    local arrangeWidth = endTimeOut - startTimeOut
    local zoomSpeed = 0.1 -- Скорость зума (можно настроить)

    -- Вычисляем новые значения начала и конца окна аранжировки
    local newStart = editCursorPos - arrangeWidth * 0.5
    local newEnd = editCursorPos + arrangeWidth * 0.5

    -- Плавно перемещаемся к новым значениям
    local delta = (newStart - startTimeOut) * zoomSpeed
    reaper.BR_SetArrangeView(0, editCursorPos, endTimeOut + delta)

    
end

reaper.defer(loop)
 
  • Like
Реакции: nondescript
Все обыскал не нашел.. Нужен тагл экшн show/hide, который будет с кнопки на тулбаре вкл. откл отображение мастер трека в микшере справа. Делаю что то подобное, но всякий раз мастер перескакивает в левую часть.
 
Все обыскал не нашел.. Нужен тагл экшн show/hide, который будет с кнопки на тулбаре вкл. откл отображение мастер трека в микшере справа. Делаю что то подобное, но всякий раз мастер перескакивает в левую часть.
Рипер, в основном, кастом под себя каждый сам делает. Так что долго вы еще искать будете, тут самому дрочделать надо. Есть доки на гитхабе с описанием.
-
Пробуйте это:
Код:
function toggleMasterTrackVisibility()
    local mixer = reaper.JS_Window_Find("mixer", true)
    if mixer ~= nil then
        local masterTrack = reaper.GetMasterTrack(0)
        local mixerFlags = reaper.GetMediaTrackInfo_Value(masterTrack, "I_NCHAN")
        
        -- Проверяем текущее состояние отображения мастер-трека
        if mixerFlags & 2 == 0 then
            -- Включаем отображение мастер-трека
            mixerFlags = mixerFlags | 2
            reaper.SetMediaTrackInfo_Value(masterTrack, "I_NCHAN", mixerFlags)
        else
            -- Отключаем отображение мастер-трека
            mixerFlags = mixerFlags & ~2
            reaper.SetMediaTrackInfo_Value(masterTrack, "I_NCHAN", mixerFlags)
        end
        
        -- Обновляем окно микшера
        reaper.TrackList_AdjustWindows(false)
        reaper.UpdateArrange()
    end
end

toggleMasterTrackVisibility()

Чтобы создать кнопку в пользовательской панели инструментов для вызова этого скрипта, выполните следующие шаги:
  1. Сохраните скрипт в файле с расширением .lua.
  2. В Cockos Reaper откройте "Action List" (Правка -> Пользовательские действия).
  3. Щелкните правой кнопкой мыши в панели инструментов и выберите "Пользовательские действия: Настроить..."
  4. В открывшемся окне нажмите кнопку "Добавить" и выберите "Сценарий".
  5. Укажите путь к вашему скрипту .lua.
  6. Дайте действию имя, например, "Toggle Master Track Visibility".
  7. Назначьте горячую клавишу или перетащите действие на пользовательскую панель инструментов.
ЗЫ: может потребоваться расширение SWS/S&M Extension для использования функции reaper.JS_Window_Find.
 
  • Like
Реакции: Noih
@nondescript, Обновил sws. все работает. вот только я забыл сказать, что у меня еще слева всегда отображается один активный трек. И используя этот скрипт он тоже закрывается. Нужно чтобы это действие влияло только на мастер справа.
 
@nondescript, Обновил sws. все работает. вот только я забыл сказать, что у меня еще слева всегда отображается один активный трек. И используя этот скрипт он тоже закрывается. Нужно чтобы это действие влияло только на мастер справа.
у Вас есть отправная точка)
вот тут
Код:
local masterTrack = reaper.GetMasterTrack(0)
надо другое(смотрите документацию), из CountTracks и GetTrack получать трек, находящийся перед последним треком (мастер-трек)
 
@nondescript, что, чего, кого) простите, но я вообще в этом не разбираюсь)), но спасибо вам в любом случае.
 
@Noih, Вы сам с собой общаетесь или тут вам личный блог где вы свои чувства выражаете? Название темы первые два слова "Помогите создать...". Создать и Найти\заюзать готовый - это разные вещи. Вам выше человек разжевал достаточно неплохо. (Надеюсь у вас есть самоирония, я без зла). Просто прямо Пишите "Я не шарю как делать вообще сделайте за меня"

@nondescript, Кстати спасибо за инфу! Если не сложно можно ссылку на гитхаб на доки?
 
Последнее редактирование:
  • Like
Реакции: nondescript

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