Skip to content

Latest commit

 

History

History
172 lines (118 loc) · 7.08 KB

README.md

File metadata and controls

172 lines (118 loc) · 7.08 KB

Smooth Wheel Scroll for REAPER

License: MIT Platform: Windows x64

一个原生 REAPER 扩展:把普通鼠标滚轮驱动的滚动/缩放变成平滑动画,不改变滚轮原本做什么。

English

Smooth Wheel Scroll 效果演示

解决的问题

REAPER 里滚一格,视图瞬间跳一段——硬、顿、跳,看久了累眼。 这个插件把那一格摊成一段平滑动画,滚起来像触控板那样顺。

如果你在找下面这些,就是它(搜索关键词):

  • REAPER 滚轮不平滑 / 太跳 / 一顿一顿 / 卡顿
  • REAPER 平滑滚动、惯性滚动、缓动、滚轮动画
  • REAPER 滚轮缩放太猛 / 想调滚轮速度 / 想调滚动距离
  • REAPER 横向滚轮、倾斜轮、拇指轮(Logitech MX Master 侧轮等)
  • REAPER 触控板滚动不跟手 / 想排除触控板
  • REAPER 主视图缩小时滚动太慢(轨道变矮后一格走得太近)

关键词:REAPER smooth scroll、REAPER mouse wheel、REAPER tilt wheel、 REAPER horizontal scroll、REAPER inertial scrolling、REAPER zoom smoothing、 REAPER scroll animation、REAPER trackpad、reaper_smoothwheelscroll。

插件截住滚轮的一格,转成一段动画,再分小份、按时间交给同一条 REAPER 动作。 不自己移动视图、不修改 REAPER 状态:缩放锚点、滚动范围、步进大小、自定义规则全部仍由 REAPER 决定。


缓动事件支持

事件 方式
名字带 mousewheel 的动作 按动作名匹配,含自定义 / 重绑的快捷键(特殊动作除外,如翻页)
自定义动作 由上述动作组成的宏,整体缓动
水平滚轮(倾斜轮 / 拇指轮) 与竖直滚轮同等处理,两个轮子的判定互不干扰

覆盖面(这些都在缓动范围内,不用逐条设置):

  • 主视图:竖直滚动、水平滚动、竖直缩放、水平缩放(含 Ctrl / Alt + 滚轮的默认绑定)
  • MIDI 编辑器:竖直/水平滚动与缩放(含琴键上的滚轮)
  • 轨道面板(TCP)、混音台(MCP):面板滚动、两侧分割条
  • 上述位置的带修饰键滚轮、以及由它们组成的自定义动作 / 宏

原生放行事件

  • 参数类滚轮 —— 推子、旋钮、速度、发送量、力度、下拉框等原样透传。
  • 列表控件 —— 整行移动,原生已是瞬时。
  • 触控板、触摸、触控笔 —— 原样交给 REAPER。

常见问题

滚动手感能调吗? 能。面板有 4 个滑杆(动画时长、慢轮步长、加速斜坡、最高速度), 改动即时生效并自动保存。

会改变缩放锚点 / 滚动范围吗? 不会。插件只把参数交给 REAPER 原本的那条动作, 用它自己的规则执行。

能关掉吗? 能。面板里一个总开关,关掉即完全放行,滚轮回到原生行为。

无级滚轮(自由滚、MagSpeed)支持吗? 支持。插件按滚轮实际报出的量计数, 所以无级滚轮和有格滚轮在同样手速下手感一致。横向滚轮常见于这类鼠标(如 MX Master 侧轮)。

触控板会被缓动吗? 不会。触控板、触摸、触控笔一律原样交给 REAPER。

和 ReaPack 里的滚动类脚本有什么区别? 那些是动作/脚本,要手动绑或触发; 这个是扩展(DLL),装上即对整条滚轮路径生效,且不改变滚轮原本做什么。


安装

Windows x64,REAPER 7。

  1. 从 Releases 下载 reaper_smoothwheelscroll-x64.dll。
  2. 放进 UserPlugins:便携版 <REAPER>/UserPlugins/,普通安装 %APPDATA%\REAPER\UserPlugins\。
  3. 重启 REAPER。

加载后显示为 Smooth Wheel Scroll 1.7.5。

设置面板

Extensions 菜单 → SmoothScroll...;或在 Actions 窗口用 Smooth Wheel Scroll: settings... (可绑快捷键,再按一次关闭)。改动即时生效、自动保存。

  • Glide length — 一格动画的时长(100–300 ms,默认 200)
  • Slow step — 慢轮一格走多少(1–10 delta,默认 5)
  • Ramp-up — 转多少才涨满到整格(60–2000 delta,默认 1000)
  • Top speed — 最快时超过自身速度的倍数(1.0–2.0×,默认 1.5)
  • 总开关 —— 关掉即完全放行,滚轮回到原生行为

滑杆下方是运动轨迹图:每收到一个滚轮消息就有一颗球沿路径跑,直观显示当前设置的效果。

缩放与滚动距离

主视图的垂直滚动按轨道行移动,而行的像素高度随缩放变化,所以缩得越小、同样一格走得越近。 插件会按当前行高补上这段差距,使轨道缩小时的滚动距离与放大时相当(上限 7.2 倍)。 放大到一定程度后不再补偿,那一端保持原生手感。

设置面板(深色)    设置面板(浅色)

卸载

删掉 DLL,重启 REAPER。


从源码构建

C++17 编译器,对着仓库内的 REAPER SDK(third_party/)编译。参考构建使用便携版 MinGW-w64。

./build.sh        # -> build/reaper_smoothwheelscroll-x64.dll
./deploy.sh       # 可选:复制进 UserPlugins
参数 作用
(无) 含设置面板(默认)
--no-settings-ui 不编译设置面板
--debug-log 附加诊断日志(%TEMP%\SmoothWheelScroll.log)
--wheel-log DEV 版:把最近的滚轮消息记到插件同目录,用于设备排查

回归门(脱离 REAPER 运行):

./test/check_anim3.sh          ./test/check_conservation.sh   ./test/check_travel.sh
./test/check_device.sh         ./test/check_routes.sh         ./test/check_classify.sh
./test/check_filter.sh         ./test/check_wheel_log.sh      ./test/check_macro.sh

代码结构

文件 内容
src/anim3_core.h 动画模型(纯数学,不依赖 REAPER / Windows)
src/anim161_core.h 竖直缩放用的曲线模型
src/model.h 模型接缝:唯一对外的模型入口
src/routing.h 投递路由:哪条动作、什么粒度
src/device.h 设备分类(有格 / 无级 / 触控板)
src/macro.h 自定义动作成分解析
src/smooth_wheel_scroll.cpp REAPER 扩展:分类、喂入、投递、设置面板
test/ 回归门
versions/<ver>/ 各版本冻结快照
third_party/ REAPER 扩展 SDK

限制

  • 仅 Windows x64;macOS / Linux 需要各自的窗口钩子实现。
  • 无级滚轮的支持未经实机验证。
  • 设备本身已带惯性时,可能感到双重缓动。

许可证

MIT —— 见 LICENSE。third_party/ 内的 REAPER 扩展 SDK 适用其自带许可。