产品Simon Willison·原文 2026年11月10日

Simon Willison用Claude Code搭建“Beep Locator”,靠多台设备定位房间里的神秘嘀嘀声

他让Claude Code开发了一套通过WebSocket协调多台设备、记录声音并三角定位的软件,最终把声音位置锁定在约 40 厘米范围内,找到一只电池待更换的旧一氧化碳探测器。

AI解读:这套系统解决的是一个具体问题:声音间歇出现,人站在房间里难以判断方向。Willison让Claude Code使用多台设备同时监听,再根据各设备录到的声音时间差估算位置。

定位前需要先知道设备的大致位置。设备之间发声互相测距的效果“不太好”,因此他加入“Rough mode”,手动把设备图标拖到房间平面图中的大致位置,系统再根据声音做修正。

为验证系统能定位声音,他加入拍手模式:在不同位置拍手,地图上以菱形标出定位结果。确认可用后,系统才用于寻找那个间歇性嘀嘀声;确认目标蜂鸣频率后,系统会按间隔持续监听并推算最可能的位置。

最终定位误差约 40 厘米,他据此翻找对应的一堆箱子,找到一只需要更换电池的旧一氧化碳探测器。这是单个家庭场景中的一次使用结果,来源未给出更多测试数据。

实现上,Python服务器负责主要逻辑,监听设备通过浏览器接入并申请麦克风权限,各自保留约 60 秒音频缓冲,用快速傅里叶变换和高通滤波检测可能的蜂鸣声。服务器让延迟最低的设备播放一段短促声音作为对齐基准,再收集各设备前后约 1.4 秒的片段进行对齐。

Willison称这个项目最有趣的一点是“给Claude Code装上了耳朵”:Claude没有原生音频输入,但可以运行JavaScript和Python分析麦克风采集的音频;他通过WebSocket向监听设备下发新代码,从而在不逐台操作设备的情况下持续修改系统。

Simon Willison在 2026 年 11 月 9 日发布的文章中记录,他让Claude Code开发了一套名为Beep Locator的软件,用来定位家中储藏室里间歇发出的嘀嘀声。最终系统把声源定位到约 40 厘米范围内,他据此翻找箱子,找到一只需要更换电池的旧一氧化碳探测器。

他使用了两台iPad、一部手机、一台MacBook Pro和一台Surface Ultra作为监听设备。运行一个Python Web服务器展示主界面,其他设备通过二维码或网址接入,成为监听端。

使用方法与定位过程

设备接入后先互相播放声音来估算彼此位置,但Willison说这一步效果“不太好”。于是他增加Rough mode,允许在房间地图上拖动设备图标给出大致位置,系统再根据声音做调整。

为测试定位能力,他加入拍手模式:在不同位置拍手,地图上以菱形显示定位结果。蜂鸣声则以X标记,并写入“Sounds located”日志;用户可以依次回放各设备录到的片段,确认是不是目标声音,再点击“This is the mystery beep”标记。

确认目标蜂鸣后,系统会监听该频率、测量两次蜂鸣的间隔,并结合三角定位结果在地图上锁定最可能的位置。

声音数据如何处理

监听设备通过WebSocket连接Python服务器,在浏览器中请求麦克风权限,主要工作方式是保留最近 60 秒的音频缓冲,并用一个简单的蜂鸣检测脚本识别可能的信号,该脚本使用快速傅里叶变换和高通滤波。

当有设备报告蜂鸣时,服务器让往返延迟最低的设备播放一段短促声音,再要求所有监听设备上传从蜂鸣前约 0.6 秒到该短促声音后约 0.8 秒的音频片段。这段短促声音用于对齐各设备的录音,Willison称这是定位的关键步骤。

Claude Code在起初阶段找到并阅读了 2007 年的论文BeepBeep: A High-Accuracy Acoustic-Based System for Ranging and Localization Using COTS Devices,该论文描述用扬声器、麦克风和设备间通信进行声学测距与定位。

开发方式与“给Claude装耳朵”

Willison最初通过iPhone上的Claude Code Cloud启动项目,使用Opus 5.5和Extra thinking effort模式,先让Claude写出problem.md描述问题和需求,再让它构建系统。之后他在笔记本电脑上运行服务器,并让Claude能在运行中查看状态和修改软件。

系统中有一个installModule() 方法,可通过WebSocket向监听设备下发并执行新代码。Willison说,有些设备每次页面重新加载都会重新请求麦克风权限,热替换模块让他不必逐台手动操作设备。

后续功能多由他提出需求、Claude实现,包括在地图上拖动设备、用拍手测试、给标记加时间戳、按顺序回放各设备录音、确认目标蜂鸣、重新摆放设备,以及根据已有数据建议增加监听设备的位置。

Willison把这一点视为项目最有意思的部分:Claude没有原生音频输入,但可以通过运行代码分析麦克风采集的音频;他通过服务器和WebSocket让Claude查询音频日志并调整“耳朵”的配置,继续处理问题。

信息来源

Simon Willison原始来源