英文题目:Traktor Kontrol S4 Mk3 Is Not a Turntable No Matter How Bad I Want it To Be: But That’s OK Because I Accept It For Who It Is.

会议身份:conference:nime:2026:conference-paper-id:nime2026_123

✅ 来源为官方会议 PDF;表格与 Figure 按原文证据绑定。PDF 公式以原页区域图片展示,未冒称作者原始 TeX。

会议来源:官方记录 · 官方 PDF

标签:#开源工具 #信号处理 #音乐 #音频交互

评分:5.9/10 | 创新 1.2/2 | 技术严谨 0.8/1.5 | 实验充分 0.5/1.5 | 清晰度 0.7/1 | 影响力 0.6/1.5 | 开源 1.0/1.5 | 可复现 0.1/0.5 | 工程/实践 1.0/1.5

排名:前50% | 文档类型:系统技术报告

👥 作者与机构

  • Joseph Thibodeau:机构信息未能从会议 PDF 纯文本可靠映射

📌 核心摘要

本文任务是以开放DJ软件Mixxx驱动S4 Mk3力反馈转轮,输入为转轮双轨编码器位置与触摸位及目标转速,输出为电机扭矩与播放速率,难点在于私有HID协议未知、粘滑摩擦耦合难建模且须满足500Hz双向实时闭环。方法第一步用Wireshark配合usbpcap与usbmon复现并验证私有协议,解析出双路位置流与触摸语义,其输出的位置与速度信号进入第二步。第二步建立粘滞与滑动两态转盘与垫片物理模型,以速度误差驱动静摩擦保持同步、以动摩擦描述打滑后回同步过程,为控制提供目标扭矩依据。第三步将模型转化为带FIR滤波与平滑的实时控制器并耦合至Mixxx播放与点动逻辑,把速度误差与电机输出误差双向映射为搓盘与边圈微调,解决直接映射播放抖动问题。与已有只做按键转发的映射不同,该工作保留仿真手感同时兼容数字演出惯例,复现了官方控制器对触摸扰动的滤波处理思路。在编码器轮盘解析测试任务下,外圈轨道的窗口数指标为360个,高于内圈轨道的窗口数指标10个。其结论适用边界受限于该型号控制器与特定试验分支实现,在提示点急停回弹与反转标定不一致等失败条件下行为尚未验证。原文未披露训练、推理或部署成本。

🔗 开源与复现资源

🧭 深度解读

输入是什么,目标是什么,本文要解决哪件事?

本文的输入是一台具体硬件:Native Instruments Traktor Kontrol S4 Mk3,一台带电动转盘的小尺寸 4 通道 DJ 控制器。它的特殊之处是所谓 Haptic Drive,也就是转盘里有电机,能主动给手指阻力、过 cue 点时给一下顿挫、对拍时给转盘式扭矩、做 backspin 时瞬间卸力,摸起来像在推黑胶。作者的起点很个人:国际搬家后心爱的黑胶唱机没能随行,他想用这台控制器补上触觉空缺,同时又担心把乐器的一半押在云授权的 Traktor 与不支持 Linux 的闭源软件上。

本文的目标不是发一个新模型,而是做 1 次可用的社会化维修:让这台控制器脱离原厂软件,也能在开源 DJ 软件 Mixxx 里把电动转盘跑起来,并且保留转盘仿真的演奏质感。必须保留的关键信息是:这是 1 次逆向工程加社区协作,没有原厂电机控制细节,只能靠抓包、试凑与调参逼近;作者明确说 S4 Mk3 不是黑胶,物理动力学不同,最终接受它本来的样子。输出是一套在 Mixxx 里可演出的转盘模式实现、若干未完全解决的妥协,以及指向通用驱动与新乐器用法的未来设想。

为便于复述,先把动作主线说清楚。作者先在 Windows 上用 USBpcap 加 Wireshark 抓 Traktor 与 S4 的通信,在 Linux 上用 usbmon 加 Wireshark 看 Mixxx 与 S4 的通信,确认人体学接口报告的结构。然后在 Python 里用抓包时钟对齐位置、速度、触摸与电机输出,反复画图试出滤波加比例加微积分加平滑的结构,再移植到 Mixxx 的 JavaScript 控制层。接着处理 3 个工程卡点:500 Hz 消息节拍与 JavaScript 定时器精度的矛盾、正常播放的抖晃、边圈点推时无触摸如何感知扰动。最后处理 cue 与倒放等行为差异,并在小型派对上实际演出验证。

本解读的阅读顺序按学习依赖安排:先讲 DJ 控制器与开源软件的路线差异,再给方法全景,然后拆开物理模型、传感与控制 3 个组件,接着讲没有神经网络训练时真正的构造与调参过程,再讲实验条件与抓包协议,最后讲结果、反证、局限与复现。文中教学例子会明确标为例子,不把假设数值当成论文报告。

已有路线有哪些,本文站在哪条线上?

第一条路线是尽量复刻黑胶的硬件路线。文中提到的例子是 Rane Twelve MkII,用 12 英寸盘与真实防滑垫把外形与手感做得尽量像唱机。代价是体积大、结构复杂、价格高。S4 Mk3 走的是另一条折中路线:盘小、便宜、能当独立 4 通道调音台用,还带话筒与唱放输入,用电机模拟出扭矩与打滑感。理解这个取舍很重要,否则会误以为小盘加电机就等于黑胶。

第二条路线是触觉 DJ 控制器的研究原型。作者专门用一小节回顾 Beamish 在 S4 Mk3 发售十多年前做的 D’Groove,其中触觉 cue 与节拍山包的思路与 Haptic Drive 相近,D’Groove 甚至有拨动盘面引发长时间振荡的手势。作者的判断是理论上可以用 S4 Mk3 硬件加自研电机控制把 D’Groove 复活。这一定位把本文与猎奇式新奇区分开:硬件能力早有学术先声,缺的是开放驱动。

第 3 条路线是软件生态。Mixxx 在 2003 年 NIME 上首次亮相时,目标恰恰不是复刻黑胶,而是研究 DJ 情境下的新交互,当时批评 Final Scratch 除了波形显示没有新意。具有讽刺意味的是,作者这次恰恰要在 Mixxx 里把黑胶隐喻装回去。Mixxx 今天的卖点是功能、开源代码与友好社区,而 Traktor 是闭源加云授权。作者的选择理由不是音质胜负,而是乐器身份的可延续性:制造商倒闭或放弃产品后,社区能否通过维修、改装与重写驱动让乐器活下去。文中以 Livid OHM RGB 社区与复古游戏机社区为例,说明维修本身就是设计与关怀。

例子:可以把 3 条路线想象成三家餐馆,一家坚持手工拉面复刻老味道,一家做分子料理研究新口感,一家是社区食堂菜谱公开。作者想在社区食堂里复刻出一碗接近老味道的面,明知汤底工艺拿不到,只能边尝边调。

为什么小电机转盘难做得像黑胶?

问题先来自物理。真实黑胶系统是唱片、防滑垫、马达盘 3 层叠在一起,靠摩擦传扭矩。手不碰时三者粘在一起转,手按住或拨动盘面且速度差足够大时,唱片相对马达盘打滑,只有动摩擦把它慢慢拉回同步。S4 的转盘半径小、转动惯量小、电机特性未知,手指稍一用力就会把编码器速度搞得很毛糙。如果直接把转盘转速拿去调播放速率,正常播放也会出现快速细碎的音高抖动,听感像磁带抖晃。

问题再来自信息缺失。S4 用人体学接口协议经 USB 通信,而不是传统 MIDI,数据密度与时间分辨率要求更高。社区此前已摸清报告字段,能跟电机说话,但控制逻辑不成形,转盘模式基本不可用。作者不知道原厂如何滤波、如何定零点、如何处理触摸与边圈两种手势,也不知道电机输出数值与真实转速的映射。抓包能看到数字跳动,但数字背后的物理意义必须重建。

问题最后来自互相打架的设计目标。DJ 既要黑胶式的惯性与急停甩尾,又要数字 cue 的采样级精确:按 cue 必须吸到标记点且一动不动,否则下 1 次按 cue 会被软件理解成移动标记点而非从标记点播放。电机停稳需要时间,惯性音效好听却会带动播放头漂移。原文把这类矛盾称为没有原厂细节时必然撞见的权衡,解决办法只能是妥协与社区讨论,而不是 1 次推导出最优解。

方法全景:一个样本如何走完输入到输出?

先沿一个具体样本走完全程。假设左盘正在以 33 转播放,目标角速度约每秒 200 度。S4 每 2 毫秒上报 1 次转盘位置与触摸比特。Mixxx 的 JavaScript 层收到包后,先用位置差算出原始角速度,再做加窗加权平均滤波得到平滑速度,减去目标速度得到误差。若触摸比特显示手指在盘面上且误差超过防滑垫能承受的最大摩擦,就进入打滑分支,用虚拟动摩擦计算回拉力并同时驱动播放速率。

若误差很小或手已离开且速度回到同步容差内,就回到粘住分支,把播放速率量化锁定在标称值,电机只做小幅纠偏。电机输出值经 USB 发回 S4,S4 据此给转盘加阻力或助力,手指感到像被唱机带着走或被摩擦拽回同步。

这个闭环里有 3 个关键安排。第一,定时不用 JavaScript 定时器,而用设备上报作为节拍源,收到输入包就回发电机包,从而对齐 500 Hz 节奏。第二,正常播放不直接跟随毛糙速度,而是量化锁定,只在明确失同步时才启用摩擦仿真,避免抖晃。第三,边圈点推不看触摸,而是看电机输出相对标定值的偏差,反向映射出用户施加的扰动,再按比例调播放相位。

为避免误解,需要区分原始目标、近似与调参。原始目标是按黑胶摩擦物理算出应给的扭矩,近似是作者先假设电机输出正比于处理过的速度信号,再用有限冲激响应滤波、比例积分微分控制与额外平滑去拟合 Traktor 的实测输出。比例积分微分 3 个系数与滤波窗口都是试凑调出来的,作者承认这背离了起初想用的纯物理建模,但认为以后仍可把调参结果回扣到近似物理量。

物理模型:粘住与打滑如何分工?

作者先在动笔写代码前推演黑胶物理。参数包括盘半径与质量,以 12 英寸为例约 0.15 米与 0.15 至 0.2 千克;防滑垫静摩擦与动摩擦系数未知,留待试错;电机最大输出扭矩以 Technics 1200 为参照约 0.15 牛米。功能状态只有两个:粘住与打滑。

粘住时盘、垫、马达盘一起动,转盘边缘代表马达盘边缘,电机按最大扭矩乘以控制系数给出角加速度去纠偏;打滑时转盘只代表唱片,马达盘被抽象为恒定目标转速,电机输出代表动摩擦方向永远指向目标转速,搓盘时甚至会顺着手势助力,只要手势把唱片推向同步。

粘住状态 × 打滑状态: 粘住状态负责描述唱片、防滑垫与马达盘吸在一起整体转动的情形,此时转盘即整体,电机要纠正偏离目标转速的偏差;打滑状态负责描述演奏者触摸盘面并大幅改变转速后唱片与马达盘脱钩的情形,此时转盘只代表唱片,电机输出只代表动摩擦把唱片拉回同步的力量。两者搭配的理由是真实黑胶只有这两种摩擦 regime,组合意义在于用状态切换决定电机该输出刚性纠偏还是柔性摩擦回拉。

判据用速度差表达。记马达盘角速度与唱片角速度之差为误差,扰动未大到克服静摩擦上限时保持粘住,一旦差值过大就解耦进入打滑。打滑中只要两者速度回到容差带内就瞬间粘回,哪怕只粘住零点几秒。无论是手把盘带回目标,还是靠虚拟摩擦慢慢拉回,最终都要回到粘住。这个模型不关心手指是否还放在盘上,只关心速度是否又被带出同步。

教学例子:把粘住想象成两个人牵手跑步,步伐一致就能一起跑;打滑是其中 1 人被拽了一把松开手,另 1 人只能在后面喊话让他慢慢追上来,追上才能重新牵手。这里的喊话就是电机模拟的摩擦力。

传感与触摸:位置从哪里来,手势如何区分?

S4 转盘传感用一块双轨光栅盘加 5 个红外反射传感器。外圈 360 个窗口黑白交替,4 个传感器错相布置,分辨率乘以 8 倍,因此设备上报的位置值每转回绕在 2880,正好对应每脉冲 0.0125 度。内圈只有 10 个窗口加一个传感器,作者推测用于高速防混叠与纠错。电机报告以 500 Hz 发出,里面有两个位置量:一个是原始 wraparound 值,另一个是用满 8 位无符号整数展开的并行流,且能修正原始流中偶发的归零跳变。作者怀疑纠错能力来自内圈轨道,但具体硬件做法不透明。

触摸传感用转盘金属表面的电容变化,以报告中的一个比特表示。作者根据结构推测是静止电路板上的电场传感器隔空耦合旋转圆环天线。正是这个比特让控制代码能区分两种交互:碰盘面就走防滑垫物理,碰边圈就不走防滑垫物理。没有这个比特,搓盘与对拍会被混成同一种速度误差。

盘面触摸 × 边圈点推: 盘面触摸负责触发防滑垫物理,即允许进入打滑并用摩擦模型计算回拉;边圈点推负责在不触摸盘面时对播放相位做微调,此时不进入防滑垫物理。两者搭配的理由是硬件只有一个触摸比特却对应两种演奏意图,组合意义在于软件必须用触摸比特分流两条不同的速度映射路径,否则无法同时解释搓盘与对拍。

位置到速度的换算需要校准。作者用 33 转对应每秒 200 度做锚点,观察位置斜率得到每秒 1600 脉冲,从而确认每度 8 脉冲,与光栅分辨率 1 致。这个换算把后面所有滤波与电机标定都锚定在物理单位上,否则只能在无量纲数字里打转。

控制拟合:滤波加 PID 如何逼近原厂?

作者把抓包时钟作为统一时间轴,在 Python 里用表格与绘图库对齐分析。核心假设是电机输出正比于处理过的速度信号。原始速度非常毛糙,电机输出相对低通。作者利用初始化段出现的单采样交替脉冲作为天然测试信号,反复试有限冲激响应滤波权重,使滤波后速度轮廓贴合电机输出轮廓。接着把零点移到目标转速并翻转符号,再用加窗加权平均卷积得到更贴合的包络。

位置传感 × 电机输出: 位置传感负责给出转盘转到了哪里,由双轨光栅与红外反射传感器提供高分辨率脉冲;电机输出负责决定给多大的力,其数值与物理转速之间没有先验标定。两者搭配的理由是控制闭环必须把位置差变成力,再把力变成可感转速,组合意义在于作者必须先做阶跃给力测转速的标定实验,才能把任意输出值翻译成目标转速误差。

在此基础上实现比例积分微分控制器去拟合 Traktor 的电机输出,再加 1 级平滑后曲线基本重合。作者明确说系数全靠试错,不符合最初的物理建模期望,但保留了以后映射回物理量的可能性。关键行为验证是搓盘时速度过零导致电机在标定摩擦扭矩间切换,接近零点时电机把速度吸附回目标,对应防滑垫粘住与虚拟马达扭矩透出;手拨盘在接近目标时确实不打滑,与模型一致。

电机输出的物理意义靠阶跃实验标定。做法是给电机发恒定输出数秒并测稳态转速,从零开始逐档递增,得到输出与转速近似线性。33 转对应输出约 460 与每秒 1600 脉冲,45 转对应输出约 560 与每秒 2150 脉冲,捕获到的最大值范围是正负 60000。有了这条曲线,边圈点推才能把输出偏差翻译成速度误差。

没有神经网络训练时,真正的计算与调参是什么?

本研究没有训练神经网络,也没有梯度下降、数据集划分或权重更新,因此不存在冻结与解冻、监督来源与重置时机的说法。若把训练一词理解为让系统可用的构造过程,那么真正的计算是 3 类:USB 抓包与 Python 离线拟合、Mixxx 内 JavaScript 控制代码的移植与联调、阶跃给力测转速的标定实验。

量化播放 × 摩擦仿真: 量化播放负责在无人为扰动时把播放速率锁在标称值,避免编码器噪声引起可闻抖晃;摩擦仿真负责在快速拨盘后手已离开但速度未同步时继续用虚拟摩擦把速度拉回。两者搭配的理由是稳定播放与连续手感互相冲突,组合意义在于用同步判据切换两者,先保证听感稳定,再在失同步时恢复物理连续性。

参数状态需要如实交代。滤波窗口形状与权重、比例积分微分系数、额外平滑强度、点推深度比例、同步容差阈值,全部是人工试凑且在写作时仍需群体调优,没有报告自动搜索或交叉验证。作者说自己已过度适应当前手感,需要社区共同找到适合公开发布的设置。调用关系是:既有 Mixxx 播放引擎负责音频,新增 JavaScript 控制器负责把传感翻译成电机命令与播放速率,不存在从模型名称推定的隐含实现。

缺项也要点名。原文未报告滤波器阶数与截止频率的系统扫描、PID 的稳定性裕度、不同机器上的定时抖动分布、电机长期发热与磨损评估。把无训练等同于确定性求解是错误的,同一套参数在不同主机定时精度与不同手指力度下表现可能不同。

抓包与标定在什么条件下做的?

抓包分两套环境。在 Windows 10 上用 USBpcap 经 Wireshark 抓 Traktor 与 S4 的通信,在 Linux 上用 usbmon 经 Wireshark 抓 Mixxx 与 S4 的通信,导出表格文件后用 Python 的表格、数值与绘图库分析。测试动作覆盖两盘:调电机松紧、相对与绝对音高推子、33 与 45 转速、载入曲目并播放,然后对每盘分别做压边圈减速、推边圈加速、压盘面减速、推盘面加速、盘面与边圈的 baby 搓盘、反向播放。通过多轮抓包、分析、讨论与实现收敛到接近 Traktor 的响应。

下图是抓包界面的像素证据,展示了分析起点的数据形态,阅读时先分清方向与报告编号,再看字节窗,才能理解后面位置与电机字段从何而来。

看图路径: 1. 先看上半部分包列表中反复出现的 USB INTERRUPT out 与 Report ID 列;2. 再看下半部分十六进制字节窗中被高亮选中的输出字节;3. 对比包长度与方向,区分主机发往设备的控制包和设备上报的传感包

原论文 Figure 2:WireShark UI Showing USB data

论文图 2。原论文 Figure 2:“WireShark UI Showing USB data”。

上图上半为包列表,下半为字节细节,高亮行对应主机发往设备的打断输出包。可见内容支持两个判断:通信是高频小包的双向打断传输,控制与传感交错出现;报告编号列可用于分离电机控制包与传感上报包。限制是截图分辨率下无法逐字节读出全部字段含义,具体字段映射依赖社区此前的逆向与作者重验,不能仅凭此图重建协议。

标定实验条件是:给双电机发稳态输出数秒测稳态转速,清零等待数秒再递增。播放与搓盘测试用 440 Hz 正弦校准音,便于听出反向驱动的转速偏差。作者还记录了初始化段的交替脉冲,恰好用作滤波器试凑的天然激励。硬件预算与采样时长未量化报告,这是复现时需补的缺项。

下表把时间节拍与位置分辨率的关键数字收拢,便于核对实现条件是否一致,表中数字全部来自原文连续句,单位保留原文写法。

条件指标基线或约束本方法实现比较对象
消息节拍上报与控制速率500 Hz,每 2 ms 1 次收到输入即回发,不用定时器JavaScript 定时器最小 20 ms
位置报告每转脉冲与分辨率360 乘 8 等于 2880,每脉冲 0.0125 度用 8 脉冲每度换算速度原始 wraparound 值
触摸与状态手势分流单比特触摸盘面走摩擦,边圈走点推无触摸时的输出偏差法

表前已提出比较问题:在 JavaScript 只能用粗粒度定时器的约束下,能否跟上 500 Hz 闭环且不丢分辨率?公平条件是同一台 S4、同一 USB 路径、同一 500 Hz 节奏,指标方向是控制延迟越小越好、位置量化越细越好。表后解释是:用输入包驱动输出的办法绕开了 20 ms 下限,在作者 Linux 笔记本上可行,但他人报告无法跑到 2 ms 定时,因此该绕行不是可选优化而是发布必需;双位置流加内圈纠错解释了为何直接用原始值会看到归零跳变,而处理后信号可用于求速度。未胜出项是直接用定时器发电机命令的方案,它在部分机器上根本跑不到节拍,已被放弃。

代码当前可用性按资源状态写:实验分支在写作时已公开可用,Mixxx 官网也可访问,地址见证据资源。LED 屏驱动接近可用,但本文只聚焦电机。

哪些现象证明仿真贴近原厂,代价是什么?

先看位置纠错。下图对比原始位置与处理后位置随时间的变化,原始曲线在回绕处垂直掉零,处理后曲线在同一区间保持连续,作者将其重绕到 2880 对比。这是选择处理后信号求速度的前提,否则微分会在掉零处产生巨大伪速度。

看图路径: 1. 沿横轴时间方向跟踪绿色原始位置曲线的锯齿上升与垂直掉零;2. 对比橙色处理后曲线在同一时刻是否连续无掉零;3. 注意第二次掉零附近两条曲线错开的位置,确认纠错发生的区间

原论文 Figure 3:The raw sensor values reset to zero, whereas the processed signal (re-wrapped at 2880 for…

论文图 3。原论文 Figure 3:“The raw sensor values reset to zero, whereas the processed signal (re-wrapped at 2880 for comparison) does not suffer the same discontinuity.”。

上图中绿色锯齿为原始值,橙色为处理后重绕值,横轴为抓包时钟,纵轴为位置脉冲。可见原始曲线 3 次掉零而橙色曲线错峰连续,支持处理后信号更可用的判断。限制是图未标注哪条对应哪种颜色之外的采样率与绝对时间零点,只能定性确认纠错存在,不能读出纠错算法。

再看速度过零行为。下图展示搓盘时滤波速度大范围下坠回升,电机输出在过目标时翻转符号,触摸跳变后出现吸附段。这正是粘住与打滑切换的指纹:远离目标时电机输出饱和在摩擦扭矩,接近目标时透出虚拟马达扭矩把速度吸住。

看图路径: 1. 先找到蓝色滤波速度从正到负大幅下坠再回升的搓盘轨迹;2. 再看橙色电机输出在速度过零点附近如何翻转符号;3. 观察红色触摸信号跳变前后电机输出的台阶与粘住吸附段

原论文 Figure 6:Detail of the motor output as it crosses the target velocity

论文图 6。原论文 Figure 6:“Detail of the motor output as it crosses the target velocity”。

上图中蓝色带叉为滤波速度,橙色为归一化电机输出,绿色为位置,红色为触摸。触摸从高到低的跳变点附近电机从负饱和跃起并跟踪速度回零,支持模型正确的结论。代价是速度噪声仍大,必须靠滤波与平滑压住,这会引入延迟与手感差异。 最终拟合如下图所示,仿真电机几乎贴住实测电机。

看图路径: 1. 先看绿色实测电机输出与橙色仿真输出在大幅脉冲段的重合度;2. 再看蓝色速度曲线相对灰色目标线的波动与延迟;3. 检查脉冲结束后小幅振荡段两条电机曲线的峰谷对齐情况

原论文 Figure 7:Success! The simulated motor controller trace is a close match to the measured one

论文图 7。原论文 Figure 7:“Success! The simulated motor controller trace is a close match to the measured one”。

上图中绿色圆点为实测输出,橙色三角为仿真输出,蓝色叉为换算到电机尺度的速度,灰线为目标。两者在大脉冲的上升、饱和与回落沿基本重合,小幅振荡段峰谷也对齐,报告为成功。但作者强调这是试凑拟合,不是物理参数辨识,换一台主机或换一种手指力度可能需要重调。

标定结果收拢如下表,同样全部来自原文连续句,数值与单位未改写。

条件指标Traktor 实测或标定本方法拟合说明
稳态 33 转脉冲速率与输出1600 脉冲每秒,输出 460,对应 33.3RPM用该点定零点与目标每秒 200 度锚点
动态搓盘电机跟踪过零翻转加吸附PID 加平滑复刻系数试凑得出
正常播放抖晃原厂触摸即抖晃量化锁定播放手离盘即恢复量化

表前比较问题是:在相同搓盘与稳态动作下,仿真输出能否在数值上贴近原厂且播放无抖晃?公平条件是同一抓包时钟、同一目标转速、同一触摸语义,指标方向是输出残差越小越好、听感抖晃越小越好。表后解释是:主要收益是稳态点与动态翻转都能对上,且量化锁定消除了正常播放的抖晃;具体代价是反向驱动校准不同,需要更大输出才能达到同速,用 440 Hz 音可听出拍频偏差,电机磨损未知。未胜出项是直接跟随原始速度的方案,它在原厂与本方法中都会因触摸即引入抖晃而被否决。

拿掉哪一块会坏:定时、量化与点推的反证

定时反证最直接。若坚持用 JavaScript 定时器发电机包,最小 20 ms 的粒度根本对不上 500 Hz 的期望节拍,无命令时转盘会刹停。作者曾临时去掉最小定时值,在自己 Linux 笔记本上能跑到 2 ms,但他人机器跑不到,因此不能作为发布方案。改用输入驱动输出后,S4 的上报节奏自然成为时钟源,问题消失。这个对照说明节拍源的选择是成败手,而非小优化。

量化反证来自触摸实验。作者起初把播放速率直接耦合到转盘转速,结果正常播放出现明显抖晃。进一步测试发现原厂 Traktor 也有同样问题:只要触摸传感器被触发而不转动转盘,就会复现相同抖晃。原厂解法是除非触摸否则量化播放速率,作者照搬后抖晃消失。但仅靠触摸不够:高速拨盘后手已离开,仍需摩擦仿真把速度拉回同步后才能切回量化,否则会出现回拉过程被量化截断的不连续。

点推反证来自无触摸扰动。若电机输出正比于实测速度,边圈点推不碰盘面时如何感知扰动?答案是反向查表:先用阶跃实验得到目标转速对应的期望输出,再把实际输出偏差映射为速度误差并乘以点推深度。还需状态记忆:从静止启动时,在误差小于阈值确认全速前忽略点推,否则启动过程会被误判为扰动。这一块没有它,对拍功能就不可用。

还有哪些矛盾没有解开?

cue 行为是最大未解矛盾。Mixxx 的 cue 要求按下载到标记点且 1 采样不动,否则下 1 次按键会移动标记点而非播放。但电机停稳需要时间,若播放跟随转盘,停盘过程必然带动播放头漂移并带出减速音。减速音在按播放暂停时是想要的黑胶味,在 cue 吸点时却是不想要的漂移。社区讨论分裂:一派要求转盘模式与非电机模式 cue 一致,做法是停稳前解耦转盘与播放,代价是丢掉转盘味。

另一派愿意保留惯性。即使实现解耦,硬停后的弹簧回弹仍会让播放头动 1 采样,导致下 1 次按键语义错误,写作时未解决。

转盘仿真 × 数字 cue: 转盘仿真负责让停止与启动都带有电机减速与加速的惯性,保留黑胶的急停质感;数字 cue 负责让按下 cue 键时播放头精确吸到标记点且 1 采样都不漂移。两者搭配困难的原因是电机停稳需要时间而数字 cue 要求立即静止,组合意义在于必须在保留惯性与满足精确 cue 之间做取舍,原文最终选择了跟随 Traktor 的 cue 即播放策略。

作者实测发现 Traktor 在转盘模式下 cue 永远是 cue 即播放,不会 cue 即停止,无论偏好如何设置。作者推测 3 种可能:原厂认为转盘模式下大家边搓边 cue,或表演预期不同,或原厂撞见同样难题后选择绕行。作者暂时跟随该行为,并引用开发者意见说有机会做得比 Traktor 更好,但尚未做到。这是一个明确的未评测边界:不同 cue 偏好组合下的行为矩阵没有报告。

其他局限包括手感仍与原厂有可感差异、反向驱动转速偏置、电机规格与磨损未知、LED 屏当时未完全可用。作者把调参收敛困难归因于自我过度适应,需要群体试听试玩才能定发布参数,这意味着当前最优只是个人最优。

复现先做什么,需要哪些条件?

复现的第一步是准备双系统抓包环境:Windows 10 加 USBpcap 加 Wireshark 看 Traktor,Linux 加 usbmon 加 Wireshark 看 Mixxx,导出表格后用 Python 的表格、数值与绘图库按抓包时钟对齐。测试脚本要覆盖电机松紧、相对与绝对音高推子、33 与 45 转、双盘载入播放,以及压推边圈、压推盘面、两种 baby 搓盘与反向播放。先重算每度 8 脉冲的锚点,再试滤波权重使电机轮廓贴合,最后上 PID 加平滑。

第二步是标定。按清零等待数秒再逐档递增的流程,给双电机发恒定输出并记录稳态脉冲速率,至少拿到 460 对应 33.3 转与 560 对应 45 转两点,并确认上限正负 60000 范围内的线性趋势。第三步是移植到 Mixxx JavaScript 层,务必用输入包驱动输出包,不要依赖定时器,并加入量化播放与同步判据、点推反查表与全速阈值、反向速度符号处理。校准用 440 Hz 正弦音听拍频,搓盘看过零翻转与吸附段是否出现。

信息条件与开源状态按证据写:实验分支当前可用,Mixxx 官网可访问。复现还需补的验证是:不同主机定时抖动、不同手指力度与盘面湿度下的触摸可靠性、长时间演出的电机温升、cue 解耦方案的采样级漂移统计。作者已用小型派对演出验证无技术故障,但这只是单人单机证据,不能推广为发布质量。

何时值得尝试,一句话如何带走?

当你有一台 S4 Mk3、能接受它不是黑胶、又想在 Linux 或开源链路里继续用电动转盘演出时,本文值得尝试。它的价值不在复刻精度,而在给出一条可重走的逆向路径:用抓包时钟对齐、用滤波加 PID 逼近未知控制、用标定曲线赋予输出物理意义、用状态机调和抖晃与惯性的矛盾。若你只想要开箱即用的原厂手感,或需要采样级精确的 cue 即停止,当前方案还不适合直接替换。

带走的判断是:粘住与打滑的双状态足以解释主要手势,量化加摩擦的双模式足以让演出可用,但 cue 与反向校准的妥协说明小电机转盘在物理上就不是黑胶。作者最后把眼光放出 DJ 之外,设想把双转盘用作导航与声呐式触觉界面,例如飞船驾驶舱或游戏 In Other Waters 的中央声呐盘,用旋转阻力表达方位与事件。这需要把 HID 翻译成 MIDI 与开放声音控制的通用驱动,而 Mixxx 已有大部分逻辑。只要还有在乎这台机器的人,乐器就能在维修与改写中活下去,这也是标题中接受它本来的样子的技术含义。

📐 原文公式与排版

以下展示论文原页中的数学表达区域,保留原始上下标、分式和符号排版。区域序号仅用于本文导航,不是论文公式编号。

原文数学表达区域 1,PDF 第 3 页

区域 1 · 查看论文原页

原文数学表达区域 2,PDF 第 4 页

区域 2 · 查看论文原页

另有 6 个候选区域因边界不明确或图片数量、尺寸限制未展开;请查看完整论文中的原始排版。

⚖️ 评分明细

评分属于系统判断,不是论文实验结果;八维数值与总分见页首,原始审计记录保留在后端。

  • 评分规则:type-aware-v1
  • 评分模型:muse-spark-1.3-contributor
  • 评分请求协议:openai_responses

← 返回 nime-2026 论文汇总