最近被人问起有什么好玩的东西,第一反应就是它。用手拍一下笔记本,它就叫。就这么简单,GitHub 上五千多人给这个项目点了星。
项目叫 spank,作者 taigrr。官方一句话介绍特别短,照原意翻过来:拍你的 MacBook,它会喊回来。
听起来像个玩笑,但它背后是一套正经的传感器信号处理。
一、它是怎么知道你拍了它的
先说个大多数人不知道的事:苹果 M 系列芯片里藏着一颗加速度计。
这颗传感器出厂就装好了,普通用户根本接触不到。它本来是拿来干嘛的?给跌落保护用的——硬盘要摔之前,赶紧把磁头收回去,别磕坏了。
spank 做的事情就是:把这颗原本没人碰的传感器挖出来,当成挨打感应器用。
它走的是系统底层的 IOKit HID 接口,直接读原始加速度数据,绕过了上层所有封装。再配合一套振动检测算法,把“有人敲我”和“桌子晃了一下”区分开。判断准确了,就播一段音频。

判断“这是敲”这件事,其实比想的难。
你或许觉得,检测到加速度变化不就完了?没那么简单。笔记本放在包里被你背着走、放在桌上被杯子碰到、合盖时磕一下,这些都会产生加速度变化。要是一有变化就叫,这东西就没法用了。
所以它上了四套算法一起投票:
- STA/LTA(短时均值比长时均值):短窗口的平均幅度比长窗口突然抬起来,就判定成一次事件。这是地震台网监测地震用的经典方法,拿来做敲击检测刚好合适。
- CUSUM(累积和算法):不看你这一下有多猛,看偏差是不是一直往一个方向堆。堆过阈值才触发,对慢变干扰不敏感。
- Kurtosis(峰度):正常振动像一团噪声,敲击是一个尖尖的峰,峰度指标能明显区分这两种形态。
- Peak/MAD(峰值比中位绝对偏差):用中位数算出来的偏差当基准,比用平均值更抗偶发噪声,衡量这一下到底有多猛更准确。
四套算法一起看,误报率就下来了。这套思路不是它发明的,是从另一个传感器项目搬过来的,README 里标了出处。

二、四种模式,越往后越离谱
默认是痛叫模式:敲一下,随机播一段痛叫,内置 10 段音频,同一句不会连着来两次。剩下的几个,基本属于闲得慌:
- 痛叫模式(默认):内置 10 段痛叫音频,随机挑,这是官方默认模式。
- 性感模式(--sexy):统计你五分钟内敲了多少下,敲得越频繁,音频内容逐级升级,一共 60 级。官方文档里明确说慎用。
- 光环模式(--halo):播的是《光环》游戏里士官长的死亡音效,童年回忆杀。
- 自定义模式(--custom /path/to/mp3s):指向一个文件夹,里面放什么就播什么。想让它骂人、唱歌、放你自己的录音都行。
还有个细节值得注意:它提供了 --volume-scaling 选项,轻敲声音小,重拍声音大。这是真把“力反馈”这层意思吃透了,不是一刀切地放同一段音频。

三、装起来就一行命令
它是个 Go 写的单文件可执行文件,没有任何依赖,下完就能用。
最省事的方式是去 Releases 页面,按你的芯片型号下载编译好的版本,拖进系统路径。有 Go 环境的话,源码安装也就一行:
go install github.com/taigrr/spank@latest
装完复制到系统路径,就能跑了:
sudo spank
要加 sudo,因为它读的是底层传感器,需要提权。想让它开盖就在,配一个开机自启文件就行,文档里三种模式的配置都给好了,复制粘贴改个模式参数就完事。

四、说点实在的
三点,第一点最重要。
第一,它挑硬件,挑得很死。 必须是 Apple Silicon,还得是 M2 及以上,或者特定的那个 M1 Pro 型号。老的 Intel Mac 完全不行,其他 M1 型号也不行。别看完文章兴冲冲去装,先确认机器够不够格。
第二,它是个玩笑项目,但工程是认真的。 四套检测算法、参数可调、音量随力度缩放、能常驻后台,这套东西搬到正经的振动监测场景里,逻辑完全能用。整活归整活,代码没糊弄。
第三,别在开会的时候开性感模式。 官方文档里都写了要慎用。
五、收个尾
为什么想讲它?
现在 GitHub 上“开会式”的项目太多了,功能列表拉得老长,装完用两天就忘了。这个项目反过来,就干一件事,还干得挺逗。
它让我想到一个点:硬件的可能性,往往被软件定义死了。那颗加速度计装在你电脑里好几年,厂商只让它干跌落保护这一件事。有人换个角度看了一眼,它就有了别的用处。
手上正好有台够格的 Mac 的话,周末花五分钟装一个,敲一下,听它叫。