Создание аудио сендов из выделенных треков с параметрами

borisuperful

Well-Known Member
31 Янв 2013
2.017
1.158
113
После рендеров несложно было сделать и этот скрипт, т.к. алгоритм посылов у меня уже был.
Итак, скрипт создает сенды на новый сенд трек с параметрами, если ввести имя сенд трека, которого нет в проекте.
Если ввести имя сенд трека, который уже есть, то посыл будет создаваться соответственно к существующему сенд треку
В шапке скрипта можно ввести некоторые свои параметры.
Вроде и все. Для мастер сенда пишем 0 или 1 (0 нет, 1 да). Если найдете ошибки, пишите, поправлю.

5p4XVfkJjA.gif

JavaScript:
  --///////----USER--INPUTS----\\\\\\\\\----CUSTOMIZE--THIS----////////////////////

  ----User input default values-------------------------------------------------
  send_track_name = 'BUS'   ---- "Set the send track name"
  source_send = '1/2'       ---- "Set source send (x or x/y)"
  destination_send = '1/2'  ---- "Set destination send (x or x/y)"
  master_send = '0'         ---- "Master send on source tracks"
  send_mode = '0'           ---- "Post-fd (0) pre-fx (1) post-fx (3)"
  ------------------------------------------------------------------------------

  ----Color for new send track, if no existed-----------------------------------
  R = 40  ---- Red
  G = 40  ---- Green
  B = 40  ---- Blue
  ------------------------------------------------------------------------------

  ----Other parameters for new send track, if no existed------------------------
  height_size = 45           ---- Height size in TCP
  height_lock = true         ---- Lock height track in TCP --- true or false
  show_in_TCP = true         ---- Show or hide track in TCP --- true or false
  end_of_track_list = false  ---- Insert at end of track list --- true of false
  ------------------------------------------------------------------------------

  --\\\\\\----RUN--RUN--RUN----/////////----START--SCRIPT------\\\\\\\\\\\\\\\\\\\\

  function bla() end function nothing() reaper.defer(bla) end

  count_sel_tracks = reaper.CountSelectedTracks(0)
  if count_sel_tracks == 0 then reaper.MB('No tracks. Please select a track', 'Error', 0) nothing() return end

  local test_SWS = reaper.NF_GetMediaItemPeakRMS_Windowed --function added in 2.9.7 SWS
  if not test_SWS then
    reaper.MB('Please install or update SWS extension', 'Error', 0) nothing() return
  end

  if (height_lock ~= true and height_lock ~= false)
  or (show_in_TCP ~= true and show_in_TCP ~= false)
  or (end_of_track_list ~= true and end_of_track_list ~= false) then
    reaper.MB('Incorrect values for "height lock" or "show in TCP" or "end_of_track_list" parameters. Please enter "true" or "false"',
    'Error',0)
    nothing() return
  end

  function bool_for_settings(bl)
    if bl == true then
      bl = 1
    elseif bl == false then
      bl = 0
    end
    return bl
  end

  height_lock = bool_for_settings(height_lock)
  show_in_TCP = bool_for_settings(show_in_TCP)

  local values_for_script = send_track_name
  ..","..source_send
  ..","..destination_send
  ..","..master_send
  ..","..send_mode

  ::START::
  local retval, retvals_csv = reaper.GetUserInputs('Create sends to track from sel. tracks', 5,
  'Set the send track name:,Set source send (x or x/y):,Set destination send (x or x/y):,Master send on source tracks:,Post-fd (0) pre-fx (1) post-fx (3):',
  values_for_script)

  if retval then
    reaper.Undo_BeginBlock()
    reaper.PreventUIRefresh(1)
   
    local t_val = {}
    for s in string.gmatch(retvals_csv, "[^,]+") do
      table.insert(t_val,s)
    end
   
    if #t_val ~= 5 then
      reaper.MB('Incorrect value or no value. Please enter a valid value for any line','Error',0) goto START
    end

    local val_name, val_src_send, val_dst_send, val_main_send, val_mode =
    retvals_csv:match("([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)")
     
   
    val_main_send = tonumber(val_main_send)
    val_mode = tonumber(val_mode)
   
    if (not val_main_send or (val_main_send ~= 1 and val_main_send ~= 0))
    or (not val_mode or (val_mode ~= 0 and val_mode ~= 1 and val_mode ~= 2 and val_mode ~= 3)) then
      reaper.MB('Incorrect value. Please enter a valid value for master send or send mode','Error',0)
      goto START
    end
   
    function Round_To_Integer(x, n)
      n = n or 1
      return math.floor(x / n + 0.5) * n
    end
   
    function Round_To_Even(number_round)
      if (number_round % 2 ~= 0) then
        number_round = number_round+1
      end
      return number_round
    end
   
   
    function convert_string_to_send_number_or_channels(value)
      if value == tostring(value) then
        local t_string = {}
        local bool_num = true
        for num in string.gmatch(value, "([^/]+)") do
          if not tonumber(num) then
            bool_num = false
          end
          table.insert(t_string, num)
        end
        if bool_num == true then
          local def_num = Round_To_Integer(tonumber(t_string[1]),1)
          if value == def_num .. '/' .. def_num+1
          and (def_num > 0 and def_num < 64) and def_num == tonumber(t_string[1]) then
            value = def_num-1
          elseif value == t_string[1]
          and (def_num > 0 and def_num <= 64) and def_num == tonumber(t_string[1]) then
            value = def_num+1023
          else
            value = false
          end
        elseif bool_num == false then
          value = false
        end
      elseif value == tonumber(value) then
        if value < 1024 then
          value = Round_To_Even(value+2)
        else
          value = Round_To_Even(value-1023)
        end
      end
      return value
    end
   
    val_src_send = convert_string_to_send_number_or_channels(val_src_send)
    val_dst_send = convert_string_to_send_number_or_channels(val_dst_send)
    if val_src_send == false or val_dst_send == false then
      reaper.MB('Incorrect value. Please enter a valid value for source or destination sends','Error',0) goto START
    end
   
    local found_tr = false
    for i=1, reaper.CountTracks(0) do
      local get_tr = reaper.GetTrack(0,i-1)
      retval, buf = reaper.GetTrackName(get_tr)
      if buf == val_name then
        save_tr = get_tr
        found_tr = true
        break
      end
    end
   
    if found_tr == true then
      if reaper.IsTrackSelected(save_tr) == true then
        reaper.MB('The send track has already been selected, take a closer look :)','Error',0)
        nothing() return
      end
    elseif found_tr == false then
      if end_of_track_list == false then
        reaper.InsertTrackAtIndex(0,false)
        save_tr = reaper.GetTrack(0,0)
      elseif end_of_track_list == true then
        reaper.InsertTrackAtIndex(reaper.CountTracks(0),false)
        save_tr = reaper.GetTrack(0,reaper.CountTracks(0)-1)
      end
      color = reaper.ColorToNative(R,G,B)|0x1000000
      reaper.SetTrackColor(save_tr,color)
      reaper.GetSetMediaTrackInfo_String(save_tr, 'P_NAME', val_name, true)
      reaper.SetMediaTrackInfo_Value(save_tr, 'I_HEIGHTOVERRIDE', height_size)
      reaper.SetMediaTrackInfo_Value(save_tr, 'B_HEIGHTLOCK', height_lock)
      reaper.SetMediaTrackInfo_Value(save_tr, 'B_SHOWINTCP', show_in_TCP)
    end
   
    if reaper.GetMediaTrackInfo_Value(save_tr, "I_NCHAN") < convert_string_to_send_number_or_channels(val_dst_send) then  
      reaper.SetMediaTrackInfo_Value(save_tr, "I_NCHAN", convert_string_to_send_number_or_channels(val_dst_send))
    end
   
   
    local count_s = {}
    local count_unit = 0
    for i=0, count_sel_tracks-1 do
      local track_get = reaper.GetSelectedTrack(0,i)
      reaper.CreateTrackSend(track_get, save_tr)
      for j=0, reaper.GetTrackNumSends(track_get,0)-1 do
        local send_t = reaper.BR_GetMediaTrackSendInfo_Track(track_get, 0, j, 1)
        if send_t == save_tr then
          count_unit = count_unit + 1
        end
      end
      count_s[i+1] = count_unit
      count_unit = 0
    end
   
    local cycle_cnt = 0
    for i=0, count_sel_tracks-1 do
      local get_track = reaper.GetSelectedTrack(0,i)
      reaper.SetMediaTrackInfo_Value(get_track, 'B_MAINSEND', val_main_send)
      if reaper.GetMediaTrackInfo_Value(get_track, "I_NCHAN") < convert_string_to_send_number_or_channels(val_src_send) then
        reaper.SetMediaTrackInfo_Value(get_track, "I_NCHAN", convert_string_to_send_number_or_channels(val_src_send))
      end
      for j=0, reaper.GetTrackNumSends(get_track,0)-1 do
        local send_track = reaper.BR_GetMediaTrackSendInfo_Track(get_track, 0, j, 1)
        if send_track == save_tr then
          cycle_cnt = cycle_cnt + 1
          if cycle_cnt == count_s[i+1] then
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', val_src_send)
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', val_dst_send)
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SENDMODE', val_mode)
            reaper.BR_GetSetTrackSendInfo( get_track, 0, j, 'I_MIDI_SRCCHAN', true, -1)
          end
        end
      end
      cycle_cnt = 0
    end

    reaper.Undo_EndBlock('Create send track with sends parameters from selected tracks',-1)
    reaper.PreventUIRefresh(-1)
  else nothing() return end
 

Вложения

Последнее редактирование:
Добавил еще одно исключение в валидность значений для сендов, а так не существенно, если вводить только х или х/(x+1)

JavaScript:
  --///////----USER--INPUTS----\\\\\\\\\----CUSTOMIZE--THIS----////////////////////

  ----User input default values-------------------------------------------------
  send_track_name = 'BUS'   ---- "Set the send track name"
  source_send = '1/2'       ---- "Set source send (x or x/y)"
  destination_send = '1/2'  ---- "Set destination send (x or x/y)"
  master_send = '0'         ---- "Master send on source tracks"
  send_mode = '0'           ---- "Post-fd (0) pre-fx (1) post-fx (3)"
  ------------------------------------------------------------------------------

  ----Color for new send track, if no existed-----------------------------------
  R = 40  ---- Red
  G = 40  ---- Green
  B = 40  ---- Blue
  ------------------------------------------------------------------------------

  ----Other parameters for new send track, if no existed------------------------
  height_size = 45           ---- Height size in TCP
  height_lock = true         ---- Lock height track in TCP --- true or false
  show_in_TCP = true         ---- Show or hide track in TCP --- true or false
  end_of_track_list = false  ---- Insert at end of track list --- true of false
  ------------------------------------------------------------------------------

  --\\\\\\----RUN--RUN--RUN----/////////----START--SCRIPT------\\\\\\\\\\\\\\\\\\\\

  function bla() end function nothing() reaper.defer(bla) end

  count_sel_tracks = reaper.CountSelectedTracks(0)
  if count_sel_tracks == 0 then reaper.MB('No tracks. Please select a track', 'Error', 0) nothing() return end

  local test_SWS = reaper.NF_GetMediaItemPeakRMS_Windowed --function added in 2.9.7 SWS
  if not test_SWS then
    reaper.MB('Please install or update SWS extension', 'Error', 0) nothing() return
  end

  if (height_lock ~= true and height_lock ~= false)
  or (show_in_TCP ~= true and show_in_TCP ~= false)
  or (end_of_track_list ~= true and end_of_track_list ~= false) then
    reaper.MB('Incorrect values for "height lock" or "show in TCP" or "end_of_track_list" parameters. Please enter "true" or "false"',
    'Error',0)
    nothing() return
  end

  function bool_for_settings(bl)
    if bl == true then
      bl = 1
    elseif bl == false then
      bl = 0
    end
    return bl
  end

  height_lock = bool_for_settings(height_lock)
  show_in_TCP = bool_for_settings(show_in_TCP)

  local values_for_script = send_track_name
  ..","..source_send
  ..","..destination_send
  ..","..master_send
  ..","..send_mode

  ::START::
  local retval, retvals_csv = reaper.GetUserInputs('Create sends to track from sel. tracks', 5,
  'Set the send track name:,Set source send (x or x/y):,Set destination send (x or x/y):,Master send on source tracks:,Post-fd (0) pre-fx (1) post-fx (3):',
  values_for_script)

  if retval then
    reaper.Undo_BeginBlock()
    reaper.PreventUIRefresh(1)
 
    local t_val = {}
    for s in string.gmatch(retvals_csv, "[^,]+") do
      table.insert(t_val,s)
    end
 
    if #t_val ~= 5 then
      reaper.MB('Incorrect value or no value. Please enter a valid value for any line','Error',0) goto START
    end

    local val_name, val_src_send, val_dst_send, val_main_send, val_mode =
    retvals_csv:match("([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)")
   
 
    val_main_send = tonumber(val_main_send)
    val_mode = tonumber(val_mode)
 
    if (not val_main_send or (val_main_send ~= 1 and val_main_send ~= 0))
    or (not val_mode or (val_mode ~= 0 and val_mode ~= 1 and val_mode ~= 2 and val_mode ~= 3)) then
      reaper.MB('Incorrect value. Please enter a valid value for master send or send mode','Error',0)
      goto START
    end
 
    function Round_To_Integer(x, n)
      n = n or 1
      return math.floor(x / n + 0.5) * n
    end
 
    function Round_To_Even(number_round)
      if (number_round % 2 ~= 0) then
        number_round = number_round+1
      end
      return number_round
    end
 
    function convert_string_to_send_number_or_channels(value)
      if value == tostring(value) then
        if value ~= string.rep('/',string.len(value)) then
          local t_string = {}
          local bool_num = true
          for num in string.gmatch(value, "([^/]+)") do
            if not tonumber(num) then
              bool_num = false
            end
            table.insert(t_string, num)
          end
          if bool_num == false then
            value = false
          elseif bool_num == true then
            local def_num = Round_To_Integer(tonumber(t_string[1]),1)
            if value == def_num .. '/' .. def_num+1
            and (def_num > 0 and def_num < 64) and def_num == tonumber(t_string[1]) then
              value = def_num-1
            elseif value == t_string[1]
            and (def_num > 0 and def_num <= 64) and def_num == tonumber(t_string[1]) then
              value = def_num+1023
            else
              value = false
            end
          end
        else
          value = false
        end
      elseif value == tonumber(value) then
        if value < 1024 then
          value = Round_To_Even(value+2)
        else
          value = Round_To_Even(value-1023)
        end
      end
      return value
    end
 
    val_src_send = convert_string_to_send_number_or_channels(val_src_send)
    val_dst_send = convert_string_to_send_number_or_channels(val_dst_send)
    if val_src_send == false or val_dst_send == false then
      reaper.MB('Incorrect value. Please enter a valid value for source or destination sends','Error',0) goto START
    end
 
    local found_tr = false
    for i=1, reaper.CountTracks(0) do
      local get_tr = reaper.GetTrack(0,i-1)
      retval, buf = reaper.GetTrackName(get_tr)
      if buf == val_name then
        save_tr = get_tr
        found_tr = true
        break
      end
    end
 
    if found_tr == true then
      if reaper.IsTrackSelected(save_tr) == true then
        reaper.MB('The send track has already been selected, take a closer look :)','Error',0)
        nothing() return
      end
    elseif found_tr == false then
      if end_of_track_list == false then
        reaper.InsertTrackAtIndex(0,false)
        save_tr = reaper.GetTrack(0,0)
      elseif end_of_track_list == true then
        reaper.InsertTrackAtIndex(reaper.CountTracks(0),false)
        save_tr = reaper.GetTrack(0,reaper.CountTracks(0)-1)
      end
      color = reaper.ColorToNative(R,G,B)|0x1000000
      reaper.SetTrackColor(save_tr,color)
      reaper.GetSetMediaTrackInfo_String(save_tr, 'P_NAME', val_name, true)
      reaper.SetMediaTrackInfo_Value(save_tr, 'I_HEIGHTOVERRIDE', height_size)
      reaper.SetMediaTrackInfo_Value(save_tr, 'B_HEIGHTLOCK', height_lock)
      reaper.SetMediaTrackInfo_Value(save_tr, 'B_SHOWINTCP', show_in_TCP)
    end
 
    if reaper.GetMediaTrackInfo_Value(save_tr, "I_NCHAN") < convert_string_to_send_number_or_channels(val_dst_send) then
      reaper.SetMediaTrackInfo_Value(save_tr, "I_NCHAN", convert_string_to_send_number_or_channels(val_dst_send))
    end
 
 
    local count_s = {}
    local count_unit = 0
    for i=0, count_sel_tracks-1 do
      local track_get = reaper.GetSelectedTrack(0,i)
      reaper.CreateTrackSend(track_get, save_tr)
      for j=0, reaper.GetTrackNumSends(track_get,0)-1 do
        local send_t = reaper.BR_GetMediaTrackSendInfo_Track(track_get, 0, j, 1)
        if send_t == save_tr then
          count_unit = count_unit + 1
        end
      end
      count_s[i+1] = count_unit
      count_unit = 0
    end
 
    local cycle_cnt = 0
    for i=0, count_sel_tracks-1 do
      local get_track = reaper.GetSelectedTrack(0,i)
      reaper.SetMediaTrackInfo_Value(get_track, 'B_MAINSEND', val_main_send)
      if reaper.GetMediaTrackInfo_Value(get_track, "I_NCHAN") < convert_string_to_send_number_or_channels(val_src_send) then
        reaper.SetMediaTrackInfo_Value(get_track, "I_NCHAN", convert_string_to_send_number_or_channels(val_src_send))
      end
      for j=0, reaper.GetTrackNumSends(get_track,0)-1 do
        local send_track = reaper.BR_GetMediaTrackSendInfo_Track(get_track, 0, j, 1)
        if send_track == save_tr then
          cycle_cnt = cycle_cnt + 1
          if cycle_cnt == count_s[i+1] then
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', val_src_send)
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', val_dst_send)
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SENDMODE', val_mode)
            reaper.BR_GetSetTrackSendInfo( get_track, 0, j, 'I_MIDI_SRCCHAN', true, -1)
          end
        end
      end
      cycle_cnt = 0
    end

    reaper.Undo_EndBlock('Create send track with sends parameters from selected tracks',-1)
    reaper.PreventUIRefresh(-1)
  else nothing() return end
 
  • Like
Реакции: Antonio и Mr_Tsonts
А в этом варианте сделал дополнительные опции куда отправить трек - в конец выделенных или начало выделенных.

JavaScript:
  --/////////////----USER--INPUTS----\\\\\\\\\----CUSTOMIZE--THIS----//////////////

  ----User input default values-------------------------------------------------
  send_track_name = 'BUS'   ---- "Set the send track name"
  source_send = '1/2'       ---- "Set source send (x or x/y)"
  destination_send = '1/2'  ---- "Set destination send (x or x/y)"
  master_send = '0'         ---- "Master send on source tracks"
  send_mode = '0'           ---- "Post-fd (0) pre-fx (1) post-fx (3)"
  ------------------------------------------------------------------------------

  ----Color for new send track, if no existed-----------------------------------
  R = 40  ---- Red
  G = 40  ---- Green
  B = 40  ---- Blue
  ------------------------------------------------------------------------------

  ----Other parameters for new send track, if no existed------------------------
  height_size = 45          ---- Height size in TCP
  height_lock = true        ---- Lock height track in TCP --- true or false
  show_in_TCP = true        ---- Show or hide track in TCP --- true or false
  ------------------------------------------------------------------------------
 
  ----Where will be the new send track, if no existed?--------------------------
  where_track = 1           ---- 1 - start, 2 - end of all tracks
                            ---- 3 - start, 4 - end of selected tracks
  ------------------------------------------------------------------------------

  --\\\\\\\\\\\\----RUN--RUN--RUN----/////////----START--SCRIPT------\\\\\\\\\\\\\\

  function bla() end function nothing() reaper.defer(bla) end

  count_sel_tracks = reaper.CountSelectedTracks(0)
  if count_sel_tracks == 0 then reaper.MB('No tracks. Please select a track', 'Error', 0) nothing() return end

  local test_SWS = reaper.NF_GetMediaItemPeakRMS_Windowed --function added in 2.9.7 SWS
  if not test_SWS then
    reaper.MB('Please install or update SWS extension', 'Error', 0) nothing() return
  end

  if (height_lock ~= true and height_lock ~= false)
  or (show_in_TCP ~= true and show_in_TCP ~= false)
  or (where_track ~= 1 and where_track ~= 2 and where_track ~= 3 and where_track ~= 4) then
    reaper.MB('Incorrect values for "height lock" or "show in TCP" or "where track" parameters. Look at the beginning of the script',
    'Error',0)
    nothing() return
  end

  function bool_for_settings(bl)
    if bl == true then
      bl = 1
    elseif bl == false then
      bl = 0
    end
    return bl
  end

  height_lock = bool_for_settings(height_lock)
  show_in_TCP = bool_for_settings(show_in_TCP)

  local values_for_script = send_track_name
  ..","..source_send
  ..","..destination_send
  ..","..master_send
  ..","..send_mode

  ::START::
  local retval, retvals_csv = reaper.GetUserInputs('Create sends to track from sel. tracks', 5,
  'Set the send track name:,Set source send (x or x/y):,Set destination send (x or x/y):,Master send on source tracks:,Post-fd (0) pre-fx (1) post-fx (3):',
  values_for_script)

  if retval then
    reaper.Undo_BeginBlock()
    reaper.PreventUIRefresh(1)
  
    local t_val = {}
    for s in string.gmatch(retvals_csv, "[^,]+") do
      table.insert(t_val,s)
    end
  
    if #t_val ~= 5 then
      reaper.MB('Incorrect value or no value. Please enter a valid value for any line','Error',0) goto START
    end

    local val_name, val_src_send, val_dst_send, val_main_send, val_mode =
    retvals_csv:match("([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)")
    
  
    val_main_send = tonumber(val_main_send)
    val_mode = tonumber(val_mode)
  
    if (not val_main_send or (val_main_send ~= 1 and val_main_send ~= 0))
    or (not val_mode or (val_mode ~= 0 and val_mode ~= 1 and val_mode ~= 2 and val_mode ~= 3)) then
      reaper.MB('Incorrect value. Please enter a valid value for master send or send mode','Error',0)
      goto START
    end
  
    function Round_To_Integer(x, n)
      n = n or 1
      return math.floor(x / n + 0.5) * n
    end
  
    function Round_To_Even(number_round)
      if (number_round % 2 ~= 0) then
        number_round = number_round+1
      end
      return number_round
    end
  
    function convert_string_to_send_number_or_channels(value)
      if value == tostring(value) then
        if value ~= string.rep('/',string.len(value)) then
          local t_string = {}
          local bool_num = true
          for num in string.gmatch(value, "([^/]+)") do
            if not tonumber(num) then
              bool_num = false
            end
            table.insert(t_string, num)
          end
          if bool_num == false then
            value = false
          elseif bool_num == true then
            local def_num = Round_To_Integer(tonumber(t_string[1]),1)
            if value == def_num .. '/' .. def_num+1
            and (def_num > 0 and def_num < 64) and def_num == tonumber(t_string[1]) then
              value = def_num-1
            elseif value == t_string[1]
            and (def_num > 0 and def_num <= 64) and def_num == tonumber(t_string[1]) then
              value = def_num+1023
            else
              value = false
            end
          end
        else
          value = false
        end
      elseif value == tonumber(value) then
        if value < 1024 then
          value = Round_To_Even(value+2)
        else
          value = Round_To_Even(value-1023)
        end
      end
      return value
    end
  
    val_src_send = convert_string_to_send_number_or_channels(val_src_send)
    val_dst_send = convert_string_to_send_number_or_channels(val_dst_send)
    if val_src_send == false or val_dst_send == false then
      reaper.MB('Incorrect value. Please enter a valid value for source or destination sends','Error',0) goto START
    end
  
    local found_tr = false
    local found_bln = false
    for i=1, reaper.CountTracks(0) do
      local get_tr = reaper.GetTrack(0,i-1)
      retval, buf = reaper.GetTrackName(get_tr)
      if buf == val_name then
        if found_bln == false then
          save_tr = get_tr
          found_tr = true
          found_bln = true
        else
          reaper.MB('You have several tracks with this name','Error',0) goto START
        end
      end
    end
  
    if found_tr == true then
      if reaper.IsTrackSelected(save_tr) == true then
        reaper.MB('The send track has already been selected, take a closer look :)','Error',0)
        nothing() return
      end
    elseif found_tr == false then
      if where_track == 1 then
        reaper.InsertTrackAtIndex(0,false)
        save_tr = reaper.GetTrack(0,0)
      elseif where_track == 3 then
        local numb_frst_tr = reaper.GetMediaTrackInfo_Value(reaper.GetSelectedTrack(0,0),'IP_TRACKNUMBER')
        reaper.InsertTrackAtIndex(numb_frst_tr-1,false)
        save_tr = reaper.GetTrack(0,numb_frst_tr-1)       
      else
        local t_sel_tracks = {}
        for i=1, count_sel_tracks do
          t_sel_tracks[i] = reaper.GetSelectedTrack(0,i-1)
        end
        if where_track == 2 then
          reaper.InsertTrackAtIndex(reaper.CountTracks(0),false)
          save_tr = reaper.GetTrack(0,reaper.CountTracks(0)-1)
          reaper.SetOnlyTrackSelected(save_tr, true)
          reaper.ReorderSelectedTracks(reaper.CountTracks(0)-1,0)
          reaper.Main_OnCommand(40297,0) --unselect all tracks
          for i=1, #t_sel_tracks do
            reaper.SetTrackSelected(t_sel_tracks[i], true)
          end
        elseif where_track == 4 then
          local numb_frst_tr = reaper.GetMediaTrackInfo_Value(reaper.GetSelectedTrack(0,count_sel_tracks-1),'IP_TRACKNUMBER')
          reaper.InsertTrackAtIndex(numb_frst_tr,false)
          save_tr = reaper.GetTrack(0,numb_frst_tr)
          reaper.SetOnlyTrackSelected(save_tr, true)
          reaper.ReorderSelectedTracks(numb_frst_tr,2)
          reaper.Main_OnCommand(40297,0) --unselect all tracks
          for i=1, #t_sel_tracks do
            reaper.SetTrackSelected(t_sel_tracks[i], true)
          end
        end
      end
      color = reaper.ColorToNative(R,G,B)|0x1000000
      reaper.SetTrackColor(save_tr,color)
      reaper.GetSetMediaTrackInfo_String(save_tr, 'P_NAME', val_name, true)
      reaper.SetMediaTrackInfo_Value(save_tr, 'I_HEIGHTOVERRIDE', height_size)
      reaper.SetMediaTrackInfo_Value(save_tr, 'B_HEIGHTLOCK', height_lock)
      reaper.SetMediaTrackInfo_Value(save_tr, 'B_SHOWINTCP', show_in_TCP)
    end
  
    if reaper.GetMediaTrackInfo_Value(save_tr, "I_NCHAN") < convert_string_to_send_number_or_channels(val_dst_send) then 
      reaper.SetMediaTrackInfo_Value(save_tr, "I_NCHAN", convert_string_to_send_number_or_channels(val_dst_send))
    end
  
  
    local count_s = {}
    local count_unit = 0
    for i=0, count_sel_tracks-1 do
      local track_get = reaper.GetSelectedTrack(0,i)
      reaper.CreateTrackSend(track_get, save_tr)
      for j=0, reaper.GetTrackNumSends(track_get,0)-1 do
        local send_t = reaper.BR_GetMediaTrackSendInfo_Track(track_get, 0, j, 1)
        if send_t == save_tr then
          count_unit = count_unit + 1
        end
      end
      count_s[i+1] = count_unit
      count_unit = 0
    end
  
    local cycle_cnt = 0
    for i=0, count_sel_tracks-1 do
      local get_track = reaper.GetSelectedTrack(0,i)
      reaper.SetMediaTrackInfo_Value(get_track, 'B_MAINSEND', val_main_send)
      if reaper.GetMediaTrackInfo_Value(get_track, "I_NCHAN") < convert_string_to_send_number_or_channels(val_src_send) then
        reaper.SetMediaTrackInfo_Value(get_track, "I_NCHAN", convert_string_to_send_number_or_channels(val_src_send))
      end
      for j=0, reaper.GetTrackNumSends(get_track,0)-1 do
        local send_track = reaper.BR_GetMediaTrackSendInfo_Track(get_track, 0, j, 1)
        if send_track == save_tr then
          cycle_cnt = cycle_cnt + 1
          if cycle_cnt == count_s[i+1] then
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', val_src_send)
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', val_dst_send)
            reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SENDMODE', val_mode)
            reaper.BR_GetSetTrackSendInfo( get_track, 0, j, 'I_MIDI_SRCCHAN', true, -1)
          end
        end
      end
      cycle_cnt = 0
    end

    reaper.Undo_EndBlock('Create send track with sends parameters from selected tracks',-1)
    reaper.PreventUIRefresh(-1)
  else nothing() return end
 
  • Like
Реакции: Antonio
Оптимизировал скрипт на поиск нужного посыла, хотя на реальной работе не отражается. Еще улучшил код на валидность значений сендов.

JavaScript:
  --/////////////----USER--INPUTS----\\\\\\\\\----CUSTOMIZE--THIS----//////////////

  ----User input default values-------------------------------------------------
  send_track_name = 'BUS'   ---- "Set the send track name"
  source_send = '1/2'       ---- "Set source send (x or x/y)"
  destination_send = '1/2'  ---- "Set destination send (x or x/y)"
  master_send = '0'         ---- "Master send on source tracks"
  send_mode = '0'           ---- "Post-fd (0) pre-fx (1) post-fx (3)"
  ------------------------------------------------------------------------------

  ----Color for new send track, if no existed-----------------------------------
    ---enter 0 for R and G and B to disable coloring---
  R = 0    ----Red
  G = 0    ----Green
  B = 0    ----Blue
  ------------------------------------------------------------------------------

  ----Other parameters for new send track, if no existed------------------------
  show_in_tcp = true       ---- Show new send track in TCP --- true or false
  ------------------------------------------------------------------------------

  ----Where will be the new send track, if no existed?--------------------------
  where_track = 1           ---- 1 - start, 2 - end of all tracks
                            ---- 3 - start, 4 - end of selected tracks
  ------------------------------------------------------------------------------

  --\\\\\\\\\\\\----RUN--RUN--RUN----/////////----START--SCRIPT------\\\\\\\\\\\\\\

  function bla() end function nothing() reaper.defer(bla) end

  if (show_in_tcp ~= true and show_in_tcp ~= false)
  or (where_track ~= 1 and where_track ~= 2 and where_track ~= 3 and where_track ~= 4)
  then
    reaper.MB('Incorrect values for "show_in_tcp" or "where track" parameters. Look at the beginning of the script',
    'Error',0)
    nothing() return
  end

  local test_SWS = reaper.NF_GetMediaItemPeakRMS_Windowed --function added in 2.9.7 SWS
  if not test_SWS then
    reaper.MB('Please install or update SWS extension', 'Error', 0) nothing() return
  end

  count_sel_tracks = reaper.CountSelectedTracks(0)
  if count_sel_tracks == 0 then reaper.MB('No tracks. Please select a track', 'Error', 0) nothing() return end

  function bool_for_settings(bl)
    if bl == true then
      bl = 1
    elseif bl == false then
      bl = 0
    end
    return bl
  end

  show_in_tcp = bool_for_settings(show_in_tcp)

  local values_for_script = send_track_name
  ..","..source_send
  ..","..destination_send
  ..","..master_send
  ..","..send_mode

  ::START::
  local retval, retvals_csv = reaper.GetUserInputs
  (
  'Create sends to track from sel. tracks', 5,
  ------------Strings in inputs------------
  [=[Set the send tracks name:                      
  ,Set source send (x or x/y):
  ,Set destination send (x or x/y):
  ,Master send on source tracks:
  ,Post-fd (0) pre-fx (1) post-fx (3):]=],
  -----------------------------------------
  values_for_script
  )

  if retval then
    reaper.Undo_BeginBlock()
    reaper.PreventUIRefresh(1)

    local t_val = {}
    for s in string.gmatch(retvals_csv, "[^,]+") do
      table.insert(t_val,s)
    end
   
    if #t_val ~= 5 then
      reaper.MB('Incorrect value or no value. Please enter a valid value for any line','Error',0)
      goto START
    end
   
    local val_name, val_src_send, val_dst_send, val_main_send, val_mode =
    t_val[1], t_val[2], t_val[3], t_val[4], t_val[5]
   
   
    val_main_send_tnbr = tonumber(val_main_send)
    val_mode_tnbr = tonumber(val_mode)

    if (
    val_main_send ~= string.match(val_main_send,'%d')
    or (val_main_send_tnbr ~= 1 and val_main_send_tnbr ~= 0)
    )
    or (
    val_mode ~= string.match(val_mode,'%d')
    or (val_mode_tnbr ~= 0 and val_mode_tnbr ~= 1 and val_mode_tnbr ~= 2 and val_mode_tnbr ~= 3)
    )
    then
      reaper.MB('Incorrect value. Please enter a valid value for master send or send mode','Error',0)
      goto START
    end

    function Round_To_Even(number_round)
      if (number_round % 2 ~= 0) then
        number_round = number_round+1
      end
      return number_round
    end

    function convert_string_to_send_number_or_channels(value)
      if value == string.match(value,"%d+/%d+")
      or value == string.match(value,"%d+")
      then
        num_string = string.match(value,"%d+")
        local def_num = tonumber(num_string)
        if value == def_num .. '/' .. def_num+1
        and (def_num > 0 and def_num < 64)
        then
          value = def_num-1
          value2 = def_num+1
        elseif value == num_string
        and (def_num > 0 and def_num <= 64)
        then
          value = def_num-1|1024
          value2 = def_num
        else
          value = false
          value2 = nil
        end
      else
        value = false
        value2 = nil
      end
      return value, value2
    end

    val_src_send, val_src_2 = convert_string_to_send_number_or_channels(val_src_send)
    val_dst_send, val_dst_2 = convert_string_to_send_number_or_channels(val_dst_send)
    if val_src_send == false or val_dst_send == false then
      reaper.MB('Incorrect value. Please enter a valid value for source or destination sends','Error',0) goto START
    end

    local found_tr = false
    for i=0, reaper.CountTracks(0)-1 do
      local get_tr = reaper.GetTrack(0,i)
      retval, buf = reaper.GetTrackName(get_tr)
      if buf == val_name then
        if found_tr == false then
          save_tr = get_tr
          found_tr = true
        else
          reaper.MB('You have several tracks with this name','Error',0)
          nothing() return
        end
      end
    end

    if found_tr == true then
      if reaper.IsTrackSelected(save_tr) == true then
        reaper.MB('The send track has already been selected, take a closer look :)','Error',0)
        nothing() return
      end
    elseif found_tr == false then
      if where_track == 1 then
        reaper.InsertTrackAtIndex(0,false)
        save_tr = reaper.GetTrack(0,0)
      elseif where_track == 3 then
        local numb_frst_tr = reaper.GetMediaTrackInfo_Value(reaper.GetSelectedTrack(0,0),'IP_TRACKNUMBER')
        reaper.InsertTrackAtIndex(numb_frst_tr-1,false)
        save_tr = reaper.GetTrack(0,numb_frst_tr-1)      
      else
        local t_sel_tracks = {}
        for i=1, count_sel_tracks do
          t_sel_tracks[i] = reaper.GetSelectedTrack(0,i-1)
        end
        local function Insert_and_Reorder_tracks(indx,n)
          reaper.InsertTrackAtIndex(indx,false)
          track = reaper.GetTrack(0,indx)
          reaper.SetOnlyTrackSelected(track, true)
          reaper.ReorderSelectedTracks(indx,n)
          return track
        end
        if where_track == 2 then
          save_tr = Insert_and_Reorder_tracks(reaper.CountTracks(0), 0)
        elseif where_track == 4 then
          local numb_last_tr = reaper.GetMediaTrackInfo_Value(reaper.GetSelectedTrack(0,count_sel_tracks-1),'IP_TRACKNUMBER')
          save_tr = Insert_and_Reorder_tracks(numb_last_tr, 2)
        end  
        reaper.Main_OnCommand(40297,0) --unselect all tracks
        for i=1, #t_sel_tracks do
          reaper.SetTrackSelected(t_sel_tracks[i], true)
        end
      end
      if R == 0 and G == 0 and B == 0 then
        nothing()
      else
        color = reaper.ColorToNative(R,G,B)|0x1000000
        reaper.SetTrackColor(save_tr,color)
      end
      reaper.GetSetMediaTrackInfo_String(save_tr, 'P_NAME', val_name, true)
      reaper.SetMediaTrackInfo_Value(save_tr, 'B_SHOWINTCP', show_in_tcp)
    end

    if reaper.GetMediaTrackInfo_Value(save_tr, "I_NCHAN") < val_dst_2 then
      reaper.SetMediaTrackInfo_Value(save_tr, "I_NCHAN", val_dst_2)
    end

    for i=0, count_sel_tracks-1 do
      local get_track = reaper.GetSelectedTrack(0,i)
      reaper.SetMediaTrackInfo_Value(get_track, 'B_MAINSEND', val_main_send_tnbr)
      reaper.CreateTrackSend(get_track, save_tr)
      if reaper.GetMediaTrackInfo_Value(get_track, "I_NCHAN") < val_src_2 then
        reaper.SetMediaTrackInfo_Value(get_track, "I_NCHAN", val_src_2)
      end
      local j = 0
      local num_sends = reaper.GetTrackNumSends(get_track,0)
      local booln_cycle_1 = false
      while j <= num_sends-1 do
        local send_track = reaper.BR_GetMediaTrackSendInfo_Track(get_track, 0, j, 1)
        local booln_cycle_2 = true
        if send_track == save_tr then
          booln_cycle_1 = true
          booln_cycle_2 = false
        end
        if (booln_cycle_1 == true and booln_cycle_2 == true)
        or j == num_sends-1 then
          if send_track ~= save_tr then
            j = j - 1
          end
          reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', val_src_send)
          reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', val_dst_send)
          reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SENDMODE', val_mode_tnbr)
          reaper.BR_GetSetTrackSendInfo( get_track, 0, j, 'I_MIDI_SRCCHAN', true, -1)
          j = num_sends-1
        end
        j = j + 1
      end
    end

    reaper.Undo_EndBlock('Create send track with sends parameters from selected tracks',-1)
    reaper.PreventUIRefresh(-1)
  else nothing() return end
 
  • Like
Реакции: Antonio
А не подскажете, как изменить скрипт, чтобы окно не появлялось,
Добавил параметр 'HIDE_WINDOW' отключения окна ввода при запуске скрипта.
Установить "local HIDE_WINDOW = true;", что бы окно не появлялось.
JavaScript:
    --///////----USER--INPUTS----\\\\\\\\\----CUSTOMIZE--THIS----////////////////////

    ----User input default values-------------------------------------------------
    send_track_name = 'BUS'   ---- "Set the send track name"
    source_send = '1/2'       ---- "Set source send (x or x/y)"
    destination_send = '1/2'  ---- "Set destination send (x or x/y)"
    master_send = '0'         ---- "Master send on source tracks"
    send_mode = '0'           ---- "Post-fd (0) pre-fx (1) post-fx (3)"
    local HIDE_WINDOW = false;  ---- false / true
    ------------------------------------------------------------------------------

    ----Color for new send track, if no existed-----------------------------------
    R = 40  ---- Red
    G = 40  ---- Green
    B = 40  ---- Blue
    ------------------------------------------------------------------------------

    ----Other parameters for new send track, if no existed------------------------
    height_size = 45           ---- Height size in TCP
    height_lock = true         ---- Lock height track in TCP --- true or false
    show_in_TCP = true         ---- Show or hide track in TCP --- true or false
    end_of_track_list = false  ---- Insert at end of track list --- true of false
    ------------------------------------------------------------------------------

    --\\\\\\----RUN--RUN--RUN----/////////----START--SCRIPT------\\\\\\\\\\\\\\\\\\\\

    function bla() end function nothing() reaper.defer(bla) end

    count_sel_tracks = reaper.CountSelectedTracks(0)
    if count_sel_tracks == 0 then reaper.MB('No tracks. Please select a track', 'Error', 0) nothing() return end

    local test_SWS = reaper.NF_GetMediaItemPeakRMS_Windowed --function added in 2.9.7 SWS
    if not test_SWS then
      reaper.MB('Please install or update SWS extension', 'Error', 0) nothing() return
    end

    if (height_lock ~= true and height_lock ~= false)
    or (show_in_TCP ~= true and show_in_TCP ~= false)
    or (end_of_track_list ~= true and end_of_track_list ~= false) then
      reaper.MB('Incorrect values for "height lock" or "show in TCP" or "end_of_track_list" parameters. Please enter "true" or "false"',
      'Error',0)
      nothing() return
    end

    function bool_for_settings(bl)
      if bl == true then
        bl = 1
      elseif bl == false then
        bl = 0
      end
      return bl
    end

    height_lock = bool_for_settings(height_lock)
    show_in_TCP = bool_for_settings(show_in_TCP)

    local values_for_script = send_track_name
    ..","..source_send
    ..","..destination_send
    ..","..master_send
    ..","..send_mode

    ::START::

    local retval, retvals_csv;--Arc
    if HIDE_WINDOW ~= true then;--Arc
        retval, retvals_csv = reaper.GetUserInputs('Create sends to track from sel. tracks', 5,
        'Set the send track name:,Set source send (x or x/y):,Set destination send (x or x/y):,Master send on source tracks:,Post-fd (0) pre-fx (1) post-fx (3):',
        values_for_script)
    else;--Arc
        retval = true;--Arc
        retvals_csv = send_track_name..','..source_send..','..destination_send..','..master_send..','..send_mode;--Arc
    end;--Arc


    if retval then
      reaper.Undo_BeginBlock()
      reaper.PreventUIRefresh(1)

      local t_val = {}
      for s in string.gmatch(retvals_csv, "[^,]+") do
        table.insert(t_val,s)
      end

      if #t_val ~= 5 then
        reaper.MB('Incorrect value or no value. Please enter a valid value for any line','Error',0) goto START
      end

      local val_name, val_src_send, val_dst_send, val_main_send, val_mode =
      retvals_csv:match("([^,]+),([^,]+),([^,]+),([^,]+),([^,]+)")


      val_main_send = tonumber(val_main_send)
      val_mode = tonumber(val_mode)

      if (not val_main_send or (val_main_send ~= 1 and val_main_send ~= 0))
      or (not val_mode or (val_mode ~= 0 and val_mode ~= 1 and val_mode ~= 2 and val_mode ~= 3)) then
        reaper.MB('Incorrect value. Please enter a valid value for master send or send mode','Error',0)
        goto START
      end

      function Round_To_Integer(x, n)
        n = n or 1
        return math.floor(x / n + 0.5) * n
      end

      function Round_To_Even(number_round)
        if (number_round % 2 ~= 0) then
          number_round = number_round+1
        end
        return number_round
      end


      function convert_string_to_send_number_or_channels(value)
        if value == tostring(value) then
          local t_string = {}
          local bool_num = true
          for num in string.gmatch(value, "([^/]+)") do
            if not tonumber(num) then
              bool_num = false
            end
            table.insert(t_string, num)
          end
          if bool_num == true then
            local def_num = Round_To_Integer(tonumber(t_string[1]),1)
            if value == def_num .. '/' .. def_num+1
            and (def_num > 0 and def_num < 64) and def_num == tonumber(t_string[1]) then
              value = def_num-1
            elseif value == t_string[1]
            and (def_num > 0 and def_num <= 64) and def_num == tonumber(t_string[1]) then
              value = def_num+1023
            else
              value = false
            end
          elseif bool_num == false then
            value = false
          end
        elseif value == tonumber(value) then
          if value < 1024 then
            value = Round_To_Even(value+2)
          else
            value = Round_To_Even(value-1023)
          end
        end
        return value
      end

      val_src_send = convert_string_to_send_number_or_channels(val_src_send)
      val_dst_send = convert_string_to_send_number_or_channels(val_dst_send)
      if val_src_send == false or val_dst_send == false then
        reaper.MB('Incorrect value. Please enter a valid value for source or destination sends','Error',0) goto START
      end

      local found_tr = false
      for i=1, reaper.CountTracks(0) do
        local get_tr = reaper.GetTrack(0,i-1)
        retval, buf = reaper.GetTrackName(get_tr)
        if buf == val_name then
          save_tr = get_tr
          found_tr = true
          break
        end
      end

      if found_tr == true then
        if reaper.IsTrackSelected(save_tr) == true then
          reaper.MB('The send track has already been selected, take a closer look :)','Error',0)
          nothing() return
        end
      elseif found_tr == false then
        if end_of_track_list == false then
          reaper.InsertTrackAtIndex(0,false)
          save_tr = reaper.GetTrack(0,0)
        elseif end_of_track_list == true then
          reaper.InsertTrackAtIndex(reaper.CountTracks(0),false)
          save_tr = reaper.GetTrack(0,reaper.CountTracks(0)-1)
        end
        color = reaper.ColorToNative(R,G,B)|0x1000000
        reaper.SetTrackColor(save_tr,color)
        reaper.GetSetMediaTrackInfo_String(save_tr, 'P_NAME', val_name, true)
        reaper.SetMediaTrackInfo_Value(save_tr, 'I_HEIGHTOVERRIDE', height_size)
        reaper.SetMediaTrackInfo_Value(save_tr, 'B_HEIGHTLOCK', height_lock)
        reaper.SetMediaTrackInfo_Value(save_tr, 'B_SHOWINTCP', show_in_TCP)
      end

      if reaper.GetMediaTrackInfo_Value(save_tr, "I_NCHAN") < convert_string_to_send_number_or_channels(val_dst_send) then
        reaper.SetMediaTrackInfo_Value(save_tr, "I_NCHAN", convert_string_to_send_number_or_channels(val_dst_send))
      end


      local count_s = {}
      local count_unit = 0
      for i=0, count_sel_tracks-1 do
        local track_get = reaper.GetSelectedTrack(0,i)
        reaper.CreateTrackSend(track_get, save_tr)
        for j=0, reaper.GetTrackNumSends(track_get,0)-1 do
          local send_t = reaper.BR_GetMediaTrackSendInfo_Track(track_get, 0, j, 1)
          if send_t == save_tr then
            count_unit = count_unit + 1
          end
        end
        count_s[i+1] = count_unit
        count_unit = 0
      end

      local cycle_cnt = 0
      for i=0, count_sel_tracks-1 do
        local get_track = reaper.GetSelectedTrack(0,i)
        reaper.SetMediaTrackInfo_Value(get_track, 'B_MAINSEND', val_main_send)
        if reaper.GetMediaTrackInfo_Value(get_track, "I_NCHAN") < convert_string_to_send_number_or_channels(val_src_send) then
          reaper.SetMediaTrackInfo_Value(get_track, "I_NCHAN", convert_string_to_send_number_or_channels(val_src_send))
        end
        for j=0, reaper.GetTrackNumSends(get_track,0)-1 do
          local send_track = reaper.BR_GetMediaTrackSendInfo_Track(get_track, 0, j, 1)
          if send_track == save_tr then
            cycle_cnt = cycle_cnt + 1
            if cycle_cnt == count_s[i+1] then
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', val_src_send)
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', val_dst_send)
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SENDMODE', val_mode)
              reaper.BR_GetSetTrackSendInfo( get_track, 0, j, 'I_MIDI_SRCCHAN', true, -1)
            end
          end
        end
        cycle_cnt = 0
      end

      reaper.Undo_EndBlock('Create send track with sends parameters from selected tracks',-1)
      reaper.PreventUIRefresh(-1)
    else nothing() return end
А не подскажете, как изменить скрипт, ... , а просто сделать кнопки посылающие треки в готовые имена? Т.е. сделать кнопку - послать в hall, послать в room.
Сделать копию скрипта и в каждом вписать свое имя трека.

192756
 
Последнее редактирование:
  • Like
Реакции: zybex00
Новые версии данного и других скриптов будут доступны теперь здесь, дабы топики не плодить, там же мануал пишу.
 
Туда кстати мои старые скрипты по рендеру не попали (т.к. они не прижились у людей), но самый любимый у людей Mixdown selection в версии без окна я переписал с нуля и отправил на гитхаб, теперь работает лучше и более похоже на S1
 
  • Like
Реакции: shuco
Ну да, конечно в значениях, лучше бы с возможностью прописывания в скрипте(без окна). По умолчанию -30db, думал можно в скрипте значение изменить. Ну нет, так нет. И без того фишка полезная.
 
Ну да, конечно в значениях, лучше бы с возможностью прописывания в скрипте(без окна). По умолчанию -30db, думал можно в скрипте значение изменить. Ну нет, так нет. И без того фишка полезная.
Сделаю позже, потом перезалью на гитхаб
 
  • Like
Реакции: shuco
Ну да, конечно в значениях, лучше бы с возможностью прописывания в скрипте(без окна). По умолчанию -30db, думал можно в скрипте значение изменить. Ну нет, так нет. И без того фишка полезная.
Можешь вставить новый код или перезалить скрипт, обновил https://github.com/Yaunick/Yaunick-Scripts/tree/main/Tracks
 
  • Like
Реакции: shuco

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