Morse Code Decoder
Decode written Morse locally into readable text, check unknown groups and separators, and hear practice audio with adjustable character and spacing speeds.{{ summaryHeading }} {{ summaryValue }} {{ summaryLine }} {{ badge.label }} {{ badge.value }}
/ keeps word breaks easy to scan.Decoded text
{{ report.decoded_text || 'No characters remain under the selected unknown-token policy.' }}
Normalized Morse
{{ report.normalized_morse }}
| Position | Word | Morse | Decoded | Status | Copy |
|---|---|---|---|---|---|
| {{ row.message_position }} | {{ row.word_index }} | {{ row.morse }} | {{ row.decoded }} | {{ row.status }} |
{{ 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 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.
- Paste written Morse or load a text file. Common material uses spaces between letters and
/between words. - Set Letter separator and Word separator to the actual delimiters. The two values must be different and may use the keywords
space,tab, ornewline. - Choose whether unknown groups are replaced with one visible marker or skipped, then select the decoded letter case.
- 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.
- 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
| 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.
| 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.
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.
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:
- Recommendation ITU-R M.1677-1: International Morse code, International Telecommunication Union, October 2009.
- A Standard for Morse Timing Using the Farnsworth Technique, ARRL QEX, April 1990.