屋子里有个盒子在响,你却找不到它。这事听起来像段子,但真发生在自己家里,只剩烦躁。

作者家的储物间堆满了上次搬家还没拆的纸箱。几周前,那间屋子里有东西开始间歇性地滴滴叫。两次响声间隔太久,站在房间里等下一声,等到心态崩了也定位不了;把每个箱子翻一遍,又实在不想干。
于是他让 Claude Code 造了个叫 Beep Locator 的系统:用散落在房间里的多台设备,三角定位那声神秘滴滴的来源。
跑一个 Python Web 服务器撑起主界面,再用二维码或链接把能凑出来的设备都连上,让它们当 " 监听器 "。他手头用的是两台 iPad、一部手机、一台 MacBook Pro 和一台 Surface Ultra。
设备之间先互相放声音,试图估算彼此的位置。这一步效果不太行,于是补了个 " 粗略模式 ":手动把设备图标拖到大致位置,再靠声音微调。
设置完,所有设备一起听那声滴滴。
为了验证系统真能定位声音,他还加了拍手模式——在房间不同位置拍手,地图上以菱形显示。这让他对系统的定位能力有了点信心。
滴滴声在地图上显示为 X,同时在 " 已定位声音 " 日志里留一行。可以逐台设备回放录音,确认是不是要找的那声,再点 " 这就是那个神秘滴滴 " 把它标记下来。
确认频率之后,系统会专门监听它,测量两次响声的间隔,结合三角定位结果,在地图上锁定最可能的位置。
系统按预期工作,把滴滴的位置锁定在约 40 厘米 范围内。他照着那堆箱子翻下去,找到一台老掉牙的一氧化碳探测器,正拼命等着换电池。
它是怎么工作的
动手之初,Claude 很快翻出一篇 2007 年的论文《BeepBeep:使用商用设备进行高精度声学测距与定位的系统》,作者是 Chunyi Peng、Guobin Shen、Yongguang Zhang、Yanlin Li 和 Kun Tan。
论文摘要讲的是:这套系统在自发、自组织、设备到设备的场景下工作,不依赖任何预先规划的基础设施;纯软件方案,只用最基础的商用硬件——一个扬声器、一个麦克风,加上某种设备间通信;靠双向感知、自录音和采样计数三项技术组合实现高精度。
这正好对上了需求。
Beep Locator 的主体是一个 Python Web 应用服务器。监听设备通过 WebSocket 连上来,界面会请求浏览器麦克风权限。监听器主要做一件事:持续录制最近 60 秒的音频缓冲。它们还跑一个简单的滴滴检测算法,用快速傅里叶变换和高通滤波器找出可能的滴滴,把事件上报给主服务器。
收到滴滴报告后,服务器挑一台设备(往返时延最低的那台)放一声短促的啾鸣,然后要求所有监听器上传一段音频:从滴滴前约 0.6 秒到啾鸣后约 0.8 秒。这声啾鸣让各段录音能互相对齐,而这是定位的关键一步。
它是怎么被造出来的
项目起点是 iPhone 上的 Claude Code Cloud,跑的是 Opus 5.5,开了 Extra thinking effort 模式。第一个提示词对着一个刚建好的空 GitHub 仓库写下:写一个 problem.md,描述要解决的问题——房间里有设备在滴滴叫,找不到;想用散在房间里的笔记本、手机、iPad 同时监听,帮忙三角定位;需要一个 Python Web 应用来协调,一台设备显示页面,其他设备通过链接加入成为监听器,全部走浏览器 WebAudio 和 WebSocket;最好不用手动输入设备相对位置,让它们互相放声音在二维空间里定位彼此——这能做到吗?
Claude 在写这份文档的过程中找到了 BeepBeep 论文并读了进去。
研究看着靠谱,他接着下指令:动手建吧,加个机制能把新代码推给监听器自动执行,这样他可以把设备在房间里摆好,然后放手让 Claude 自己折腾实验。
到这一步,系统大部分已经建好,但还没真正跑过。
他把新仓库克隆到笔记本上,启动 Claude Code,然后 Fable 5.2 发布了,这个项目正好拿来试它。
他让笔记本上的 Claude Code 把服务器跑起来,再确保它既能看见运行状况,又能在运行中实时改代码。
这个能力早就埋进软件里了:Opus 5.5 在监听器上建了个 installModule ( ) 方法,可通过 WebSocket 触发,意味着管理服务器能在任意客户端上执行新的代码。
有些设备上,监听麦克风的网页每次刷新都会重新请求用户授权。热插拔模块机制让新代码可以直接部署,不必挨个手动操作每台监听设备。
此后他的参与方式基本是坐在笔记本旁,跟 Fable 5.2 聊现场情况,偶尔提新需求。
" 粗略模式 " 下能拖动地图上的设备图标,先摆个大概,再切出去让系统自动校准。
加拍手检测,拍手在地图上用和滴滴不同的符号显示。
地图上每个符号都带 HH:MM:SS 时间戳,方便对上现实里是哪一声。
日志里滴滴和拍手都带时间戳,还有一个播放按钮,按顺序回放各监听器录到的声音,屏幕上标明哪段是哪台设备录的,回放时临时关掉麦克风录制。
每条录音旁加 " 这就是那个神秘滴滴 " 按钮,确认后系统以后就能判断新声音是否属于同一频率,并据此把位置算得更准。
" 重新摆放设备 " 按钮:切进重新摆放模式,点 " 已摆好 " 进入粗略模式,手动标个大概位置再启动,上一轮会话可以只读查看。
地图上还会根据已有数据,提示在哪个位置再加一个监听器会更有用。
作者觉得这个项目最有意思的地方在于:他证明了可以给 Claude Code 一副耳朵。
Claude 本身没有原生音频输入,但它能跑 JavaScript 和 Python 代码,去分析麦克风采集到的音频。让它跑一个带 WebSocket 的 Web 服务器连上多台监听设备,再在这些设备上跑 WebAudio 麦克风,并通过 WebSocket 推送新代码执行——之后基本可以放手,让它自己啃问题、查音频日志、重新配置自己的 " 耳朵 "。
这让他想起几周前在 GitHub Universe 听到的一个类似做法:Martin Woodward 为了调试 GitHub Universe 徽章电脑,用 USB-C 把它们接到一台电脑上,再用摄像头对着屏幕,这样他的编码智能体就能判断更新有没有生效。
让编码智能体感知周围世界,这件事本身就挺好玩。

