GPS Whistle
Whistle your location into any recording. It survives compression and can be decoded later.
Start your recorder, hold this device near it, turn the volume up, and press the button. It plays a soft chord, a short tune and a run of quick chords, twice: about 11 seconds, or 14 to 17 with an author name.
Open a recording (voice memo, field recording, video) to find any GPS Whistle in it. Nothing is uploaded; decoding happens on this device.
How it works, and what it proves
The page encodes a 40-byte frame as a run of chords in G major: one chord of four notes for each byte, 48 thousandths of a second each. A tiny melody that spells G‑P‑S‑W in notes (G–B–E–B, by the French method Ravel and Debussy used to spell HAYDN) comes before the chords, and the same melody backwards comes after them. A decoder finds the chords by the melody, which also tells it how fast the recording is running. Reed–Solomon error correction and a CRC-32 check protect the frame. It carries the location on a ≈19 m grid (or snapped to a fixed ≈5 km grid in Coarse mode, or nothing in Off), the reported accuracy, a UUIDv7 (which includes the time), optionally 8 bytes of the current drand randomness beacon, and optionally an author name (up to 48 bytes of UTF-8, which lengthens the frame to 64 or 88 bytes and adds 1.5 to 3 seconds to each play). It plays twice.
In testing, it decoded through AAC, MP3 and Opus compression, generation loss, resampling down to 16 kHz, 8-bit audio, heavy noise, room reverb, clipping, automatic gain control, and recorders whose clocks run up to 4.5% fast or slow. In real rooms it has been read from a recorder 3 m from the speaker.
- Private by default. Your location never leaves this device. Fetching drand sends nothing about you. Timestamping sends only a SHA-256 hash of the record.
- Time window. Your device’s clock can say anything, so the claimed time alone proves nothing. The drand value is a public random number that nobody could know in advance; having it in the whistle proves the whistle, and any recording containing it, was made no earlier than that moment. It’s like holding up today’s newspaper in a photo. It shows the recording is fresh, not prepared in advance. An OpenTimestamps proof of the saved record (or of the recording file itself) proves it existed no later than a Bitcoin block. Together they pin the recording inside a time window.
- Author: the name is a notice, shown with ©, not a signature. Anyone can type a name.
- What it doesn’t prove: that anyone was actually there. Browser locations can be faked, and anyone can play a whistle into any recording. It’s provenance metadata that’s hard to strip, not proof of presence.