How the lab works
Last updated: 17 July 2026
International Morse mappings, PARIS-based WPM, Koch / Farnsworth options, Web Audio, optional light/vibrate, and Worker-side timing - spelled out so you know what the numbers mean.
Alphabet & mapping
Letters, digits, and common punctuation follow International Morse (ITU-style). Pretty Unicode dits/dahs and ASCII .- are both accepted and normalized. Word gaps use / by default. Chinese characters use standard Chinese Telegraph Code (Hanzi → 4-digit CTC → Morse digits), not pinyin.
American Railroad Morse is out of scope. If an old chart disagrees, you are probably on a different alphabet.
WPM and PARIS
Words per minute use the common PARIS standard: dit length ≈ 1200 / WPM milliseconds. Dah = 3× dit. Letter gap ≈ 3 dit units. Word gap ≈ 7 dit units (shown as / in text).
Pitch (Hz) changes the tone only - not the timing grid. Farnsworth keeps character speed high while stretching gaps so beginners can copy without slowing the Morse itself into mush.
Koch / Farnsworth trainer
The trainer introduces characters in Koch order and can apply Farnsworth spacing. Progress preferences may persist in localStorage on this device only - there is no cloud sync.
Audio, light, vibrate
Playback schedules Web Audio oscillators after your first Play click (browsers block autoplay). Flash and vibrate follow the same on/off schedule when enabled and when the platform allows. Stop cancels scheduled tones immediately. Reduced-motion preferences are respected for flash.
Workers & offline
Heavy timing builds run in a Web Worker when available so the UI stays responsive. Production may cache shell assets via a service worker for offline reopen; local development does not register a service worker.
Corrections
If a chart cell, timing constant, or prosign pattern looks wrong, tell us via Contact with the URL and a reproducible example. Mapping bugs are first-class defects.