


好久不见啦。之前有些忙碌,几乎一整个学期没碰 REAPER 和 Ae,自然手生;跟风用了《章鱼噼的原罪》的打击素材,水了 Beatboxer VS Trackmaker 的一小部分,就当是复健吧。

出现在视频第六秒和第十一秒的一小段bass
图中的这一小段旋律的音高是由高速重复打击音效得来的(可称“人工振荡器”)。当时我的做法是查阅 音高-音名-频率-周期速查表(例如,B1 对应的频率约为 61.735Hz,周期约为 16.198ms),然后在音频对象的属性里手动修改其时长,然后不断复制粘贴以得到对应音高的“振荡”。

媒体对象的属性窗口;以听感为准,最终将音高降了两个八度(B3 -> B1)
这种做法显然过于繁琐,而且精度也不高:以“时间”为单位时,可见输入的最小时间单位仅为 1ms(虽然也有以帧/采样为最小时间单位的选项,但是换算过程实在复杂);如果涉及弯音等事件,比如 death by amen 里的 Satisfaction 段,几乎就无从下手……
于是突然心血来潮,写了一个脚本……
midi_osc.lua 是一个简易的 REAPER 脚本,它能根据 MIDI 对象产生类似振荡器的脉冲序列,支持两种输出格式:MIDI 格式或空对象格式。
两种输出模式:可选择 MIDI 或空对象(Empty Item)格式
音高调整:支持八度音程偏移
支持弯音(Pitch Bend)事件:可调整弯音范围
简单的 GUI 界面
REAPER 6.0 或更高版本
已安装 ReaImGui
包含内容:
midi_osc.lua
death by amen 的 REAPER 工程实例.zip
如果你对 REAPER 的脚本功能尚不熟悉,强烈建议先查看 REAPER 中文分享社区的这些文章并安装相关组件,同时也建议使用该社区提供的国内 ReaPack 镜像源:
将 midi_osc.lua 脚本文件复制到REAPER的脚本目录:Windows: C:\Users\[用户名]\AppData\Roaming\REAPER\ScriptsmacOS: ~/.config/REAPER/ScriptsLinux: ~/.config/REAPER/Scripts
在 REAPER 中,打开"Actions"菜单,选择"Show action list..."
点击"New action..."按钮,选择"Load ReaScript..."
找到并选择 Script: midi_osc.lua
(建议)为 midi_osc.lua 分配一个快捷键或工具栏按钮(推荐)以便快速访问

打开"Actions"菜单,选择"Show action list..."

点击"New action..."按钮,选择"Load ReaScript...",找到并选择 midi_osc.lua 脚本

为脚本分配一个快捷键

为脚本设置一个工具栏按钮(推荐)

更多自定义选项,等你探索……
PPQ(Pulses Per Quarter note),即每四分音符脉冲数,又称TPQN(Ticks Per Quarter Note)。PPQ 的数值表示每个四分音符被分成多少个时间单位(ticks),它决定了 MIDI 事件时序的分辨率(如音符、弯音的精确位置)和 MIDI 文件的内部时间坐标系。
同一 BPM 情况下,一个 MIDI 对象的 PPQ 越高,这个 MIDI 对象在单位时间内能够承载的事件越多,自然,其振荡音高的精度就越高。

两个 PPQ 设置:a.事件 PPQ,b.CC 连段插值 PPQ;前者更重要
a.对于新生成的 MIDI 对象,REAPER 的 PPQ 默认为 960。在 120 BPM 情况下,这是部分 PPQ 值所对应的最高频率,请根据实际效果调高该值以提高精度。推荐用 3840 或 7680。

我在还原 death by amen 时,使用了 7680 PPQ
对于已有的 MIDI 对象,你可以通过查看其属性来获取其 PPQ 信息:

最右侧窗口的 Ticks Per Quarter Note 就是 PPQ
不过,已有 MIDI 对象的 PPQ 似乎是不可更改的。简单粗暴的一种做法是,直接胶合(glue)这个 MIDI 对象,使得 glued MIDI 对象的 PPQ 与设置一致。
b.新生成 MIDI 对象的 CC 连段插值 (Default shape for CC segments)。这是指 REAPER 在 MIDI 事件中插入的私有数据,最典型的就是 LFO、曲线形状、速率、深度这些参数。这种插值被储存在“REAPER Data”之中。
以下是“钢琴卷帘”视图和“事件列表”视图中的弯音信息:

“钢琴卷帘”视图的下方CC Lane,带有特殊插值的弯音看起来很“平滑”

“事件属性”视图,我们可以看见 REAPER 有 6 种 CC Shape
其中“矩形”与标准 MIDI 文件一致,不含私有信息(即 REAPER Data),而其他的选项都是 REAPER 私有的插值模式。如果将该 MIDI 对象导出为标准 MIDI 文件,REAPER 会把这段 REAPER Data 剥离掉,只留下展开后的 Pitch Bend 序列,确保兼容性,如下图:

使用 Ctrl+Alt 拖拽得到的MIDI 对象,原本平滑的弯音被展开成了矩形
可见,展开后弯音事件的最小时间单位成了 1/128 网格,与 CC 连段插值默认设置的 32 PPQ 分辨率一致;该数值越高,展开得到的弯音事件精度越高。
由于 midi_osc 只支持矩形 CC Shape,所以在使用该脚本处理含有上述私有插值模式的 MIDI 对象之前,请先用 Ctrl+Alt+拖拽(不是胶合!)渲染为只含矩形 CC 的标准 MIDI 事件。
注意:过高的 PPQ 会增加文件体积和计算复杂度,实际场景中需权衡精度与效率。
如果你没有安装 ReaImGui,启动脚本只会弹出这样的窗口,将你引导至 REAPER 中文分享社区里的安装教程(见上文“最常见的 REAPER 脚本运行出错解决方法”)。

若点击"是",浏览器会打开相应的网址
如果你正确地安装了 ReaImGui,midi_osc 将会正常显示窗口:

简单的GUI界面
窗口操作:左上角按钮可折叠窗口,右上角按钮可关闭窗口
Mode: 选择“MIDI”或“空对象”输出格式
Transpose: 使用滑块设置八度偏移(默认值 0,默认范围 -6 ~ +4)
Pitch Bend Range: 使用滑块设置弯音影响的范围大小(默认值 2,默认范围 1 ~ 24)
直接输入数值:Ctrl/Command + 左键点击滑块,可以直接输入超出默认范围的整数值;Pitch Bend Range 小于 0 意味着弯音的变化方向与原本相反
Generate: 点击按钮,生成振荡
警告信息:音高越高,脚本产生单位时间内的 MIDI Note(或空对象)越多,故极高的音高有可能会造成各类性能问题与异常。当滑块设置的数值有可能使音高超过安全范围时,Generate 按钮下方会立即显示警告:"Please avoid frequencies above C8",仅提醒用户检查自己的设置,不会影响生成过程
首先在 REAPER 选中一个或多个 MIDI 对象,再设置好脚本,最后点击 Generate 按钮即可。
MIDI 模式下,生成的结果会出现在与原对象所在轨道并列的轨道。
空对象模式下,生成的结果会出现在原对象所在轨道的子轨道(与 midi2item 相类似)。

轨道2 - MIDI 模式;轨道4 - 空对象模式
利用空对象的方法也与 midi2item 一致,详见视频 网页链接

注意:涉及的音高越高,生成的速度越慢,期间甚至可能出现“程序未响应”,系正常现象。
附件:

MIDI 模式下,新对象的命名规则

操作记录中显示的内容,命名方式与上一图相似
REAPER API functions - https://www.reaper.fm/sdk/reascript/reascripthelp.html
REAPER User Guide - https://www.reaper.fm/userguide.php
REAPER中文分享社区 - https://club.reaget.com/

↑ 这就是那个工程实例的演示视频
建议学习 MIDI 编辑器相关快捷键以加速制作过程,如 Ctrl + F2,Ctrl + ↑/↓ 等……
这真的不是 Speedcore 用脚本吗。。。
@zzzzzz9125 废话少说 上号!
