RealMorse!
DJ0MZ
Callsign Trainer
V06 2026-02-03
Select mode or | Speaker Idle

Message Types

Callsign grammar is enforced in generated messages
(none)
Tip: click Start once to allow audio, then use Generate new and Repeat.
dur: — wpm: — seed: — ch: —
Propagation Condition Mode
Sets Channel fading + path loss + noise + QRM. TX/RX controls are not changed.

Model Parameter Mode


Realistic model: Transmitter → Channel → Receiver
Pitch = TX tone frequency. TX FM includes drift+chirp. Channel AM includes QSB/flutter; Channel FM includes satellite Doppler. Noise floor and signal attenuation are Channel. Receiver contains filter + AGC only.

Transmitter (CW generation)
Keying & timing
Envelope & tone
FM & instability (TX)
Channel (propagation & interference)
AM fading
Path loss & noise floor
Noise and static are channel-origin additive components entering the receiver input.
QRM (interference)
CW QRM is keyed too
Satellite Doppler (FM)
Receiver (filter & AGC)
IF / CW filter
AGC
Fast release can make hiss rise in gaps; slow release keeps gain reduced between words (quieter gaps).
Seed (deterministic playback)
Same seed + same settings ⇒ identical audio. Empty seed ⇒ new random seed on Generate.

Real Morse! — User Manual

Real Morse! is a model-based CW trainer. It generates realistic Morse audio for training learners by modeling both (1) transmitter/keying behavior and (2) radio channel effects such as amplitude fading (QSB), noise (QRN), and other distortions, plus (optionally) frequency effects such as drift and Doppler. The goal is practice that sounds closer to real on-air CW than “clean” sidetone generators.


Quick Start

  1. Enable audio: click Start once. Browsers require a user gesture before audio can play.
  2. Choose your mode:
    • Condx = quick “band conditions” presets (signal + QSB + noise).
    • Params = full control of transmitter / channel / receiver parameters.
  3. Pick what is sent: in Message, choose Source (Templates / Random callsigns / Custom text).
  4. Click Generate new to create a fresh message and a new timing plan. Use Repeat to replay the last generated message exactly.
  5. If you want a real copying exercise, turn off Reveal transcript. Turn it on only to check your copy.

UI Overview

The UI is organized as a radio-style audio chain: TX → Channel → RX. Most sections are implemented as nested <details> blocks, so you can collapse everything and focus on one layer at a time.

Top Bar

Main Panels

A) Message B) Conditions (Condx mode)

When Condx mode is active, the full parameter sliders are ignored and the radio buttons apply a small set of “band condition” values (primarily signal strength, QSB depth/rate, and noise floor). This gives a fast, realistic practice ladder without “engineering the radio.”

C) Parameters (Params mode)

In Params mode, the full transmitter/channel/receiver model is enabled. The layout is hierarchical:


JavaScript Implementation (Conceptual)

The app is a single-file WebAudio application built from a few clear layers:

Audio model at a glance
  • Signal path: Oscillator → Keying envelope → Channel AM (QSB/flutter) → RX filter → Master.
  • Noise path: Noise source → Color shaping → RX filter coloration → Mixed with signal (with optional “signal masks noise” behavior in Condx).
  • Scheduling: keying plan is rendered as gain ramps to avoid clicks; fading is applied via low-rate modulators.

Other Morse Apps (for comparison)


Glossary

WPM
Words per minute. Element speed for dits/dahs (character speed).
Farnsworth
Increases spacing between characters/words while keeping character elements at full speed.
Dit / Dah
The short and long Morse elements. Traditional dah length is ~3× a dit.
Weight
Bias that slightly lengthens or shortens keyed elements overall (a “heavier” or “lighter” fist).
Jitter
Random timing variation of elements and/or gaps; makes keying less machine-perfect.
Pitch
Transmitted audio tone frequency (sidetone-like pitch used for training).
Attack / Release
Envelope ramp times at key-down and key-up; prevents clicks and shapes keying “softness”.
QSB
Slow amplitude fading due to propagation (signal “washes in and out”).
Flutter
Faster, smaller amplitude variation than QSB (a “tremble” of the signal).
Drift
Slow frequency change over time (TX instability or tuning drift).
Doppler
Frequency shift due to relative motion; in ham practice often associated with satellites.
QRN
Atmospheric noise / band noise floor (background noise).
QRM
Interference from other stations (another keyed CW signal or multiple signals).
Bandpass Q
Receiver filter “sharpness”. Higher Q is narrower and changes the audio “color” of signal/noise.
AGC
Automatic gain control. It adjusts gain over time; fast attack can suppress peaks, slow release can keep noise down between elements (or the opposite, depending on settings).
Seed
Text value used to generate reproducible “random” messages and channel variation.


Condx
Condition preset mode. Ignores most parameter sliders and instead applies a small set of “band condition” presets (signal strength, noise floor, QSB depth/rate) for fast realistic practice.
Params
Parameter mode. Enables full control of the transmitter / channel / receiver model using the sliders and checkboxes in the right panel.
Start
Starts playback of the current message plan. Also serves as the initial “audio unlock” gesture required by browsers before sound can play.
Stop
Stops playback immediately and cancels any active Repeat n cycle.
Generate new
Creates a new message and builds a fresh timing plan. If no seed is provided, a new random seed is used.
Repeat
Replays the last generated message (deterministically, so practice is consistent).
Repeat n
Plays n iterations in a row (1–100). Each iteration generates a new random seed, produces a new message (with new callsigns), builds a new plan, and plays it. The input field shows a countdown during the cycle, then returns to its original value at the end.
Speaker
Label for the master output volume control (the slider next to it). This is the overall loudness of the app relative to the current system setting of the speaker.
Idle / Playing / Stopped
Playback status indicator. Idle means nothing is currently playing, Playing means audio is active, and Stopped means playback was manually stopped.
Help!
Jumps to the in-page user manual section.