这几天一直在疯狂被开叔(kai1103)的固件流轰炸,目的是测试和确定TentaPad
Fx的防抖方案。
--文字太多不想看?只看一句:触盘FX延迟超级低,会提高你的ACC,买买买!
--为什么要做防抖?因为任何微动开关在铜片触点接触的时候,都会在几ms内交替产生数个0和1(接通和不接通)的信号,被称作是“抖动”这是机械接触式的微动按键无可避免的问题,特别是久经摧残的老轴,抖动得更加厉害,所以一个良好的“防抖”方案非常必要。
默认的没优化过的GH60固件防抖逻辑都是“稳定5ms后输出”,也就是他的延迟至少是5ms+处理和传输延迟,这是一个非常不可取的方案。
我和开叔尝试过的逻辑有以下几条:
1.“稳定1ms后输出”
--疯狂双击
2.“按下直接输出,防止5ms内再次按下按键;松开直接输出,防止5ms内识别按下按键”(按键锁死方法)
--实战osu的时候滑条会无故终端,归结原因是“微动开关在完全按下的时候也可能发生抖动”。
3.“按下直接输出,抬起稳定5ms后输出”
--osu对按键的抬起判定是完全没要求,所以抬起对于osu(仅限osu、太鼓模式)来说不重要,所以有了这个想法。也更没有人能在5ms内连续按两次同一个按键。
--实战中这个固件能够很好地正常工作,但是理论上存在“抖动超过5ms”,消抖过程中肯定耗费芯片资源,所以这个逻辑能用但是并不最优。
最后确定的防抖方案:
"按下直接输出,在5ms内不允许再次按下(锁死按键状态),抬起稳定5ms后输出"(不判定为“抬起”之前这个逻辑不复位)
这个方案比方案3多出了“锁死按键状态5ms”,目的是减少芯片频繁检测抖动消耗。
--其实这个方案有些细节开叔说得我都听不懂_(:з」∠)
--开叔原话:针对osu特点的优化式防抖方案,反应迅速且完美消除抖♂动!
方案优点总结:
1.按下立刻输出,没有任何延迟。
2.综合防抖时长10ms,能很好地达到消抖作用。
3.前5ms内不检测抖动,节省资源。(大部分抖动集中在前5ms)
4.即使按键一直抖动,逻辑一样会判断为“被按下”,完全杜绝抖动对打osu的影响。
排忧:
1.osu、太鼓模式对按键的抬起没有任何判定,所以10ms的防抖时长不会对你打图造成任何影响。
2.要达到按键间隔10ms内,这个逻辑才会失效,也就是触盘两个按键交替5ms,换算过来你的点击频率要到1秒200次,也就是12000apm,换算成osu内的说法你需要打3000bmp的四分拍连打你才能使这个逻辑失效,所以完全不用担心。
缺点:
1.不适合对抬起有判定的模式使用, 例如CTB模式,MANIA模式。
实战测试:
方法→我在osu中用编辑器调慢到四分之一倍速仔细校对了10副图的offset(因为rank上去的图也不一定offset很准),然后实战试打,我打了连续两天。
结论→成效是喜人的!偏差值(正负延迟的绝对值相减)控制在了正负2ms之内!平均下来更是正负1ms不到!(例子:如果你的acc
error在-13.8~+14.2,那么绝对值相减就是13.8-14.2=0.4ms的偏差值,人体不是机器,但是多次打图获得的平均值有一定参考意义。)