Localizando la fuente de un misterioso pitido con Claude

Localizando la fuente de un misterioso pitido con Claude

Localizando la fuente de un misterioso pitido con Claude

9 de noviembre de 2026

Nuestra casa tiene un trastero, lleno de cajas que aún no hemos desempaquetado de nuestra última mudanza. Hace un par de semanas algo en esa habitación empezó pitando intermitentemente. Los pitidos estaban lo suficientemente separados como para que permanecer en la habitación y tratar de determinar la fuente del ruido fuera frustrante, y realmente no quería hurgar en cada una de esas cajas. Así que le pedí a Claude Code que creara Beep Locator, un sistema de software para triangular la fuente de un misterioso pitido utilizando múltiples dispositivos repartidos por la habitación.

Así es como se ve Beep Locator después de haber estado funcionando por un tiempo:

Captura de pantalla de una aplicación web que utiliza varios teléfonos, tabletas y computadoras portátiles como micrófonos para localizar un pitido misterioso en una habitación. La columna de la izquierda tiene una "Agregar un oyente" panel con un código QR y un enlace para unirse, un "Controles" panel con botones incluidos "Calibrar", "Pitido de prueba" y "¡Simplemente sonó!" más tiene "Escuche los pitidos" casilla de verificación y una "pitido misterioso" lectura de notas "3345 Hz · 3 confirmados · recordados entre sesiones". Debajo de eso, un "Dispositivos" La lista muestra cinco oyentes codificados por colores (Simon iPhone, New iPad, Old iPad, MacBook Pro, Surface Ultra), cada uno marcado "✓ micrófono funcionando · ✓ altavoz funcionando". El área principal es un mapa cuadriculado con una barra de escala de 1 m que muestra los cinco dispositivos como puntos de colores y los sonidos anteriores como pequeños marcadores con marca de tiempo. Un círculo sombreado de color rosa cerca del MacBook Pro está etiquetado "pitido misterioso · 2 audiencias · dentro de ~41 cm"y al lado un marcador más discontinuo sugiere "¿Agregar un oyente aquí? podría ajustar la posición del pitido misterioso en ~12%". Debajo del mapa, un "Volumen del pitido misterioso más cálido/más frío" El panel muestra una barra para cada dispositivo: Surface Ultra hace más ruido en "-6,0 dB ▲ +11,6 dB más cálido"con la nota "unos 6 dB más alto significa aproximadamente la mitad de la distancia". En la parte inferior, un "Sonidos ubicados" La tabla enumera los aplausos y pitidos recientes con coordenadas, o la advertencia. "Los horarios de llegada no son físicamente posibles (¿eco o un sonido diferente?)".

Ejecuta el servidor web Python para mostrar la interfaz de usuario principal y luego usa el código QR o la URL para conectar tantos dispositivos como pueda para que actúen como oyentes; yo estaba usando dos iPads, un teléfono, una MacBook Pro y una Surface Ultra.

Luego, los dispositivos reproducen ruidos entre sí para ayudar a estimar sus ubicaciones. Esto no funcionó particularmente bien, así que agregué un “modo aproximado” donde puedes arrastrar sus íconos en el espacio para proporcionar ubicaciones aproximadas que luego se ajustan según esos sonidos.

Una vez configurado, ¡todos los dispositivos escuchan el pitido!

También agregué un modo de aplauso para poder probarlo aplaudiendo en diferentes lugares de la habitación, que se muestran como diamantes en el mapa. Esto me ayudó a tener confianza en que era capaz de localizar un sonido.

Los pitidos aparecen en el mapa como una X, además de una línea en el registro “Sonidos localizados”. Puede reproducir estos sonidos (de cada dispositivo por turno) para confirmar que son el pitido misterioso que está buscando y luego hacer clic en “Este es el pitido misterioso” para marcarlos como tales.

Una vez que hayas confirmado la misteriosa frecuencia del pitido, el sistema la escuchará, medirá el intervalo entre pitidos y utilizará las ubicaciones trianguladas para bloquear la ubicación más probable en el mapa.

El sistema funcionó según lo previsto. Me dio la posición del pitido dentro de unos 40 cm, luego busqué en esa pila específica de cajas y encontré un antiguo detector de monóxido de carbono que necesitaba desesperadamente que le reemplazaran las baterías.

como funciona

Cuando comencé a resolver este problema con Claude, rápidamente desenterró BeepBeep: un sistema acústico de alta precisión para rango y localización usando dispositivos COTS, un artículo de 2007 de Chunyi Peng, Guobin Shen, Yongguang Zhang, Yanlin Li y Kun Tan. Aquí está el resumen de ese artículo:

Presentamos el diseño, implementación y evaluación de BeepBeep, un sistema de medición de rango acústico de alta precisión. Opera en un contexto espontáneo, ad hoc y de dispositivo a dispositivo sin aprovechar ninguna infraestructura planificada previamente. Es una solución puramente basada en software y utiliza sólo el conjunto más básico de hardware básico (un altavoz, un micrófono y alguna forma de comunicación entre dispositivos) de modo que es fácilmente aplicable a muchas plataformas de sensores de bajo costo y a la mayoría de los dispositivos móviles comerciales disponibles en el mercado, como teléfonos celulares y PDA. Logra una alta precisión mediante una combinación de tres técnicas: detección bidireccional, autorregistro y recuento de muestras.

¡Eso sonaba exactamente como lo que necesitábamos construir!

Beep Locator ejecuta un servidor de aplicaciones web Python que realiza la mayor parte del trabajo. Luego, los dispositivos de escucha se conectan a ese servidor a través de WebSockets y presentan una interfaz de usuario que solicita acceso al micrófono del navegador. Los oyentes trabajan principalmente grabando un buffer de 60 segundos de audio reciente. También ejecutan un algoritmo simple de detección de pitidos (consulte detector.js), que utiliza la transformada rápida de Fourier y un filtro de paso alto para identificar posibles pitidos. Envía estos eventos al servidor principal.

Cuando se informa un pitido, el servidor hace que un dispositivo reproduzca un chirrido corto (el dispositivo con el menor tiempo de ida y vuelta al servidor), luego pide a cada oyente que cargue un clip desde aproximadamente 0,6 segundos antes del pitido hasta 0,8 segundos después de ese chirrido. Este chirrido permite que los clips se alineen entre sí, un paso crucial para localizar el pitido.

como lo construi

Comencé este proyecto usando Claude Code Cloud a través de mi iPhone, con Opus 5.5 ejecutándose en modo de esfuerzo de pensamiento adicional. Aquí está esa sesión de inicio compartida, que comenzó con este mensaje en un repositorio de GitHub vacío recién creado:

Write out a problem.md file describing the problem we want to solve

There is a device beeping in a room and I cannot find it

I want to set up several devices - laptops, phones, iPads - around the room all listening at the same time and have them help triangulate where the beep comes from

There needs to be a Python web app which coordinates it all - one device shows a web page for the app, other devices join a URL which turns them into listeners - all via browser WebAudio and WebSockets back to the Python server app

Ideally I wouldn't need to manually input the relative locations of the devices - it would be amazing if they could play sounds to each other in order to locate each other in 2D space - is that even possible though?

Eso me consiguió este archivo problem.md. Como parte de la redacción, Claude encontró y leyó el documento BeepBeep, que se describe en ese archivo.

La investigación parecía buena, así que le dije:

Ok try and build it, add a mechanism so you can send new code to the listeners which they will then run automatically - that way I can set everything up in the room and then leave you alone to continue hacking and experiment while I do something else

Eso me llevó a este punto: la mayor parte del sistema estaba construido, pero nadie había intentado ejecutarlo todavía.

Cloné el nuevo repositorio en mi computadora portátil y encendí Claude Code… y luego se lanzó Fable 5.2, y este proyecto parecía una excelente oportunidad para ponerlo a prueba.

Hice que Claude Code en mi computadora portátil iniciara el servidor y luego me aseguré de que ambos pudieran ver lo que estaba sucediendo. y realizar cambios en vivo en el software mientras se ejecuta.

Esto ya estaba integrado en el software: Opus 5.5 había creado un método installModule() en los oyentes que podía activarse a través de la conexión WebSocket, lo que significa que el servidor de administración podía ejecutar código nuevo arbitrario en cualquiera de sus clientes.

En algunos dispositivos, las páginas web que escuchan por el micrófono solicitan permiso al usuario cada vez que se recarga la página. El mecanismo del módulo de intercambio en caliente significaba que podíamos implementar código nuevo sin tener que interactuar manualmente con cada uno de los dispositivos de escucha por turno.

A partir de ese momento, mi participación consistió principalmente en sentarme junto a la computadora portátil a charlar con Fable 5.2 sobre lo que estaba pasando y, ocasionalmente, solicitar nuevas funciones. Estas son algunas de las indicaciones de funciones que ejecuté:

I think we need to make it so I can drag things around on the map in “rough mode”, where my job is just to put them roughly where they are, then switch out of rough mode and it attempts to get them accurate

Esto me dio la posibilidad de arrastrar a los oyentes por el mapa.

what’s a good way for me to test this I wonder? Can we have it listen for claps, then I could clap and it could identify the location of the clap? (...)

Claps should use a different symbol on the map than beeps

Eso agregó que cada vez que aplaudía se mostraba en el mapa como un símbolo diferente de los pitidos.

each symbol on the map should include a HH:MM:SS timestamp

Eso hizo que fuera más fácil detectar qué símbolo probablemente reflejaba qué sonido del mundo real.

The log should show beeps and claps with their timestamps AND have a little play button which, when clicked, replays the recorded noise from each of the listeners in sequence (with clear text on screen showing which listener recorded which snippet) while temporarily turning off microphone recording while that replay plays

Ahora podía reproducir sonidos, lo que hacía mucho más fácil identificar qué clip grabado era el misterioso pitido que estaba buscando.

There should be a button next to a recording for “This is the mystery beep” - then I can hit replay to see and then confirm it was the mystery beep if that’s the one I am looking for

Then the system can categorize noises in the future to see if they are likely that same mysterious beep and use that information to build a more accurate idea of where it is

En este punto me estaba acercando; tenía una idea sólida de dónde venía el pitido, pero ¿no sería genial si pudiera reposicionar a los oyentes alrededor de ese punto para obtener una ubicación aún más precisa?

I want a feature for this, I don’t want to have to restart each listening device etc, I want to be able to click a “Reposition the devices” button which lets me switch into repositioning, then I click “Repositioned” and it puts me into Rough mode and asks me to roughly locate them, then I do that and click, then it starts up again. The previous session can be read-only viewed through the app.

Y como tenía un dispositivo de repuesto, dije:

add a feature where the map includes a spot that is a suggestion for a location that it would be useful to add a listener at - based on data collected so far

Dándole oídos a Claude Code

Creo que la parte más interesante de este proyecto es que demostré que es posible Dale oídos a Claude Code.

Claude no tiene entrada de audio nativa (todavía), pero puede ejecutar código JavaScript y Python que puede analizar el audio capturado por un micrófono.

Le dije que ejecutara un servidor web con conexiones WebSocket a múltiples dispositivos de escucha, luego hice que ejecutara un micrófono WebAudio en esos dispositivos y los conectara para poder enviarles código JavaScript nuevo para ejecutar a través de ese WebSocket.

Entonces podría dejar a Claude en paz, solucionando el problema, consultando los registros de audio y reconfigurando sus oídos para ayudarlo a resolver el problema.

Recuerdo un truco similar del que escuché en GitHub Universe hace unas semanas, donde Martin Woodward me dijo que había estado depurando las computadoras GitHub Universe Badge conectándolas a una computadora a través de USB-C y luego apuntando una cámara web a su pantalla, para que su agente codificador pudiera saber si las actualizaciones estaban funcionando correctamente o no.

Descubrir formas de permitir que los agentes codificadores perciban el mundo que los rodea es muy divertido.

Source link

Posts Similares

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *