{{ summaryHeading }} {{ summaryValue }} {{ summaryLine }} {{ badge.label }} {{ badge.value }}

Written Morse decoding inputs
Use the configured letter and word separators. Common written Morse uses spaces between letters and / between words.
{{ fileName }}
{{ fileStatus || 'Drop one TXT file onto the editor.' }}
{{ sourceError }}
Use the keyword space for ordinary written Morse, or tab/newline for those exact separators.
Slash (/) is the common written convention. The separator must differ from the letter separator.
Malformed tokens containing characters other than dots and dashes are rejected instead of silently skipped.
The default question mark preserves the location of an unknown group.
Uppercase matches conventional radiotelegraphy logs.
A single space is the neutral default.
The default / keeps word breaks easy to scan.
{{ audio_wpm }} WPM
Sets dot duration using the PARIS convention: 1.2 ÷ WPM seconds.
WPM
{{ Number(audio_farnsworth_wpm) === 0 ? 'Off' : audio_farnsworth_wpm + ' WPM' }}
Use 0 for standard spacing, or a value no higher than character speed to widen letter and word gaps.
WPM
{{ audio_frequency_hz }} Hz
Try 500–800 Hz for a comfortable practice tone.
Hz
{{ audio_volume_percent }}%
Start low when using headphones. Volume changes playback and WAV amplitude only.
The default 0.20 seconds leaves a clean start.
s
The default 0.20 seconds leaves a clean finish.
s
{{ messageExportStatus }}

Decoded text

{{ report.decoded_text || 'No characters remain under the selected unknown-token policy.' }}

Normalized Morse

{{ report.normalized_morse }}
{{ ledgerExportStatus }}
PositionWordMorseDecodedStatusCopy
{{ row.message_position }}{{ row.word_index }}{{ row.morse }}{{ row.decoded }}{{ row.status }}
{{ chartExportStatus }}
Duration{{ report.total_seconds.toFixed(2) }} s
Character speed{{ audio_wpm }} WPM
Spacing{{ Number(audio_farnsworth_wpm) === 0 ? 'Standard' : audio_farnsworth_wpm + ' WPM' }}
Tone{{ audio_frequency_hz }} Hz

{{ audioStatus }}

Morse code represents characters with groups of short and long signals. The marks are only half of the message. Boundaries between marks, letters, and words determine where one code group ends and the next begins. In sound or light those boundaries are pauses; in written Morse they become spaces, slashes, newlines, or another agreed separator.

A written decoder reverses a codebook lookup. For example, ... maps to S and --- maps to O. The lookup is deterministic once the groups are correct, but damaged spacing can produce valid-looking groups with the wrong meaning. Reading .... . as one token instead of two changes H E into an unknown sequence.

Signal timing and its written Morse equivalent
Signal part Standard duration Typical written form
Dot 1 unit .
Dash 3 units -
Gap inside a character 1 unit No printed separator inside a token
Gap between characters 3 units Often one space
Gap between words 7 units Often a slash

International Morse includes letters, digits, and a defined set of punctuation. Practice material may also contain procedural signs, language-specific characters, or copying errors outside a decoder's supported codebook. Replacing an unknown group with a visible marker preserves its position for review; skipping it makes the text smoother but can hide where information was lost.

Audio practice adds another distinction. Character speed controls the rhythm inside each character. A lower spacing speed lengthens the gaps between characters and words while keeping the marks recognizable at the faster rhythm. This is useful for learning, but generated audio cannot reconstruct timing from an original radio transmission when only written dots, dashes, and separators remain.

How to Use This Tool:

Match the separator convention used by the message before judging any unknown groups. Decoding and practice-audio generation stay in the browser.

  1. Paste written Morse or load a text file. Common material uses spaces between letters and / between words.
  2. Set Letter separator and Word separator to the actual delimiters. The two values must be different and may use the keywords space, tab, or newline.
  3. Choose whether unknown groups are replaced with one visible marker or skipped, then select the decoded letter case.
  4. Review the decoded message and token ledger. Change the separators first when many ordinary-looking groups are unknown or words split in the wrong places.
  5. Adjust character speed, spacing speed, frequency, volume, and lead or tail silence only when generating practice audio.

Interpreting Results:

The decoded text is trustworthy only to the extent that token boundaries match the original message. The token ledger shows each parsed group, its character position, decoded value, and whether it was decoded, replaced, or skipped. An unknown count above zero is a review cue, not a guess at the intended letters.

The normalized Morse output rewrites the parsed groups with the selected output separators. It can make spacing consistent, but it does not repair an incorrectly split message. The signal profile counts marks and gaps after parsing, so those totals also change when separator settings change.

Treat the audio duration as the duration of the generated practice sequence. It includes configured lead and tail silence and the current character and spacing speeds; it is not an estimate of how long the original sender took.

Technical Details:

Decoding operates on token groups rather than individual Unicode characters. Common dot-like glyphs are normalized to ., and several dash-like glyphs—including an underscore—are normalized to -. After the message is split into words and character tokens, every token must contain only dots and dashes before codebook lookup begins.

Transformation Core

Morse decoding transformation stages
Stage Rule Example state
Normalize marks Convert supported dot and dash variants and normalize line endings. ••• ——— ••• becomes ... --- ...
Split words Use the configured word separator; line breaks act as word separators unless newline is already an explicit separator. ... --- ... / .---- becomes two words
Split characters Use the configured letter separator and remove empty groups. ..., ---, ...
Lookup Map each complete token through the supported codebook. S, O, S
Render Apply the unknown-token policy and requested output case, then join decoded words with spaces. SOS 1

Codebook Core

The supported map covers A to Z, 0 to 9, É, and common punctuation. The representative entries below show how token length and order both matter.

Representative Morse codebook mappings
Character Morse Character Morse
A.-N-.
S...O---
1.----0-----
?..--../-..-.
@.--.-.É..-..

Formula Core

The PARIS timing convention gives the character dot duration from character speed w in words per minute.

d=1.2w

A dot lasts d seconds, a dash lasts 3d, and the gap between marks inside one character lasts d. When spacing speed s is greater than zero and lower than character speed, character and word gaps use a separate unit g.

g= 1.2swhen 0 < s < w dwhen spacing speed is disabled

Character gaps last 3g and word gaps last 7g. Total practice duration is the sum of every mark and gap plus the selected lead and tail silence; the displayed duration is not rounded before the audio sequence is built.

Input is limited to 20,000 characters and 2,000 parsed tokens. Character speed is 1 to 60 WPM, spacing speed is 0 to 60 WPM and cannot exceed character speed, frequency is 100 to 1,200 Hz, and lead or tail silence is 0 to 3 seconds.

Worked Examples:

A message with a number

With spaces between letters and / between words, ... --- ... / .---- becomes SOS 1. The ledger contains four decoded tokens and zero unknown groups, while normalized Morse retains the two-word structure.

Wrong separator produces unknown groups

For source text that uses | between letters, leaving the letter separator as a space keeps several characters inside one token. The malformed group is rejected if it contains the pipe, or becomes unknown when the copied convention produces a valid but unmapped sequence. Set the letter separator to | and review the ledger again.

References: