Link: chuanjin-su.github.io/web-multiband/
A browser-based tool to synchronize radio-controlled watches (such as Casio Multiband watches and Citizen Atomic Timekeeping watches) by simulating longwave atomic clock radio signals directly through your computer or smartphone speakers.
This simulator supports the major global time signal stations:
- BPC (China): 68.5 kHz (17.125 kHz sawtooth, 4th harmonic)
- WWVB (USA): 60 kHz (20 kHz square wave, 3rd harmonic)
- DCF77 (Germany/Europe): 77.5 kHz (15.5 kHz square, 5th harmonic)
- MSF (UK): 60 kHz (20 kHz square wave, 3rd harmonic)
- JJY (Japan): 40 kHz (13.333 kHz square wave, 3rd harmonic)
Atomic clocks require high-frequency radio waves (e.g., 60 kHz to 77.5 kHz) to synchronize. However, standard computer sound cards cannot output audio above ~22 kHz due to the Nyquist limit.
To bypass this hardware limitation, this simulator relies on audio clipping and harmonics:
- The Web Audio API generates a specific lower-frequency base tone (e.g., a 20 kHz square wave or 15.5 kHz sawtooth).
- By maximizing your device's volume, the physical audio amplifier is intentionally overdriven.
- This overdriving "clips" the waveform, turning it into a square-like wave that physically emits high-energy electromagnetic harmonics (3rd, 4th, or 5th order).
- These electromagnetic harmonics hit the exact target frequencies (e.g.,
$15.5 \text{ kHz} \times 5 = 77.5 \text{ kHz}$ ) required by your watch's internal antenna.
The simulator needs to know the correct time to encode into the signal. You can pick the source in the time card (below the UTC/DST badges):
- System time (default) — uses your device's clock directly. Verify it against time.is or an NTP server such as pool.ntp.org first.
- NTP synced — the page fetches time from NTP-synced HTTPS endpoints and estimates your clock's offset with an NTP-style round-trip algorithm: five samples per endpoint, the minimum-RTT sample wins, and endpoints are tried in order (Cloudflare, timeapi.io, WorldTimeAPI, Akamai, jsDelivr, unpkg) until one answers. The offset and error bound are shown in the time card, and the clock re-syncs every 10 minutes, whenever the tab becomes visible again, or manually via Resync. If the network is unreachable, it falls back to system time automatically. Typically accurate to ~±100 ms — plenty for radio-controlled watches, which decode whole seconds.
Browsers cannot send raw NTP (UDP) packets, so the "NTP synced" mode queries HTTPS endpoints that are themselves NTP-disciplined. This is typically accurate to a few tens of milliseconds — well within what a radio-controlled watch needs to decode a frame.
- Select a Time Source: Choose NTP synced to let the page pull accurate time from the network, or keep System time and make sure your device's clock is correct (check time.is or sync against an NTP server).
- Select Protocol: Choose the time signal your specific watch expects to receive.
- Maximize Volume: Turn your computer or smartphone volume up to 100%. This is strictly required to induce the clipping distortion that generates the necessary radio harmonics.
- Position the Watch: Place your radio-controlled watch as close to the speaker or headphones as possible.
- Transmit: Press Start Transmitting and put your watch into its manual receive mode. Wait several minutes, as these protocols transmit only one data frame per minute.
This project is tested limitedly on a MacBook Pro (2021) with a Casio G-Shock GWM5610 and a Casio Pro Trek PRW-61FC. Results may vary based on your device's hardware and environmental conditions.
| Signal | GWM5610 | PRW-61FC |
|---|---|---|
| WWVB | ✅ | ✅ |
| BPC | ✅ | ✅ |
| DCF77 | ✅ | ✅ |
| MSF | ✅ | ✅ |
| JJY | ✅ | ✅ |
In addition, since the author only relies on WWVB, the other protocols may not be fully tested. Feedback and contributions are very welcome to improve the simulator's accuracy and usability!
- This simulator is designed for educational and experimental purposes. Results may vary based on your device's hardware and environmental conditions.
- This tool is heavily inspired on the open-source project
web-jjy.
