Navigation

    • Register
    • Login
    • Categories
    • Recent
    • Tags
    • Popular
    • Groups
    1. Home
    2. 再補一刀
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    再補一刀

    @再補一刀

    0
    Reputation
    26
    Posts
    316
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    再補一刀 Follow

    Best posts made by 再補一刀

    This user hasn't posted anything yet.

    Latest posts made by 再補一刀

    • 技法映射插件使用【视频附】

      AM.png

      视频链接:
      https://www.bilibili.com/video/BV1kX4y157oV

      视频介绍了技法映射三种模式的使用,并且提供了实际工作中的应用参考。

      技法映射全套5个脚本,它们是:

      技法映射.jsfx -- 技法映射JS插件【FX插件】
      再補一刀_技法映射 - PC轉音符.lua
      再補一刀_技法映射 - 音符轉PC.lua
      再補一刀_技法映射 - 插入音色.lua
      再補一刀_技法映射 - 設置樂器組.lua

      添加我的ReaPack仓库下载最新版:
      https://github.com/zaibuyidao/ReaScripts/raw/master/index.xml


      除了将技法按键搬到PC车道的方法以外,关于插入音色的使用也可以参考以下动图:

      替代文字
      第一种写Program Change的方式【官方提供的插入音色动作】:
      首先你需要将车道设置为Program Change。然后使用官方提供的动作:Insert bank/program select event...
      可以设置快捷键或者双击车道来启用。选择音色后点击确定,PC信息已插入。

      替代文字
      第二种写Program Change的方式【输入音名】:
      再補一刀_技法映射 - 插入音色.lua
      对着插件提供的切换键位音符名写,比如CCS界面的C-1, C#-1, D#-1
      未选中音符时,在光标位置插入。选中音符时,在音符的起始位置插入。

      替代文字
      第三种写Program Change的方式【输入数字】:
      再補一刀_技法映射 - 插入音色.lua
      可以直接输入切换键位的数字,比如C-1对应12键位,那么你输入12,就相当于写入了C-1的音符。

      替代文字
      这是批量插入PC消息的演示,效率可以很快。

      posted in Cockos Reaper
      再補一刀
      再補一刀
    • GUI脚本 - 随机力度值和随机CC值

      Rondom Velocity - GUI.gif
      随机力度(选择范围)

      Rondom CC Value - GUI.gif
      随机CC值(选择范围)

      未选中CC事件时,可以过滤CC控制器;选中CC事件时,仅对选中的事件进行处理。

      需要加载Lokasenna_GUI库:
      请安装ReaPack上可用的“Lokasenna's GUI library v2 for Lua”,然后在操作列表中运行“Set Lokasenna_GUI v2 library path.lua”脚本。

      脚本下载:
      Random Velocity - GUI.lua
      Random CC Value - GUI.lua

      posted in Cockos Reaper
      再補一刀
      再補一刀
    • RE: LUA脚本 - MIDI功能若干

      transform CC.gif

      Script: zaibuyidao_Transform CC (For Selected CC).lua
      Script: zaibuyidao_Transform CC.lua

      转换CC,例如将CC#1转为CC#11。

      两个脚本,一个需要选中CC,另一个不需要选中(当前轨道全局操作)

      posted in Cockos Reaper
      再補一刀
      再補一刀
    • 为选定的VSTi轨道建立MIDI路由通道

      build midi routing.gif
      为选定的VSTi轨道建立MIDI路由通道,可以自定义轨道数量以及通道顺序。
      支持多轨同时添加操作,非VSTi插件轨道如果选中的话会跳过。
      该脚本可以方便地对一个VSTi轨道建立多通道的操作,比官方提供的操作会灵活一些。

      请注意,只有VSTi轨道有效。

      脚本: zaibuyidao_Build MIDI Routing Channel To Selected Tracks.lua

      set midi routing.gif
      为选定的轨道设置MIDI通道,快速设置通道(动态菜单,在鼠标位置出现)。
      只对非VSTi轨道有效。

      脚本: zaibuyidao_Set MIDI Routing Channel (Dynamic Menu).lua

      可以在ReaPack更新:

      https://github.com/zaibuyidao/ReaScripts/raw/master/index.xml

      posted in Cockos Reaper
      再補一刀
      再補一刀
    • 对选定的所有对象重新定位

      【重新定位对象】将所有选定的对象按照先后顺序重新定位。支持对话框输入X秒,按照需要设定每个item之间的距离。
      第一个选项:时间间隔,单位秒;
      第二个选项:从对象的开始位置定位(填0),或对象的结束位置定位(填1)。

      相似功能: Xenakios/SWS: Reposition selected items...,不过两者功能上有所区别,SWS版本是每个轨道的item单独定位,我的脚本是所有选中的item(不区分轨道)一起定位。

      repos item.gif

      食用方法:

      把以下代码另存为 .lua 文件放到 C:\REAPER\Scripts 脚本文件中,在动作列表里面载入就可以用了。
      或从ReaPack下载(新版本暂未上传)。

      重新定位选中的对象:

      --zaibuyidao_Reposition Items.lua
      count_sel_items = reaper.CountSelectedMediaItems(0)
      
      if count_sel_items > 0 then
          reaper.PreventUIRefresh(1)
          reaper.Undo_BeginBlock() -- 撤消塊開始
      
          local interval = reaper.GetExtState("RepositionItems", "Interval")
          local toggle = reaper.GetExtState("RepositionItems", "Toggle")
          if (interval == "") then interval = "1" end
          if (toggle == "") then toggle = "1" end
      
          local user_ok, user_input_csv = reaper.GetUserInputs("重新定位對象", 2, "時間間隔(秒),0=對象開始 1=對象結束", interval ..','.. toggle)
          if not user_ok or not tonumber(interval) then return end
          interval, toggle = user_input_csv:match("(.*),(.*)")
          if not tonumber(interval) or not tonumber(toggle) then return end
      
          reaper.SetExtState("RepositionItems", "Interval", interval, false)
          reaper.SetExtState("RepositionItems", "Toggle", toggle, false)
      
          local item_list = {} -- 收集所有選定item
      
          for i = 0, count_sel_items - 1 do
              item = reaper.GetSelectedMediaItem(0, i)
              table.insert(item_list, item)
          end
      
          for k, item in ipairs(item_list) do
              item_next_start = reaper.GetMediaItemInfo_Value(item_list[k], "D_POSITION")
              item_next_end = reaper.GetMediaItemInfo_Value(item_list[k], "D_LENGTH") + item_next_start
              
              if k < count_sel_items then
                  if toggle == "1" then
                      reaper.SetMediaItemInfo_Value(item_list[k + 1], "D_POSITION", item_next_end + interval)
                  elseif toggle == "0" then
                      reaper.SetMediaItemInfo_Value(item_list[k + 1], "D_POSITION", item_next_start + interval)
                  end
              end
          end
      
          reaper.Undo_EndBlock("重新定位對象", -1) -- 撤消塊結束
          reaper.UpdateArrange()
          reaper.PreventUIRefresh(-1)
      end
      

      另外一个脚本,将所有选中的item移动到第一个选中的item所在的轨道:

      --zaibuyidao_Move Items To Track Of First Selected Item.lua
      count_sel_items = reaper.CountSelectedMediaItems(0)
      
      if count_sel_items > 0 then
          reaper.PreventUIRefresh(1)
          reaper.Undo_BeginBlock() -- 撤消塊開始
          for i = 0, count_sel_items - 1 do
              item = reaper.GetSelectedMediaItem(0, i)
              if i == 0 then 
                track = reaper.GetMediaItem_Track(item)
              end
              reaper.MoveMediaItemToTrack(item, track)
          end
          reaper.Undo_EndBlock("Move Items To Track Of First Selected Item", -1) -- 撤消塊結束
          reaper.UpdateArrange()
          reaper.PreventUIRefresh(-1)
      end
      
      posted in Cockos Reaper
      再補一刀
      再補一刀
    • RE: 【JSFX插件】通过CC路由MIDI通道(切换MIDI通道)

      MIDI路由PC到通道
      MIDI Route PC To Channel.txt

      也可以通过PC参数来切换通道,打开PC车道画参数,数值1对应通道1,数值2对应通道2,以此类推。

      ReaPack已更新!

      posted in Cockos Reaper
      再補一刀
      再補一刀
    • 【JSFX插件】通过CC路由MIDI通道(切换MIDI通道)

      MIDI路由CC到通道
      MIDI Route CC To Channel.txt

      当一个音源使用多个通道时,比如:
      CH1-钢琴
      CH2-吉他
      CH3-BASS
      在同一轨内利用CC控制器直接路由MIDI通道,以达到CC值1对应通道1,CC值2对应通道2的目的。

      安装使用:
      1、将JS插件放到C:\REAPER\Effects内,重启REAPER。
      2、新建轨道点【FX】按钮添加该插件。

      默认使用未定义的CC编号118,在车道选择CC118画数据:
      值1对应通道1,值2对应通道2,值16对应通道16;
      值17对应通道1,值18对应通道2,值19对应通道3依此规则反复;
      CC值最多到127。

      CC编号可以在插件界面改为其他编号,只要不跟你使用的编号冲突就可以。但建议如果不存在冲突默认使用CC118.

      posted in Cockos Reaper
      再補一刀
      再補一刀
    • 将LUA脚本的“reaper.”屏蔽

      关键代码:for key in pairs(reaper) do _G[key]=reaper[key] end 可屏蔽掉 "reaper."

      举个栗子:
      加入上面的代码后 MIDI_CountEvts(take) 将等同于 reaper.MIDI_CountEvts(take)

      参考脚本【将选中的音符尾巴对齐到光标】:

      for key in pairs(reaper) do _G[key]=reaper[key] end
      
      function EndTime()
          local curpos = MIDI_GetPPQPosFromProjTime(take, GetCursorPositionEx(0))
          local _, notecnt, _, _ = MIDI_CountEvts(take)
          local fng_take = FNG_AllocMidiTake(take)
          for i = 1, notecnt do
              local cur_note = FNG_GetMidiNote(fng_take, i - 1)
              local selected = FNG_GetMidiNoteIntProperty(cur_note, "SELECTED") -- 是否有音符被选中
              -- local muted = reaper.FNG_GetMidiNoteIntProperty(cur_note, "MUTED") -- 静音
              -- local ppqpos = reaper.FNG_GetMidiNoteIntProperty(cur_note, "POSITION") -- 起始位置
              -- local chan = reaper.FNG_GetMidiNoteIntProperty(cur_note, "CHANNEL") -- 通道
              -- local pitch = reaper.FNG_GetMidiNoteIntProperty(cur_note, "PITCH") -- 音高
              -- local vel = reaper.FNG_GetMidiNoteIntProperty(cur_note, "VELOCITY") -- 力度
      
              if selected == 1 then
                  local noteppq = FNG_GetMidiNoteIntProperty(cur_note, "POSITION") -- 音符起始位置
                  local lenppq = FNG_GetMidiNoteIntProperty(cur_note, "LENGTH") -- 音符长度
                  local endpos = curpos - noteppq
                  if noteppq < curpos then
                      FNG_SetMidiNoteIntProperty(cur_note, "LENGTH", endpos) -- 将音符结束位置应用到光标位置
                  end
              end
          end
          FNG_FreeMidiTake(fng_take)
      end
      
      function Main()
          Undo_BeginBlock()
          take = MIDIEditor_GetTake(MIDIEditor_GetActive())
          if take == nil then return end
          EndTime()
          UpdateArrange()
          Undo_EndBlock("End Time FNG", -1)
      end
      
      Main()
      
      posted in Cockos Reaper
      再補一刀
      再補一刀
    • JSFX插件 - 简单表情映射

      大家好。最近撸了个小插件,可以实现简单的表情映射功能。大部分音源使用键位切换,例如:C1 =延音,C#1 =断音,你可以使用JSFX插件 -- 简易表情映射 来将程序更改(Program Change)消息转换为C1和C#1。

      工作原理
      这个插件只是简单地将Program Change消息转为音源对应的键位切换的音符。我将128个按键都做了映射,全部填满大概是这样的:

      Program Change 0=C-2(0)
      Program Change 1=C#-2(1)
      Program Change 2=D-2(2)
      ...中间省略...
      Program Change 125=F8(125)
      Program Change 126=F#8(126)
      Program Change 127=G8(127)

      所有按键都匹配了程序更改(Program Change)消息。大家应该有发现规律,PC0=Note 0, PC1=Note1,如果播放经过PC100,那么它就会被转为键位100的音符。相当于你在MIDI键盘上按了一下这个键位100的音符。

      如何工作:
      预先在MIDI编辑器中插入Program Change 12和Program Change 13。播放时,JSFX会将PC12和PC13转换为音符C1(12)和C#1(13),音色已切换。这其实跟键位切换是一摸一样的,只是信息被放到了CC车道上。

      我们平时的键位切换都在按键里面,容易影响到正常演奏的音符的编辑。使用程序更改,将按键切换音符搬到车道,卷帘窗就干净了很多。

      而且,它有双重保险,即使哪天不想用了也不会影响你的音乐。你可以随时将程序消息切换回键位切换音符。或者将键位音符切回PC。因为,他们之间的信息是一致的,实现互切完全没毛病。

      功能讲解
      JSFX Program To Note-1.gif
      第一种写Program Change的方式【官方提供的插入音色动作】:
      首先你需要将车道设置为Program Change。然后使用官方提供的动作:Insert bank/program select event...
      可以设置快捷键或者双击车道来启用。选择音色后点击确定,PC信息已插入。

      JSFX Program To Note-2.gif
      第二种写Program Change的方式【输入音名】:
      使用脚本:Script: zaibuyidao_Bank Program Select.lua
      对着插件提供的切换键位音符名写,比如CCS界面的C-1, C#-1, D#-1
      未选中音符时,在光标位置插入。选中音符时,在音符的起始位置插入。

      JSFX Program To Note-3.gif
      第三种写Program Change的方式【输入数字】:
      依然使用脚本:Script: zaibuyidao_Bank Program Select.lua
      可以直接输入切换键位的数字,比如C-1对应12键位,那么你输入12,就相当于写入了C-1的音符。

      3种输入方案,结果一致,看需要使用。

      JSFX Program To Note-5.gif
      这是批量插入PC消息的演示,效率可以很快。完了之后记得删除下重叠或者冗余。

      LUA Program To Note & Note To Program.gif
      PC和keySwitch按键互切演示,无痛对切。
      如果除掉JS插件,使用这个脚本随时可以把键位从CC车道切回到钢琴卷帘窗内。

      SEM Delay.gif
      现在可以看到keyswitch的动态,最多可以支持1000ms.

      SEM 1.5.gif
      继续追加键位切换的连奏功能,按住直到下一个音符的起始位置抬起;
      同时保留转换后力度的数据,也就是说如果一个键位切换键分力度层来切音色也是可行的。

      比如,AME-C0 键位的技巧官方定义:
      键位切换键为 C0,音符力度1-21 触发Full Mute, 22-42 触发 3/4 Mute, 43-63 触发Half Mute, 64-126 触发 Sustain,力度为 127 时触发重勾或搓泛音技巧。

      我们可以为C0单独定义5个力度层的音色(只要是AME技法指定的力度都可以):

      Bank 0 1 AME-1
      24 键位切换键C0,以1的力度触发Full Mute

      Bank 0 22 AME-22
      24 键位切换键C0,以22的力度触发 3/4 Mute

      Bank 0 43 AME-43
      24 键位切换键C0,以43的力度触发Half Mute

      Bank 0 64 AME-64
      24 键位切换键C0,以64的力度触发 Sustain

      Bank 0 127 AME-127
      24 键位切换键C0,以127的力度触发重勾或搓泛音技巧

      使用脚本:
      Script: zaibuyidao_Program Change To Note (For JSFX-Simple Expression Map).lua(PC转音符)
      Script: zaibuyidao_Note To Program Change (For JSFX-Simple Expression Map).lua(音符转PC)

      音色表
      BANK我使用了3套,第2和第3套是用于按键开关的。音源的触发开关默认使用了力度1的音符为关闭,力度127为开启。
      因此,第二套BANK使用1库,第三套BANK使用了127库.
      第一套默认0库。

      音色表制作很容易,你只要管3个库就行。大部分都会在0库,有开关的按键才用1库和127库。
      我用来测试的CSS音源,整理了一下大概是这些内容:

      Bank 0 0 Cinematic Studio Strings
      12 12 Sustain
      13 13 Tremolo
      14 14 MeasuredTrem
      15 15 Trills
      16 16 Harmonic
      17 17 Staccato
      18 18 Marcato
      19 19 Pizzicato
      
      Bank 0 1 Cinematic Studio Strings -off
      22 22 legato-off
      23 23 Con sordino-off
      
      Bank 0 127 Cinematic Studio Strings -on
      22 22 A#1 legato-on
      23 23 B1 Con sordino-on
      

      复制起来,另存为 .reabank 文件,放到REAPER的Data目录下就可以加载了。

      音色定义
      看一下音色表,很容易理解。注意看 Bank 0 0、0 1、0 127 的信息,这是库的定义,数字后面是库的名称。
      在这里我们只要管第一个0后面的数字。默认为0库,如果有开关切换的,关闭(off)放在1库,开启(on)放在127库。

      往下是音色列表。每一行的第一个数字是键位。比如:C-2是0键,C-1是12键。键位之后的部分就是音色名称。

      结构很简单。当然,音色表不是必须的,没有音色表这个JS插件也能用。

      下载
      JSFX-简易表情映射插件:Simple Expression Map

      PC和键位音符互换脚本:
      Script: zaibuyidao_Program Change To Note (For JSFX-Simple Expression Map).lua(PC转音符)
      Script: zaibuyidao_Note To Program Change (For JSFX-Simple Expression Map).lua(音符转PC)

      插入音色脚本(非必须,可提高输入速度):
      Script: zaibuyidao_Bank Program Select.lua

      Simple Expression Map 1.6.txt

      统一下载位置:
      添加我的 Reapack 仓库:
      https://github.com/zaibuyidao/ReaScripts/raw/master/index.xml

      然后,搜索下载。

      --

      2020-8-18 脚本更新:

      Note To Program Change (For JSFX-Simple Expression Map).lua
      Program Change To Note (For JSFX-Simple Expression Map).lua
      Set Instrument Group (For JSFX-Simple Expression Map).lua

      pc to note.gif
      切换乐器组第8组的信息

      更新: Bank/Program Select 如何应用在 Simple Expression Map 中

      音色表标准格式:

      Bank <MSB> <LSB> <Bank name>
      <program #> <articulation name>

      使用 Simple Expression Map 将 PC 转为 Note 信息:

      Bank <Note-Off Velocity> <Note-On Velocity> <Bank name>
      <Pitch #> <articulation name>

      Bank <Note Off Velocity> -- 将MSB值转换为 音符_关 的力度值用来存储乐器组,比如Bank 0,Bank 1,Bank 2 分别对应乐器组 0,乐器组 1,乐器组 2,最多可容纳128套乐器;

      Bank <Note On Velocity> -- 将LSB值转换为 音符_开 的力度值
      用来指定键位切换键的力度值,某些音源在不同的力度下可以触发不同的技法(注意:填0默认映射力度96);

      <Pitch #> -- 将PC值转换为键位切换键的音高
      定义键位切换键的音高,比如C-2=Pitch 0,C-1=Pitch 12,C0=Pitch 24。

      以上是转换原理,挂上插件侯它会自动执行了这些操作,我们无需理会。

      实际使用中,写入 Bank/Program Select 时只要考虑三个要素(乐器组、力度、音高):

      Bank <乐器组> <力度> <Bank名称>
      <音高 #> <技法名称>

      例如:

      Bank <1> <0> <CSS> -- Bank <1>=乐器分组 1;<0>=填0默认作为单一技法乐器(此处0将被转为力度96);<CSS>=库名称CSS
      <24> <连奏> -- 键位 24,以力度96触发连奏(实际上单一技法乐器1-127的范围都可以触发连奏,所以只取96的力度作为默认触发值)
      <25> <断奏> -- 键位 25,以力度96触发断奏(实际上单一技法乐器1-127的范围都可以触发断奏,所以只取96的力度作为默认触发值)

      Bank <7> <127> <AME> -- Bank <7>=乐器分组 7;Bank <127>=以127的力度触发技法;Bank <AME>=库名称AME
      <24> <重勾泛音> -- 键位 24,以127的力度触发重勾或搓泛音技巧

      建议一样乐器分一个组,不然使用两套以上乐器在一个组内显示乐器名肯定会冲突。
      如果一样乐器做一份.reabank文件也是可行的,但是一份 .reabank 能装下128套乐器,显然可以节省空间。

      乐器组编号需要更改怎么办:

      比如Bank <1>要改为Bank <2>,只需要运行脚本:Set instrument group (For JSFX-Simple Expression Map).lua,输入对应的乐器组编号就可以了。

      change msb.gif
      将乐器组由第8组改为1组,由1组改为2组。

      --

      https://www.bilibili.com/video/BV19K4y1Y71z

      做了一段表情映射的演示,使用 NI DISCOVERY SERIES: MIDDLE EAST 的 Saz(萨斯),模式选择:连奏。

      Saz技法(三套通用):

      Bank 0 0 Middle East Melodic Saz
      36 36-Short Range
      37 37-Damp Range
      38 38Trem Short range
      39 39-Add Vib Range
      40 40-Trill Range
      41 41-Slide Up Range
      42 42-Root Range
      43 43-Slide Dn Range
      44 44-5th Range
      45 45-Mordent Dn Range
      46 46-8ve Range
      47 47-Mordent Up Range

      posted in Cockos Reaper
      再補一刀
      再補一刀
    • RE: LUA脚本 - MIDI功能若干

      5-16 新增脚本

      zaibuyidao_Random Mute Notes.lua -- 随机静音音符
      Random Mute Notes.gif

      zaibuyidao_Random Notes Start.lua -- 随机音符起始位置,相当于人性化音符。比如输入3,脚本将对起始位置随机加±3的值,可应用于钢琴等乐器。
      zaibuyidao_Random Notes End.lua -- 随机音符结尾位置
      Random Notes Start.gif

      zaibuyidao_Random Notes End (Customize).lua -- 随机音符结尾位置(支持用户自定义)
      zaibuyidao_Random Notes Start (Customize).lua -- 随机音符起始位置(支持用户自定义)
      Random Notes End (Customize).gif

      zaibuyidao_Random Region Color.lua -- 随机区域颜色
      Random Region Color.gif

      zaibuyidao_Random Marker Color.lua -- 随机标记颜色
      Random Marker Color.gif

      zaibuyidao_Random Region And Marker Color.lua -- 同时随机区域和标记的颜色,只有区域(标记)时随机区域(标记)
      Random Region And Marker Color.gif

      zaibuyidao_Add MIDI Hardware Output And Receives To Selected Tracks.lua -- 选中的轨道添加 MIDI PORT 并且添加指定发送轨。

      MIDI硬件输出:就是Cakealk 的 Port,就是 Cakewalk 的 Port,对应首选项里的MIDI Device - MIDI outputs 的 Device ID
      MIDI通道序数:就是MIDI通道,比如选中10轨输入的是1,将按从1-10的顺序添加通道。支持选中单轨操作。
      接收轨道编号:就是接收源通道,参考轨(默认接收完加上来了静音)

      最底下4个选项分别是:
      0=默认操作,添加PORT+MIDI通道+接收轨道编号;1=只添加MIDI通道 2=只添加轨道编号 3=选中所有轨道,清除所有设置内容恢复轨道默认状态。
      Add MIDI Hardware Output And Receives To Selected Tracks.gif

      zaibuyidao_Set Project Grid.lua -- 输入tick值以设置工程网格。方便按照指定tick间隔来移动数据,官方最小的网格选项只能达到128分音符,习惯于tick表示不够用。现在算是补充上了!
      Set Project Grid.gif

      posted in Cockos Reaper
      再補一刀
      再補一刀