录音/制作/创作 吉他 扩声技术 视频技术 作品展示 生活 信息 更多... | 音频应用专卖店
REAPER

如何打开父轨的多轨乐器

( 2 )
 
[收藏]

958
#1 26-4-2 21:49

如何打开父轨的多轨乐器

想通过子轨道直接打开父轨的多轨乐器(比如kontakt),折腾半天,没弄出来。哪位高手会,请指导一下。

4350
#2 26-4-2 23:58
没有这个操作,只要不是钢琴窗满屏,打开任何一轨的插件都很容易。

774
#3 26-4-3 11:38
可以通过脚本实现,我编过一个,将它绑定在Piano Roll 的“Ctrl+左键单击”动作上,只要在MIDI编辑器里“Ctrl+左键单击”,就会打开本音轨的第一个(乐器)插件,如果本音轨没有,就向上查找发送音轨(父音轨),打开父音轨的第一个(乐器)插件。

代码如下:

  1. function GetFileName()
  2.         local _,file_path=reaper.get_action_context()
  3.         local b=0
  4.         local s
  5.         while true do
  6.                 b,_=string.find(file_path,"\\",b+1)
  7.                 if b==nil then break end
  8.                 s=b
  9.         end
  10.         local _,e=string.find(file_path,"%.")
  11.         local file_name=string.sub(file_path,s+1,e-1)
  12.         return file_name
  13. end

  14. function Main()
  15.         local midieditor=reaper.MIDIEditor_GetActive()
  16.                 if midieditor==nil then return end
  17.         local take=reaper.MIDIEditor_GetTake(midieditor)
  18.                 if take==nil then return end
  19.         local sel_track=reaper.GetSelectedTrack(0, 0)
  20.         local track=reaper.GetMediaItemTake_Track(take)

  21.         reaper.Undo_BeginBlock()
  22.         reaper.MIDI_DisableSort(take)

  23.         if sel_track~=track then
  24.                 reaper.Main_OnCommand(40297, 0)--Track: Unselect (clear selection of) all tracks
  25.                 reaper.SetTrackSelected(track, true)
  26.         end

  27.         local fx_int=reaper.TrackFX_GetCount(track)

  28.         if fx_int==0 then--如果本音轨没有插件,则查找是否有发送通道,找到发送通道的插件并打开
  29.                 local send_int=reaper.GetTrackNumSends(track, 0)--从0计数

  30.                 for i=0,send_int-1 do
  31.                         local fx_trk=reaper.GetTrackSendInfo_Value(track, 0, i, "P_DESTTRACK")
  32.                         local fx_num=reaper.TrackFX_GetCount(fx_trk)
  33.                         local ins = reaper.TrackFX_GetInstrument( fx_trk )

  34.                         if ins ~= -1 then
  35.                                 reaper.TrackFX_Show(fx_trk, ins, 3)
  36.                         end
  37.                 end
  38.         elseif fx_int >= 1 then
  39.                 local ins = reaper.TrackFX_GetInstrument( track )
  40.                 if ins ~= -1 then
  41.                         reaper.TrackFX_Show(track, ins, 3)
  42.                 end
  43.         end
  44.         
  45.         reaper.MIDI_Sort(take)
  46.         local file_name=GetFileName()
  47.         reaper.Undo_EndBlock(file_name, -1)
  48. end

  49. reaper.PreventUIRefresh(1)
  50. Main()
  51. reaper.PreventUIRefresh(-1)
  52. reaper.UpdateArrange()

复制代码



您需要登录后才可以回帖 登录 | 注册

本版积分规则

搜索