在MIDI编辑器窗口打开乐器界面窗口

显示乐器界面非常实用,在MIDI编辑器窗口就可以直接打开关联的乐器界面,避免了经常要到Main窗口点开FX的尴尬,干活必备。
复制下面这段代码到记事本, 另存为: Show or Hide Instrument.lua 到REAPER脚本文件夹下面(示例的C盘请换成自己的):
C:\REAPER\Scripts

_DBG=false
function DBG(str)
  if _DBG then reaper.ShowConsoleMsg(str.."\n") end
end

-- a list of MIDI plugin manufacturers or just plugins that
-- report as VSTi but aren't instruments. Add your own here.
local blacklist = {
    "Insert Piz Here", "RapidComposer", "graywolf2004", "Kirnu"
 }


local function isFXonBlacklist(name)
  for i = 1, #blacklist do
    if name:match(blacklist[i]) then return true end
  end
  return false
end


local function getInstrumentIdx(track)
  -- iterate through FX, checking if instruments are
  -- actual instruments and not on blacklist
  local num_fx = reaper.TrackFX_GetCount(track)
  local idx = -1
  for i = num_fx,1,-1 do 
    local ok, name = reaper.TrackFX_GetFXName(track, i-1,"")
    if name:match("VSTi") == "VSTi" and not isFXonBlacklist(name) then idx = i-1 break end
  end
  
  return idx
end


local function showHideFX(track,fx_idx)
  -- showflag=0 for hidechain, =1 for show chain(index valid), =2 for hide floating window(index valid), 
  -- =3 for show floating window (index valid)
  local flag=reaper.TrackFX_GetFloatingWindow(track, fx_idx)==nil and 3 or 2
  reaper.TrackFX_Show(track,fx_idx,flag)
end


local function checkReceives(track)
  local num_receives=reaper.GetTrackNumSends(track,-1)
  if num_receives > 0 then
    local ot=reaper.BR_GetMediaTrackSendInfo_Track(track, -1 , 0, 0)
    showHideFX(ot,getInstrumentIdx(ot))
    return true
  end
  return false            
end


function openInstrument()
  local sts=reaper.CountSelectedTracks(0)
  if sts==1 then
    local tr=reaper.GetSelectedTrack(0,0)
    if tr~=nil then      
      local fx=getInstrumentIdx(tr)
      if fx>-1 then
        showHideFX(tr,fx)
        return
      else
        if reaper.GetTrackNumSends(tr,0)>0 then
          local ok, str=reaper.GetTrackSendName(tr, 0, "")
          -- 0s = idx, idx, tracktype
          local st=reaper.BR_GetMediaTrackSendInfo_Track(tr,0 , 0, 1)
          local bus=reaper.BR_GetSetTrackSendInfo(tr, 0, 0, "I_MIDI_DSTBUS", false, 0)
          if bus==-1 then --check if it's an output track
            checkReceives(tr)
          end
          local fx=getInstrumentIdx(st)
          showHideFX(st,fx)
          return
        else
          checkReceives(tr)
        end
      end
    end
  end
end

openInstrument()

动作列表section部分选择MIDI Editor,在ReaScript位置导入这个脚本

!

设定一个快捷键,比如: F9,便可随时显示或隐藏乐器界面。


在MIDI编辑器的工具栏做一个按钮,方便随时切换显示乐器界面:

在工具栏上右键,选择Customize toolbar
!

在左下角添加动作,找到Show or Hide Instrument.lua
!

点击 Text icon 设定文本图标(要用图片就选择Change icon)
!

完成!
!1547906263293-598352ec-f098-4b9b-b5e0-f688911db0d8-image.png

以上,已发布到:
https://www.soundengine.cn/topic/32/定制cubase习惯的reaper发布贴

@怪力乱神 在 在MIDI编辑器窗口打开乐器界面窗口 中说:

@futurewy 没有研究过这个地方,要实现应该可以。
轨道上的路由按钮可以设置快捷键,弹窗显示也很方便查看通道。除了一键创建16轨,也可以自己建立轨道设置路由。

我感觉在轨道上显示通道号不容易吧,毕竟要对ui进行修改了。

@futurewy 没有研究过这个地方,要实现应该可以。
轨道上的路由按钮可以设置快捷键,弹窗显示也很方便查看通道。除了一键创建16轨,也可以自己建立轨道设置路由。

另外,有没有办法在轨道上就直接能选择发送的通道呢?不想一次性创建16个通道,也觉得点进轨道路由设置再设置通道号很繁琐,所以现在基本上已经把所有的多通道音源到单通道音源用了。而且轨道上不能显示通道号,都不知道用到第几个通道了,每次要增加一轨还要打开音源先看看,好麻烦。

不知道在轨道上快捷的显示并设置通道号是否可以实现呢?

@怪力乱神 话说今天搜索来到了这里,真是好地方啊!辛苦你整理这些资料了!

@怪力乱神 我错了错了!之前没有好好看回帖,现在看了才发现全局命令只能打开单通道的。多通道那种不行。

@futurewy 多谢,你说得是哪个全局命令?

@怪力乱神 我瓜了!我错了!

@ZMS在MIDI编辑器窗口打开乐器界面窗口 中说:

感谢版主。不过有个小问题不知道能否解决,就是钢琴卷帘全屏时,点击编辑时乐器窗还是会隐藏

!

右上角的置顶按钮点下去

感谢版主。不过有个小问题不知道能否解决,就是钢琴卷帘全屏时,点击编辑时乐器窗还是会隐藏

这太赞了,解决了大麻烦!

@リーパー 龙舌兰(大神BB)

@aadsache在MIDI编辑器窗口打开乐器界面窗口 中说:

也可以直接pass through出去调用main的track fx面板(小声bb):ear:

我刚开始也是这么做的,不过马上发现一个问题,FX面板只能在当前轨道才能调出来。如果一个音源的16个通道都用上的话,那么16个通道的FX面板是空的,按这种方式就失效了。而上面的脚本可以调出当前轨道对应的音源,只要你的通道跟音源连上,一定会被调出来。

也可以直接pass through出去调用main的track fx面板(小声bb):ear: