Decode Summary
{{ (decodeResult && decodeResult.total_time_sec ? decodeResult.total_time_sec.toFixed(2) : '0.00') }} s audio
{{ letters_decoded }} letters {{ word_count }} words {{ distinct_tokens }} distinct {{ dots }} ยท {{ dashes }} Unknown {{ unknown_count }} WPM {{ audio_wpm }} Farnsworth {{ audio_farnsworth_wpm }}
{{ decoded_text }}
Morse
Ignored {{ extraLinesIgnored }} extra line(s).

Field Value Copy
Characters {{ char_count }}
Words {{ word_count }}
Letters decoded {{ letters_decoded }}
Unknown tokens {{ unknown_count }}
Dots {{ dots }}
Dashes {{ dashes }}
Distinct tokens {{ distinct_tokens }}
Normalized Morse {{ normalized_morse }}
Decoded {{ decoded_text }}

        
:

Introduction:

Morse code is a timed alphabet. A short mark and a long mark carry the symbols, but spacing carries just as much meaning because the same marks can turn into different letters or whole words when the gaps change.

Written Morse is often easier to misread than it looks. A message copied from a radio log, study sheet, or handwritten note may already contain separator choices, punctuation shortcuts, or stray symbols that decide how the line should be grouped before any plain text appears.

A short on-mark for a dot, a longer on-mark for a dash, and progressively larger silent gaps for letters and words.

A written Morse decoder is most useful when you want to turn that structure back into normal text without losing the rhythm behind it. That matters for checking copied traffic, reviewing practice drills, comparing separator conventions, or confirming that a compact line of dots and dashes really says what you think it says.

The catch is that a readable sentence is only the first confidence check. Separator assumptions, unsupported groups, and omitted marks can still produce plausible output, so good Morse work always means reading the text and the structure together.

Technical Details:

International Morse code maps letters, digits, and punctuation to sequences of short and long elements. The built-in table here covers A to Z, 0 to 9, and common punctuation including ., ,, ?, ', !, /, (), &, :, ;, =, +, -, _, ", $, and @. Anything outside that set is not guessed. It stays an unknown group.

The underlying timing rules are simple even when a message looks busy. A dot is one unit, a dash is three, the gap inside one character is one, the gap between characters is three, and the gap between words is seven. Operators often express speed in words per minute by using the standard word PARIS as the timing reference.

Two Morse timelines with the same marks, where the lower row has wider spaces between characters and words to show Farnsworth timing.
u = 1.2WPM dot = u dash = 3u intra-character gap = u letter gap = 3uF word gap = 7uF uF = { 1.2F if 0<F<WPM u otherwise }

At 20 WPM, the dot unit is 0.06 seconds. When Farnsworth WPM stays at 0 or matches the main speed, the whole message uses that same unit family. When the Farnsworth value is lower, this decoder keeps dots, dashes, and intra-character spaces tied to the main speed and stretches only the inter-character and inter-word gaps. That matches the practical teaching idea behind Farnsworth timing even though training references sometimes derive the slower gap unit with a fuller PARIS-based formula.

The decode path is literal. Dot-like and dash-like Unicode marks are normalized first, tabs and non-breaking spaces are treated as plain spaces, and only the first non-blank line is kept. That line is split by the chosen word separator and letter separator, each group is looked up in the Morse table, and the resulting text is cased only after the lookup step is finished.

How the main outputs behave when separators or unknown groups are involved
Output What it really represents Common misread
Words The number of groups created by the current word separator. A surprising word count usually means the separator choice is wrong, not that Morse itself is ambiguous.
Letters decoded The number of token groups after letter splitting, including groups that later turn out to be unknown. It can be higher than the number of visible characters in the decoded text.
Normalized Morse A rebuilt line made only from recognized groups, using the chosen output separators. It is not a verbatim echo of everything you pasted.
Audio and WAV A synthetic timing model created from recognized groups plus lead, tail, WPM, and optional Farnsworth spacing. Audio length is not the duration of the raw paste when unknown groups were dropped.
Letter Frequency A to Z counts taken after case conversion. Digits and punctuation can decode correctly without adding bars to the chart.

For playback and export, the recognized signal is synthesized as a sine tone with configurable frequency, volume, lead silence, and tail silence. The downloadable WAV file is written as mono 16-bit PCM at 44.1 kHz with short edge ramps to keep clicks down.

Everyday Use & Decision Guide:

The most reliable first pass is simple: paste one line, leave Input letter separator as a single space, leave Input word separator as /, and keep Unknown policy on Replace. That gives you the easiest way to see where the parse breaks before you clean anything up.

  • If your source uses pipes, double slashes, or another custom divider, change the separator fields before you judge the output. A correct Morse line with the wrong separators can look completely wrong.
  • If the page warns that extra lines were ignored, rebuild the source into one line yourself. Only the first non-blank line is decoded.
  • If Unknown tokens is above 0 or Normalized Morse is shorter than the source you expected, stop there and fix the structure before copying the text out.
  • If a message is mostly digits or punctuation, a sparse Letter Frequency chart is normal. That chart is only an alphabet counter.

Once the parse is trustworthy, change Case mode and the output separators to match how you want the final text and normalized code to read. Skip is best used late in the process. It produces cleaner text, but it can also hide the fact that part of the message never mapped at all.

The Audio tab is useful when rhythm matters as much as text. Keep the same Morse line, hold the main Audio WPM steady, and lower Farnsworth WPM only when you want wider gaps for practice. Before you share or export anything, compare Decoded Text, Unknown tokens, Normalized Morse, and the summary audio time so the text and timing tell the same story.

Step-by-Step Guide:

  1. Paste Morse into the main field or load a plain-text file. If the source contains several non-blank lines, expect the decoder to keep only the first one.
  2. Set Input letter separator and Input word separator to match the source line before you interpret the text.
  3. Leave Unknown policy on Replace for the first pass and check Decoded Text, Unknown tokens, and Normalized Morse together.
  4. Adjust Case mode, Output letter separator, and Output word separator after the structure looks right, then review the full Decode Metrics tab.
  5. Open Letter Frequency if the message is mostly alphabetic text, and open Audio if you want to study pace, spacing, or playback. Tune Audio WPM, Farnsworth WPM, Frequency, Volume, Lead, and Tail there.
  6. Use the copy buttons or download actions only after the metrics and timing look consistent. The page can export table CSV, DOCX, chart images, JSON, and a WAV rendering of the recognized signal.

Interpreting Results:

Decoded Text is the headline result, but it should never stand alone. The safest read is to pair it with Unknown tokens and Normalized Morse. When all three agree with your expectation, the decode is usually solid enough for study, note cleanup, or practice playback.

  • Words depends entirely on the current word separator.
  • Letters decoded counts parsed token groups, not just successfully mapped characters.
  • Distinct tokens counts unique Morse groups, not unique decoded letters.
  • Dots and Dashes are counted from the parsed groups, including groups that later fail lookup.
  • Audio seconds includes lead silence, tail silence, and any slower gap spacing from Farnsworth mode.

The main false-confidence trap is a clean-looking sentence produced by partial data loss. If the text looks right but the normalized code shrank, the audio seems too short, or the unknown count is non-zero, treat the result as a draft decode until you fix the missing groups.

Worked Examples:

Standard separators, plain greeting

Paste .... . .-.. .-.. --- / .-- --- .-. .-.. -.. with the default separators. The decoder returns HELLO WORLD, reports 2 words, shows 0 unknown tokens, and rebuilds the same structure in Normalized Morse. This is the clean baseline for checking that your source uses ordinary spaces between letters and a slash between words.

Same message, slower copy rhythm

Keep that same Morse line, leave Audio WPM at 20, and set Farnsworth WPM to 8. The decoded text stays HELLO WORLD, but the summary audio time grows and the timeline shows longer flat silent stretches between characters and words. That is the expected outcome because the marks stay the same while the gaps widen.

Non-standard separators from a worksheet

Suppose the source is ....|.|.-..|.-..|---//.--|---|.-.|.-..|-... Set Input letter separator to | and Input word separator to //. The line now resolves cleanly to HELLO WORLD. If you leave the defaults in place, the message looks broken even though the Morse groups themselves are valid.

Unsupported group hidden by skip mode

Paste ... --- ... --.-.-. With Unknown policy on Replace, the text becomes SOS? and Unknown tokens rises to 1, which tells you the last group is not in the built-in table. Switch to Skip, and the text can collapse to SOS. That looks cleaner, but it is less honest unless you keep watching the unknown count.

FAQ:

Can it decode a recording or live microphone audio?

No. This decoder expects written dots and dashes. The audio features work in the opposite direction by turning recognized groups into a synthetic practice signal.

Why were some lines ignored when I loaded a file?

Only the first non-blank line is used. That keeps one decode run tied to one Morse line instead of silently merging a whole worksheet.

Why did the result disappear after I switched to Skip?

If every parsed group is unknown and you skip unknown groups, the decoded text becomes empty and the result panels no longer have anything to show. Switch back to Replace to expose the failing groups, then fix separators or source content.

Why does the audio get longer when the text stays the same?

That usually means Farnsworth WPM, Lead, or Tail changed. Those settings affect silence and spacing, not the decoded characters themselves.

Are my messages uploaded anywhere?

The decode logic, charts, playback, and WAV render all run in the browser here. The privacy caveat is the page URL: changed input and settings are mirrored into query parameters, so do not share the link if the message is sensitive.

Glossary:

Token
One Morse group between the current separators, such as .- or ...-.
WPM
Words per minute, the speed reference used to derive the base dot duration.
Farnsworth timing
A training style that keeps character rhythm fast while inserting longer spaces between characters and words.
Normalized Morse
The recognized groups rebuilt with the selected output separators.
Distinct token
A unique Morse group counted once no matter how many times it appears in the line.