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

  • Автор темы Автор темы @Michael
  • Дата начала Дата начала
Привет. Подскажите, пожалуйста, можно ли сделать экшен, что бы одним действием на треке, включался мониторинг, кнопка готовности к записи и настройка определенного входа?(например сразу подключалась миди клава)
Я пробовал создать сам, но не могу найти экшен мониторинга и ни знаю где найти экшен миди и аудио входов.
 

Вложения

  • запись.png
    запись.png
    7,8 KB · Просмотры: 112
@Vell Very, Вот так будет работать точно. Ну и второй скрин, если любой новый трек должен быть с мониторингом, готовым к записи и нужным миди.
 

Вложения

  • Снимок экрана 2022-07-13 в 23.18.36.png
    Снимок экрана 2022-07-13 в 23.18.36.png
    24,9 KB · Просмотры: 140
  • Снимок экрана 2022-07-13 в 23.23.15.png
    Снимок экрана 2022-07-13 в 23.23.15.png
    172,6 KB · Просмотры: 133
Последнее редактирование:
  • Like
Реакции: sve, truemanofan и Nagor
Мужики, сломал голову - назначена на глобальную кнопку, но только OpenFX. А хочу Toogle
Код:
local fxname = 'ReaTune (Cockos)'
local function SetToggleButtonOnOff(numb)
local _,_,sec,cmd,_,_,_ = reaper.get_action_context()
      reaper.SetToggleCommandState(sec,cmd,numb or 0)
      reaper.RefreshToolbar2(sec,cmd)
end
local function no_undo()reaper.defer(function()end)end
local track = reaper.GetMasterTrack(0)
local iFx = reaper.TrackFX_GetByName(track,fxname,false)
   if iFx < 0 then no_undo() return end
local float = reaper.TrackFX_GetOpen( track, iFx )
   if float == false then
      reaper.TrackFX_Show(track,iFx,3)
      SetToggleButtonOnOff(1)
else
      reaper.TrackFX_Show(track,iFx,2)
      SetToggleButtonOnOff(0)
end


Менял SetToggleButtonOnOff(0) на (1). -ничего...

ЗЫ
Блин, На Маке все норм- Toogle. .а на Винде только открывает.....
 
Последнее редактирование:
Мужики, сломал голову - назначена на глобальную кнопку, но только OpenFX. А хочу Toogle
Код:
local fxname = 'ReaTune (Cockos)'
local function SetToggleButtonOnOff(numb)
local _,_,sec,cmd,_,_,_ = reaper.get_action_context()
      reaper.SetToggleCommandState(sec,cmd,numb or 0)
      reaper.RefreshToolbar2(sec,cmd)
end
local function no_undo()reaper.defer(function()end)end
local track = reaper.GetMasterTrack(0)
local iFx = reaper.TrackFX_GetByName(track,fxname,false)
   if iFx < 0 then no_undo() return end
local float = reaper.TrackFX_GetOpen( track, iFx )
   if float == false then
      reaper.TrackFX_Show(track,iFx,3)
      SetToggleButtonOnOff(1)
else
      reaper.TrackFX_Show(track,iFx,2)
      SetToggleButtonOnOff(0)
end


Менял SetToggleButtonOnOff(0) на (1). -ничего...

ЗЫ
Блин, На Маке все норм- Toogle. .а на Винде только открывает.....

Код так и работает. На Винде проверял. Первое нажание на кнопку открывает плагин, второе - закрывает. Только нафига вам РеаТюн на мастере? :D
 
Спасибо...
Да у меня так задумано,.... :Dle52: но,блин-оладьи, код перепроверял- скрипт тот же, что и на маке... хз...:Dle42: на маке и откр, и закр,
 
Последнее редактирование:
Спасибо...
Да у меня так задумано,.... :Dle52: но,блин-оладьи, код перепроверял- скрипт тот же, что и на маке... хз...:Dle42: на маке и откр, и закр,
Возможно, с настройками Рипера что-то или в фоне какой скрипт мешается.
 
  • Like
Реакции: nazarol-jk35
Не знаю, экшн, скрипт, или еще как-то, или, может быть никак. Но вдруг...
Вобщем, есть у Рипера слайдер Playback Rate.
Решил для хохмы поиграться с ней в аналоговый магнитофон, записывая треки с разной скоростью.
Результат понравился. Теперь главная хотелка - сделать такой же удобный и приятный реверс. В штатных режимах такой возможности не обнаружил, отсюда вопрос - скриптом или каким-либо иным изменением возможно такое сделать?
 
  • Wow
Реакции: PianoIst
Подскажите, пожалуйста, как добавить именно VST3i инстанцию вместо VSTi? Вот такое не прокатывает.
221186
 
Приветствую!
Хочется экшн "normalize item peak" (ctrl+shift+N) в виде FX плагина.
Актуально при оффлайн применении плагинов к треку (айтему). То есть подключаем FX-ы, далее пкм по тейку "apply FX as new take".
Лично мне так удобно делать некоторую обработку треков (для экономии ресурсов).
Нормализация же нужна, когда после компрессора стоит, к примеру, клиппер, и чтобы он корректно работал, сигнал нужно поднять до 0 db.
Эдакий butch processing, как в Izotope RX, но не выходя из Рипера. Было бы здорово!
 
Помогите создать скрипт, который перемещает (Edit/Play) Cursor к Mouse Cursor'у в MIDI Editor'е, только с Seeking'ом, кажется, так это называется -- когда воспроизведение возвращается к перемещённому (Edit/Play) Cursor'у.

Среди всех мною найденных скриптов по теме лишь скрипт от MPL возвращает курсор подобным образом:

mpl_Move edit cursor to first note of active MIDI editor take.lua

Код:
-- @description Move edit cursor to first note of active MIDI editor take
-- @version 1.01
-- @author MPL
-- @website http://forum.cockos.com/showthread.php?t=188335
-- @changelog
--    # ReaPack header, name

  function main()
    MIDIEditor = reaper.MIDIEditor_GetActive()
    if MIDIEditor == nil then return end
    take = reaper.MIDIEditor_GetTake(MIDIEditor)
    if take == nil then return end
    if reaper.TakeIsMIDI(take) == false then return end
    fngtake = reaper.FNG_AllocMidiTake(take)
    note = reaper.FNG_GetMidiNote(fngtake, 0)
    note_pos = reaper.FNG_GetMidiNoteIntProperty(note, 'POSITION')
    pos = reaper.MIDI_GetProjTimeFromPPQPos(take, note_pos)
    reaper.SetEditCurPos(pos, true, true)
  end

  main()
 
Можно настроить точно так же, но только для трека огибающей и чтобы работало так же toggloм? Почему на треке можно это настроить, а треке огибающей нельзя?
 

Вложения

  • Screenshot_1.png
    Screenshot_1.png
    22,8 KB · Просмотры: 105
столкнулся с проблемой, при добавлении количества слотов для "FX Chains" путём правки ini файла - сами слоты добавляются (500 штук) а вот действия для них, в частности вставка на трек FX из слота номер такой-то ограничены номером слота 255

в ини файле указано что:

Unless specified, the maximum number of actions is 255

а надо больше!

если я меняю S&M_PASTE_TRACKFXCHAIN=255 на что-то большее то при следующем открытии рипера эта цифра сама меняется на 255, количество действий всё так же ограничивается 255

шожеделать? неужели устраивать голодные игры для FX? мне нужно 350 кнопок примерно?

спаситепомогите
 
шожеделать? неужели устраивать голодные игры для FX? мне нужно 350 кнопок примерно?
Для не FX chains, а одиночных эффектов можете воспользоваться моим скриптом

Yannick_Insert FX by name to master track or selected tracks or selected items

При этом если скопировать имя этого скрипта в буфер обмена (можно в меню по экшну в Action list), можно его сдублировать сколько угодно раз, хоть много тыс раз, для этого вызываете вот этот скрипт

Yannick_Duplicate in one file Lua script from my repository by name from clipboard for customisation

Он размножит копии, будет приписка в конце COPY_1, COPY_2, COPY_3 и т.д. до бесконечности.

После того, как создаете необходимое кол-во копий, заходите в начало каждого скрипта и вписываете имя эффекта. Потом чтобы сохранить код нажимаете ctrl+s
Чтобы не тратить время в поисках текста имени в FX Browser, можете вызвать мой скрипт

Yannick_Copy all existed plugins names to the clipboard

В буфер обмена сгенерируется список имен всех плагинов, которые нашел Рипер в пользовательской конфигурации.
Нужно будет вставить этот список Ctrl+V в любой редактор кода или блокнот типа Notepad++ (можно Word, Wordpad и т.д.)
Там будут 3 большие группы - все VST эффекты, все VST инструменты, все JS эффекты.

Это решение только для одиночных эффектов с пресетом по умолчанию, для FX chains можете смотреть другие скрипты, кажется у Archie был, но он уже не поддерживает свои скрипты. Поэтому со временем может сделаю свой для FX chains.

В случае если не нужно добавлять эффекты на айтемы, нажав на них последний раз, а строго всегда на трек (или наоборот строго всегда на айтем) в начале скрипта есть на это опция. Вы можете кстати основной скрипт настроить только на треки или только айтемы, и скрипт-дубликат будет генерировать копии его.
 
  • Like
Реакции: sve, PianoIst и D-Forest
Вообще если так много эффектов требуется, можно воспользоваться моим скриптом для генерирования всплывающих меню эффектов

Yannick_Insert FX by name to master track or selected tracks or selected items in Popup Menu

Для него делаете одну копию COPY_1, чтобы после обновлений не сбросилось ничего. И в эту копию добавляете нужные имена плагинов, пользуясь скриптом для генерирования списка имен. Можно также делать сабменю

Yannick_Copy all existed plugins names to the clipboard

З.Ы. Если будут вопросы, то пишите, на все отвечу подробнее
 
  • Like
Реакции: Antonio и D-Forest
@borisuperful, я правильно понимаю что при добавлении FX на одиночный выделенный трек он не только добавляет но и открывает его в float окне?

спасибо, буду качать и тестировать

пользуясь случаем спрошу - может быть вы сталкивались или можете сделать скрипт, который, проигрывает "midi item" по нажатию клавиши на миди клавиатуре с применением транспонирования до "ключевой", первой, ноты или еще лучше раскладывая ноты миди итема на первую-вторую-третью-и так далее и играя каждую в своё время если зажата первая-вторая-третья-и так далее нота аккорда?

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

в рипере отличный миди-эдитор, хотелось бы редактировать в нем арпеджио с применением свинга аккордов и соло нот одновременно, желательно для 8-16-бесконечного числа дорожек одновременно

то есть например я нажал ноту "до" и все мои 8 дорожек заиграли каждая своим отредактированным миди-итемом от ключевой ноты (или с разбивкой на ноты аккорда)
 
@D-Forest, Мне кажется, это задача для VSTi. Вполне может быть, для VSTi вроде ReaLearn, который хорошо знает внутренности проекта в Reaper.

Как вариант, некоторые делают связку скрипта + JSFX, которые общаются через файл, или через параметры эффекта. Но не уверен, что можно из готовых кирпичей относительно быстро собрать такую штуку...
 
@PianoIst, посмотрел реалёрн, интересная штука.

Рипер настолько открыт для разработки на его базе всего что хочешь, что я думаю что вполне можно было бы вторгнуться в область программно-аппаратного взаимодействия рабочей станции и сэмулировать её 1 к 1 или даже в разы лучше.

Просто это узкоспециализированная инженерная работа, на добровольных началах и для задач которые больше нужны сценическим исполнителям и хмурым 24/7 сонграйтерам, нежели чем типовому пользователю DAW сегодня.

я больше надеюсь, что кто-нибудь когда нибудь уже решил эту задачу

Дайте мне две кнопки в миди эдиторе "играть от ключевой ноты" и "играть от нот аккорда"
223910
дайте галочку в настройках "воспроизводить ноты миди-эдитора при выключенной кнопке Play", дайте выпадающее меню на треке в котором я могу выбрать любой миди-итем с этого трека чтоб он считался "активированным для игры при выключенной кнопке Play"
 
я правильно понимаю что при добавлении FX на одиночный выделенный трек он не только добавляет но и открывает его в float окне?
Да, так и есть. Если сразу на много треков, то не открывает, только на одном
 
@Landre, интересно: что не так?
Я, конечно, задумываюсь периодически о необходимости когда-нибудь переехать на совсем открытую DAW, в исходниках которой я буду ориентироваться. Но пока из кандидатур только Ardour, который доводить по удобству и функциональности до Reaper придётся ещё пару лет, если только и делать, что кодить.

Интересно, что получится из проекта https://github.com/MeadowlarkDAW/Meadowlark . Но я бы тоже в ближайшие пару лет ничего там не ждал. А, т.к. разработчик имеет своё видение и не собирается распараллеливать разработку — то он, может, и протухнет прежде альфа-релиза)
 
  • Like
Реакции: Antonio
@Landre, интересно: что не так?
Некоторый функционал и его особенности других ДАВ в Рипере или не реализуем, или никто не хочет этим заниматься, несмотря на запросы пользователей. Перечислять много. Кстати, как и наоборот. Вопрос в приоритетах, на основании которых используется конкретная ДАВ.
 
Некоторый функционал и его особенности других ДАВ
Речь же была не о функционале а об открытости системы, которая позволяет сторонним разработчикам писать плагины и скрипты для Рипера. Более открыты, чем рипер, только опэн сорсы. Ограничений для стороннего разработчика не много, просто объем работы для создания того же кордтрэка такой, что никто не хочет браться, зная, что дохода от этого не будет. А мелочи можно заказывать, программисты-любители будут благодарны за идею для нового проекта.
 
  • Like
Реакции: Landre
Други, в репаке есть такой скрипт Script: X-Raym_Replace envelope points by linear points at regular interval.lua
Код:
--[[
 * 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 and UserInput() 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

    if UserInput() then
      Action(env)
    end

  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 )

Помогите плиз корректно удалить из него User Input (то есть чтобы скрипт не запрашивал в начале ввод значения, а сразу исполнялся).
Спасибо!
 

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