If you've ever owned a radio-controlled wrist watch, you probably know how convenient it is to have a device that always shows the exact time without manual adjustment. These watches synchronize themselves with atomic time broadcasts, one of the most well-known of which is DCF77, a longwave time signal transmitted from Germany on a frequency of 77.5 kHz.
Unfortunately, for those of us living in places like Estonia, the DCF77 signal tends to be very weak or unreliable due to distance and geographical interference. That was exactly my experience after getting a radio-controlled clock. I quickly realized that it wasn’t going to sync reliably with the official signal.
Since version 1.1.0, the application supports the following time-signal formats:
- DCF77: German longwave time signal broadcast from Mainflingen, used mainly in Europe.
- JJY: Japanese time signal transmitted from two locations, covering Japan and nearby regions.
- WWVB: U.S. longwave time signal from Colorado, widely used in North America.
- BPC: Chinese time signal transmitted from Shangqiu, covering China and surrounding areas.
I looked into existing mobile apps that claim to generate DCF77-compatible signals by simulating the time code acoustically. While a few options were available, I found them limited in features or simply not very reliable in practice. That’s when I decided to build my own solution.
This project is a Java-based desktop application that can generate a time signal similar to DCF77, intended to be interpreted by radio-controlled clocks. Since 77.5 kHz is well beyond the capabilities of consumer-grade sound cards, the application uses an alternative approach: it generates an audio signal at a multiple of the original frequency, leveraging harmonics to simulate the real DCF77 broadcast. This way, the wrist watch's receiver may still lock on to the signal if placed near the audio source (like headphones or a speaker).
The result is a handy, free desktop utility that lets you synchronize your radio-controlled wrist watch without needing a strong over-the-air signal—particularly useful if you live in a region with poor DCF77 reception or want to test clock synchronization indoors.
The application is written in Java and requires Java 11 or later to be installed on your computer. For convenience, there are also build versions that come bundled with a compatible Java runtime, so you don't have to install Java separately if you don’t want to.
Full set of latest pre-built applications
If you are building it yourself from source, you will need to have Apache Maven and JDK 11+ installed. In this case, the command line to build the distributions will be:
-
just to build the project
mvn clean install
-
build with distribution packages (bundled JRE, installers, etc.)
mvn clean install -Ppublish,appimage
It runs as a standard desktop GUI application, offering a user-friendly interface where you can select key parameters for signal generation. These include:
- Signal waveform – This affects the harmonic profile and can influence how well your wrist watch picks up the generated signal.
- Carrier frequency – The audio carrier offered for the selected mode (a harmonic-related choice so the watch receiver can lock).
- Sample rate – The audio output's sampling frequency, which impacts the fidelity and quality of the harmonics.
- Mode — Switch between DCF77, JJY, WWVB, and BPC; each mode exposes its own carrier frequencies and uses the correct civil time zone for “live” time (unless you override it below).
- Settings → Time sources — Use the local clock or an NTP pool/server; the window title can show which NTP host is active. Pick a reliable source for stable encoding.
- Settings → Output device — Choose the audio output line used for playback. Open the submenu to refresh the list of mixers/devices.
- Settings → DST — Where the protocol carries daylight-saving flags (DCF77, WWVB): DST auto detect follows zone rules, or turn auto off and Force DST on/off for testing.
- Right-hand toggles (beside waveform / sample rate / carrier):
- Custom time (
[): pick a fixed date and time for encoding instead of the live clock (useful for tests). - UTC: use the same clock instant but expressed in UTC for display and minute boundaries (pairs with custom time if you need a fixed UTC moment).
- Time shift (➕/➖): apply a constant offset up to ±24 hours to the time used for encoding and for File → Save as….
- Custom time (
- File → Save as… — Write a WAV file of 1–60 consecutive encoded minutes with the same waveform, carrier, sample rate, and time options as live playback.
- Help — Opens the built-in HTML guide (also covers UTC, time shift, and custom time in more detail).
- Help → About — Shows the application version from the build (not a hard-coded string).
Press the play button to start live generation and again to stop. While playing, some settings are locked until you stop. For output routing you can use Settings → Output device or your OS sound preferences.
More detail on optional time controls is in the in-app Help; the same topics are summarized in the repository under
dcf77-soundwave-app/src/main/resources/help/help.html.