Т.к. планирую эту идею развивать (возможно в виде новых скриптов), создам топик. Скрипт достаточно навороченный для моего текущего уровня, но вроде все получилось  Итак - объединение нескольких треков или каналов в мультиканальную вав. С помощью рендера. В том числе - можно из двух моно сложить стерео, но т.к. принцип посылов (на которых собственно и построен скрипт) выглядит как 1 на 1 канал, 1 на 2 канал, то, соответственно, это будет то  же самое, что выставить панорамники 100R и 100L в моно-паре. Скрипты рендерят сигнал постфейдерно (пост ФХ), но и вынимают его из инсерт-треков, то есть все ваши посылы не будут рендерятся! Для этого у меня есть другой свой скрипт - "Mixdown selection".
 Итак - объединение нескольких треков или каналов в мультиканальную вав. С помощью рендера. В том числе - можно из двух моно сложить стерео, но т.к. принцип посылов (на которых собственно и построен скрипт) выглядит как 1 на 1 канал, 1 на 2 канал, то, соответственно, это будет то  же самое, что выставить панорамники 100R и 100L в моно-паре. Скрипты рендерят сигнал постфейдерно (пост ФХ), но и вынимают его из инсерт-треков, то есть все ваши посылы не будут рендерятся! Для этого у меня есть другой свой скрипт - "Mixdown selection".
Данный скрипт отобразит в окне ввода столько треков, сколько выделено. Ограничение 16 шт на уровне API. Также он отобразит название треков - если оно более 16 символов, сократит название по центру, а если имени у трека нет, напишет "Track untitled" с порядковым номером.
Ставим напротив трека 1 - значит моно, 2 - значит стерео. Другие данные скрипт не принимает. Если выбрать для трека моно, но у него стерео источник, то просто возьмется первый левый канал. Скрипт учитывает TS если он есть (если нет - рендерит весь трек). Ошибки буду исправлять, если что, с виду исправно. Последнее, что сейчас добавлю - скрипт использует одну функцию от SWS API, так что без SWS никак
В общем-то и все! Гифку и сам скрипт прикреплю в виде файла и исходного кода.
		
		
	
	
	
	
		
			
	
	
	
		
		
	
				
			 Итак - объединение нескольких треков или каналов в мультиканальную вав. С помощью рендера. В том числе - можно из двух моно сложить стерео, но т.к. принцип посылов (на которых собственно и построен скрипт) выглядит как 1 на 1 канал, 1 на 2 канал, то, соответственно, это будет то  же самое, что выставить панорамники 100R и 100L в моно-паре. Скрипты рендерят сигнал постфейдерно (пост ФХ), но и вынимают его из инсерт-треков, то есть все ваши посылы не будут рендерятся! Для этого у меня есть другой свой скрипт - "Mixdown selection".
 Итак - объединение нескольких треков или каналов в мультиканальную вав. С помощью рендера. В том числе - можно из двух моно сложить стерео, но т.к. принцип посылов (на которых собственно и построен скрипт) выглядит как 1 на 1 канал, 1 на 2 канал, то, соответственно, это будет то  же самое, что выставить панорамники 100R и 100L в моно-паре. Скрипты рендерят сигнал постфейдерно (пост ФХ), но и вынимают его из инсерт-треков, то есть все ваши посылы не будут рендерятся! Для этого у меня есть другой свой скрипт - "Mixdown selection".Данный скрипт отобразит в окне ввода столько треков, сколько выделено. Ограничение 16 шт на уровне API. Также он отобразит название треков - если оно более 16 символов, сократит название по центру, а если имени у трека нет, напишет "Track untitled" с порядковым номером.
Ставим напротив трека 1 - значит моно, 2 - значит стерео. Другие данные скрипт не принимает. Если выбрать для трека моно, но у него стерео источник, то просто возьмется первый левый канал. Скрипт учитывает TS если он есть (если нет - рендерит весь трек). Ошибки буду исправлять, если что, с виду исправно. Последнее, что сейчас добавлю - скрипт использует одну функцию от SWS API, так что без SWS никак
В общем-то и все! Гифку и сам скрипт прикреплю в виде файла и исходного кода.

		JavaScript:
	
	  function bla() end function nothing() reaper.defer(bla) end
  ---Test---How many selected tracks?---------------------------------------------------
  local count_sel_tracks = reaper.CountSelectedTracks(0)
  if count_sel_tracks == 0 then
    reaper.MB('No tracks. Please select tracks', 'Error', 0) nothing() return
  elseif count_sel_tracks > 16 then
    reaper.MB('More than 16 tracks are not supported :(', 'Error', 0) nothing() return
  end
  --------------------------------------------------------------------------------------
  ---Create userinput default values----------------------------------
  local num_inputs = string.rep('1,',count_sel_tracks)
  num_inputs = string.sub(num_inputs, 0, string.len(num_inputs)-1)
  --------------------------------------------------------------------
  local t = {}
  ---Get selected tracks count and tracks names for userinput and contraction the track name, if it's long---
  for i=0, count_sel_tracks-1 do
    local track_for_name = reaper.GetSelectedTrack(0,i)
    local _, name_of_sel_track = reaper.GetSetMediaTrackInfo_String( track_for_name, 'P_NAME', 0, false)
    string_track_length = string.len(name_of_sel_track)
    if string_track_length > 16 then
      name_of_sel_track = string.format(string.sub(name_of_sel_track, 0, 8) .. "%s",
      '...'..string.sub(name_of_sel_track, string_track_length-6, string_track_length))
    elseif string_track_length == 0 then
      name_of_sel_track = "Track untitled "..i+1 ---Named track, even if no name
    end
    name_of_sel_track = string.format(name_of_sel_track .. "%s",'  (chan):,')
    table.insert(t,name_of_sel_track)
  end
  -----------------------------------------------------------------------------------------------------------
  local inputs_names = table.concat(t) ---String from tracks and tracks names table
  ::START::
  ---User input for entering values----------------------------------------------------------------------------
  local retval, retvals_csv =
  reaper.GetUserInputs('Create multichannel track from sel tracks', count_sel_tracks, inputs_names, num_inputs)
  -------------------------------------------------------------------------------------------------------------
  if retval then
      local t_val = {}
      ---Test---"You can only enter mono(1) or stereo(2) channels"-------------------
      for s in string.gmatch(retvals_csv, "%d+") do
        table.insert(t_val,tonumber(s))
        if tonumber(s) ~= 1 and tonumber(s) ~= 2 then
          reaper.MB('You can only enter mono(1) or stereo(2) channels', 'Error', 0)
          goto START
        end
      end
      -------------------------------------------------------------------------------
      ---Test---"You can only enter mono(1) or stereo(2) channels" and get table count of new values---
      local length_table = 0
      local count_table = 0
      for i=1, #t_val do
        length_table = length_table + 1
        count_table = count_table + t_val[i]
      end
      if length_table ~= count_sel_tracks then
        reaper.MB('You can only enter mono(1) or stereo(2) channels', 'Error', 0)
        goto START
      end
      --------------------------------------------------------------------------------------------------
      reaper.Undo_BeginBlock()
      reaper.PreventUIRefresh(1)
      ---Insert track for render at top of selected tracks and set track channel count from table--
      local tra = reaper.GetSelectedTrack(0,0)
      local number_tra = reaper.GetMediaTrackInfo_Value(tra,'IP_TRACKNUMBER')
      reaper.InsertTrackAtIndex(number_tra-1,true)
      reaper.SetMediaTrackInfo_Value(reaper.GetTrack(0,number_tra-1), "I_NCHAN", count_table)
      ---------------------------------------------------------------------------------------------
 
      local t_tracks = {}
      local num_ch = 0 ---unit for channel cycle
      for i=1, count_sel_tracks do
        t_tracks[i] = reaper.GetSelectedTrack(0,i-1) ---save tracks selection
        local get_track = reaper.GetSelectedTrack(0,i-1)
        if t_val[i] == 1 then
          reaper.CreateTrackSend( get_track, reaper.GetTrack(0,number_tra-1))
          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 == reaper.GetTrack(0,number_tra-1) then ---searching send track if sends are already exist
              ---Insert 1-1, 1-2, 1-3, 1-4 etc. sends for mono tracks-------------------
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', 1024)
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', 1024+num_ch)
              num_ch = num_ch + 1
              --------------------------------------------------------------------------
            end
          end
        elseif t_val[i] == 2 then
          local num_send = 0 ---unit for searching send track if sends are already exist
          reaper.CreateTrackSend( get_track, reaper.GetTrack(0,number_tra-1))
          reaper.CreateTrackSend( get_track, reaper.GetTrack(0,number_tra-1))
          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 == reaper.GetTrack(0,number_tra-1) and num_send == 0 then
            ---Insert 1-1, 2-2, 1-3, 2-4, 1-5, 2-6 etc. sends for stereo tracks---------
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', 1024)  
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', 1024+num_ch)
              num_send = 1
            elseif send_track == reaper.GetTrack(0,number_tra-1) and num_send == 1 then
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_SRCCHAN', 1025)
              reaper.SetTrackSendInfo_Value( get_track, 0, j, 'I_DSTCHAN', 1025+num_ch)
              num_ch = num_ch + 2
              num_send = 0
            ----------------------------------------------------------------------------
            end
          end
        end
      end
      reaper.SetOnlyTrackSelected(reaper.GetTrack(0,number_tra-1),true) ---select only global folder track for render
      local count_tr_br = reaper.CountTracks(0) ---count tracks before render
      reaper.Main_OnCommand(41720, 0) -- Render multichannel
      local count_tr_ar = reaper.CountTracks(0) ---count tracks after render
      if count_tr_ar > count_tr_br then ---if render is not canceled
        reaper.DeleteTrack(reaper.GetTrack(0,number_tra))
        for i=1, #t_tracks do
          reaper.SetMediaTrackInfo_Value(t_tracks[i],'B_MUTE',1) ---set source tracks mute
        end
      elseif count_tr_br == count_tr_ar then ---if render is canceled
        reaper.DeleteTrack(reaper.GetTrack(0,number_tra-1))
        for i=1, #t_tracks do
          reaper.SetTrackSelected(t_tracks[i],true) ---restore source tracks selection
        end
      end
  else nothing() return end ---end script if cancel in user input
  reaper.Undo_EndBlock('Create multichannel track from selected tracks (render)',-1)
  reaper.PreventUIRefresh(-1)Вложения
			
				Последнее редактирование: 
				
		
	
										
										
											
	
										
									
								 
	 
	 
 
		
 
 
		