可以通过脚本实现,我编过一个,将它绑定在Piano Roll 的“Ctrl+左键单击”动作上,只要在MIDI编辑器里“Ctrl+左键单击”,就会打开本音轨的第一个(乐器)插件,如果本音轨没有,就向上查找发送音轨(父音轨),打开父音轨的第一个(乐器)插件。
代码如下:
- function GetFileName()
- local _,file_path=reaper.get_action_context()
- local b=0
- local s
- while true do
- b,_=string.find(file_path,"\\",b+1)
- if b==nil then break end
- s=b
- end
- local _,e=string.find(file_path,"%.")
- local file_name=string.sub(file_path,s+1,e-1)
- return file_name
- end
- function Main()
- local midieditor=reaper.MIDIEditor_GetActive()
- if midieditor==nil then return end
- local take=reaper.MIDIEditor_GetTake(midieditor)
- if take==nil then return end
- local sel_track=reaper.GetSelectedTrack(0, 0)
- local track=reaper.GetMediaItemTake_Track(take)
- reaper.Undo_BeginBlock()
- reaper.MIDI_DisableSort(take)
- if sel_track~=track then
- reaper.Main_OnCommand(40297, 0)--Track: Unselect (clear selection of) all tracks
- reaper.SetTrackSelected(track, true)
- end
- local fx_int=reaper.TrackFX_GetCount(track)
- if fx_int==0 then--如果本音轨没有插件,则查找是否有发送通道,找到发送通道的插件并打开
- local send_int=reaper.GetTrackNumSends(track, 0)--从0计数
- for i=0,send_int-1 do
- local fx_trk=reaper.GetTrackSendInfo_Value(track, 0, i, "P_DESTTRACK")
- local fx_num=reaper.TrackFX_GetCount(fx_trk)
- local ins = reaper.TrackFX_GetInstrument( fx_trk )
- if ins ~= -1 then
- reaper.TrackFX_Show(fx_trk, ins, 3)
- end
- end
- elseif fx_int >= 1 then
- local ins = reaper.TrackFX_GetInstrument( track )
- if ins ~= -1 then
- reaper.TrackFX_Show(track, ins, 3)
- end
- end
-
- reaper.MIDI_Sort(take)
- local file_name=GetFileName()
- reaper.Undo_EndBlock(file_name, -1)
- end
- reaper.PreventUIRefresh(1)
- Main()
- reaper.PreventUIRefresh(-1)
- reaper.UpdateArrange()
复制代码