Morse Code Generator and Translator with True CW Timing
Type a message and the morse code generator keys it in dits and dahs with exact ITU spacing, then plays it as a tone, flashes it on screen or saves a WAV. Paste Morse instead and it reads it back to text, prosigns included.
Morse Code Generator
Speed and tone
- Dot
- 60 ms
- Dash
- 180 ms
- Letter gap
- 180 ms
- Word gap
- 420 ms
- Total
- 0 s
Practice key: tap your own Morse
Morse code chart (tap a sign to hear it)
Letters (ITU)
Figures
Punctuation (ITU)
× is sent as X. ITU has no %: 2% is sent 2-0/0, and 1 3/4 is sent 1-3/4.
Not in ITU (common extensions)
Prosigns (sent as one character, no letter gaps)
AR = +, BT = =, KN = (, AS = & share a code; the decoder shows the sign.
A good morse code generator should sound like a well-adjusted keyer, not like a beeping toy: dits and dahs in a clean 1 to 3 ratio, a one-unit gap inside each letter, three units between letters and seven between words. That spacing is what lets a trained ear copy the code, and it is the part most online translators get wrong. Type plain text and you get Morse with one space between letters and a slash between words; paste Morse and you get text back.
Everything runs in your browser. Your message is never uploaded, and a share link keeps the message and your settings in the part of the address after the #, which browsers do not send to any server.
Getting a clean signal out of the Morse code generator
- Type or paste. Letters, figures and ITU punctuation encode directly. If you paste dots and dashes into the text box, the generator recognises them as Morse and decodes instead of encoding the dots as full stops.
- Set the character speed. This is how fast each letter is keyed, in words per minute. For learning I keep it at 18–20 WPM so every letter has the rhythm it will have on the air.
- Slow the gaps, not the letters. Set the effective speed lower than the character speed and the generator stretches only the silences (Farnsworth spacing). A live readout shows the dot, dash, letter-gap and word-gap lengths in milliseconds and the total running time.
- Pick a pitch and volume. Pitch runs from 300 to 1200 Hz and starts at 600, which is easy on the ears for long sessions. Every element gets a 5 ms soft rise and fall, so the tone does not click, in the live sound and in the WAV.
- Choose the output. Sound, Light and Vibrate are three switches you can combine: a bright lamp you can take full-screen, and vibration on phones that support it. A paper tape drawn to scale highlights the letter and element being played, Pause really pauses, and Repeat loops after a word gap. Save a WAV of up to ten minutes for a video, an escape-room clue or a gift.
- Choose how accents are sent. Extended (the default) has codes for Ä, Ö, Ü, Ñ, Ç, È, À and ß; ITU strict spells them out. More on that under the chart.
- Practise sending. The practice key works like a straight key: press it with a finger or the mouse, or focus it and hold the space bar. A press shorter than two units is a dit, a longer one a dah; two units of silence end the letter and five end the word, all measured at your character speed. It shows the dits and dahs and the letters you actually keyed, and one button sends them to the Text box.
Morse code alphabet chart
These are the codes from Recommendation ITU-R M.1677-1, the international standard. Short letters belong to frequent letters: E is a single dit, T a single dah. Every figure is exactly five elements, which makes numbers the easiest group to learn. The chart inside the tool holds 73 signs: letters, figures, ITU punctuation, the non-ITU extras and the prosigns. Tap a sign to hear it, or print the chart on its own.
| Letter | Code | Letter | Code |
|---|---|---|---|
| A | .- | N | -. |
| B | -... | O | --- |
| C | -.-. | P | .--. |
| D | -.. | Q | --.- |
| E | . | R | .-. |
| F | ..-. | S | ... |
| G | --. | T | - |
| H | .... | U | ..- |
| I | .. | V | ...- |
| J | .--- | W | .-- |
| K | -.- | X | -..- |
| L | .-.. | Y | -.-- |
| M | -- | Z | --.. |
| Figure | Code | Sign | Code |
|---|---|---|---|
| 0 | ----- | . | .-.-.- |
| 1 | .---- | , | --..-- |
| 2 | ..--- | : | ---... |
| 3 | ...-- | ? | ..--.. |
| 4 | ....- | ' | .----. |
| 5 | ..... | - | -....- |
| 6 | -.... | / | -..-. |
| 7 | --... | ( | -.--. |
| 8 | ---.. | ) | -.--.- |
| 9 | ----. | " | .-..-. |
| = | -...- | ||
| + | .-.-. | ||
| @ | .--.-. | ||
| × | -..- |
The only accented letter ITU defines is É ..-... Common extensions, which many operators use but the standard does not include: Ä .-.- · Ö ---. · Ü ..-- · Ñ --.-- · Ç -.-.. · È .-..- · À .--.- · ß ...--.. · CH ----. Non-ITU signs: ! -.-.-- · & .-... · ; -.-.-. · $ ...-..- · _ ..--.-. A receiving station may not know them, so in ITU-strict mode the generator spells Ä, Ö and Ü as AE, OE and UE and ß as SS, and sends other accented letters as the plain letter. In extended mode it sends the codes listed above. A typed CH is still sent as C and H; the code ---- is read as CH only when decoding in extended mode.
Timing: units, PARIS and what 20 WPM means
All Morse timing is counted in one unit, the length of a dit. A dah is 3 units, the gap between elements of one letter is 1, between letters 3 and between words 7. Speed is measured with the word PARIS: its dits, dahs and gaps, plus one word gap, add up to exactly 50 units (PARIS timing explained). Twenty words a minute means 1,000 units a minute, so one unit lasts 60 ms.
| Speed | Dot (1 unit) | Dah (3 units) | Word gap (7 units) |
|---|---|---|---|
| 5 WPM | 240 ms | 720 ms | 1680 ms |
| 10 WPM | 120 ms | 360 ms | 840 ms |
| 13 WPM | 92.3 ms | 276.9 ms | 646.2 ms |
| 15 WPM | 80 ms | 240 ms | 560 ms |
| 20 WPM | 60 ms | 180 ms | 420 ms |
| 25 WPM | 48 ms | 144 ms | 336 ms |
Plain text runs close to PARIS. Random five-letter code groups, the kind used in exams and contest practice, are heavier on long letters, so some trainers time them with CODEX, a 60-unit word (Morse code overview). If two tools disagree slightly about the speed of the same group, that is usually why.
Farnsworth spacing: fast letters, slow gaps
A beginner who learns letters at 5 WPM learns to count dots. At 20 WPM counting is impossible and you have to hear each letter as one sound, which is the skill you actually need. Farnsworth spacing keeps the letters at the character speed c and stretches the gaps until the overall speed drops to s. The formula is from the ARRL standard for Farnsworth timing:
At c = 18 and s = 5: ta = (1080 − 186) ÷ 90 = 9.933 s per PARIS word, so the letter gap is 1568.4 ms and the word gap 3659.6 ms, while the dot stays at 66.7 ms. At c = 20 and s = 10 the letter gap is 653.7 ms and the word gap 1525.3 ms. In both cases PARIS plus its word gap lasts exactly 60 ÷ s seconds: 12.0 s and 6.0 s.
My advice: start with character speed 18–20 and an effective speed you can copy without stress, then raise the effective speed one step at a time. Never lower the character speed to make things easier. The guide to learning Morse by sound sets out a daily plan with the Koch method.
Worked examples, unit by unit
SOS
As three letters: ... --- .... Elements 3 + 9 + 3 = 15 units, element gaps 2 + 2 + 2 = 6, two letter gaps = 6, total 27 units, or 1.62 s at 20 WPM. On the air, SOS is a prosign keyed as one character, ...---...: the two letter gaps shrink to one unit each, so it is 23 units, 1.38 s at 20 WPM. For a light signal I would drop to 5 WPM: a 240 ms dot, and the prosign takes 23 × 0.24 = 5.52 s. Repeat it with a word gap between each one.
I love you
.. / .-.. --- ...- . / -.-- --- ..-. Elements and the gaps inside letters add up to 64 units, five letter gaps add 15, two word gaps add 14: 93 units. That is 5.58 s at 20 WPM and 22.32 s at 5 WPM.
Café and Müller
Café is -.-. .- ..-. ..-.., because É is in the ITU table. Müller has no ITU Ü, so strict mode sends MUELLER: -- ..- . .-.. .-.. . .-., 59 units, 3.54 s at 20 WPM. In extended mode the Ü becomes ..-- and the word shrinks to -- ..-- .-.. .-.. . .-..
Hello World with Farnsworth
.... . .-.. .-.. --- / .-- --- .-. .-.. -.. is 111 units, 6.66 s at a plain 20 WPM. At character 20 / effective 10 it splits into 80 units of elements and in-letter gaps at 60 ms (4.80 s), 8 letter gaps of 653.7 ms (5.23 s) and one word gap of 1525.3 ms: 11.55 s in total.
2%
There is no percent sign in Morse. ITU says to send the fraction 0/0 joined to the number by a hyphen, so 2% is 2-0/0: ..--- -....- ----- -..-. -----. Writing it as 20/0 is a common mistake that the receiver reads as twenty over zero. When you type %, the generator lists it as not in Morse and offers the ITU spelling. Fractions and other signs are covered in the guide to numbers and punctuation.
Prosigns you will meet
A prosign is two letters keyed as one character, with no letter gap. Type it in angle brackets, such as <SK>, and the generator joins the letters.
| Prosign | Code | Meaning |
|---|---|---|
| <SOS> | ...---... | distress, sent as one character |
| <AR> | .-.-. | end of message (same code as +) |
| <SK> | ...-.- | end of contact / ITU end of work |
| <BT> | -...- | break / new paragraph (same code as =) |
| <KN> | -.--. | go ahead, named station only (same code as ( ) |
| <AS> | .-... | wait (ITU wait; same code as &) |
| <KA> | -.-.- | ITU starting signal |
| <SN> | ...-. | ITU understood (also written VE) |
| <HH> | ........ | ITU error, eight dots |
| K | -.- | ITU invitation to transmit |
Several prosigns share a code with punctuation: AR is the same as +, BT as =, KN as (, AS as &. When decoding, the generator shows the punctuation sign for these and the prosign only for codes that have no other meaning, such as ...---... or the eight-dot error ......... The guide to SOS and prosigns explains each one and how to signal SOS with a torch or a whistle.
Reading Morse back to text
- Separate letters with one space and words with a slash.
.... .. / - .... . .-. .is HI THERE. Two or more spaces and a vertical bar also count as a word break, but a single space never does. - Pasting Morse into the Text box works too. The generator sees that it is Morse, decodes it and says so in a short note instead of encoding your dots as full stops. Prosigns decode as well:
...---...reads as<SOS>and...-.-as<SK>. - Look-alike symbols are fine. Bullets (•), middle dots (·) and the long dashes from charts and fonts (−, –, —, _) are read as dits and dahs, so
•−decodes to A. - # marks a group with no meaning. The group is listed under the Morse box so you can see where it is. Usually two letters have run together because a space is missing:
.-.-means Ä only in extended mode, while.- .-is AA.
What sits under the key
The engine turns your text into one list of timed events, tone on or off with a duration in units, and that same list drives the sound, the flash, the vibration, the highlight and the WAV file. One list for every output means a word gap is always 7 units, never 7 in the sound and 9 in the file, and a line break plays as a word gap. The unit is 1200 ÷ character WPM ms. Pause follows the audio clock, so a paused message stays paused however long you wait. When the effective speed is lower, the letter and word gaps come from the ARRL Farnsworth formula above. No gap is added after the last element, so durations are from the start of the first dit to the end of the last one. Codes and spellings follow ITU-R M.1677-1; extended letters and signs follow the common tables and are marked non-ITU. WAV export stays under ten minutes. The paper tape draws up to 1,500 characters and says so when it stops early; sound, light and WAV always play the whole message. A share link holds at most 2,000 characters.
These control cases are worked out by hand and checked again in Python. The tool's test page must reproduce them before a change goes live:
| Input | Expected |
|---|---|
| Text SOS, 20 WPM | ... --- ..., 27 units, 1.62 s |
| Text Hello World, 20 WPM | .... . .-.. .-.. --- / .-- --- .-. .-.. -.., 111 units, 6.66 s |
| Text A B, 20 WPM | .- / -..., 21 units, 1.26 s (word gap 420 ms) |
| Text <SOS>, 13 WPM | ...---..., 23 units, 2.12 s (dot 92.3 ms) |
Decode •−, ._, .... .. - .... . .-. ., ...---..., ...-.- | A, A, HI THERE, <SOS>, <SK> |
| Café; Müller strict / extended | -.-. .- ..-. ..-..; -- ..- . .-.. .-.. . .-. (3.54 s) / -- ..-- .-.. .-.. . .-. |
| Farnsworth c 18, s 5 | dot 66.7 ms, letter gap 1568.4 ms, word gap 3659.6 ms, PARIS 12.0 s |
| Farnsworth c 20, s 10 | dot 60 ms, letter gap 653.7 ms, word gap 1525.3 ms, PARIS 6.0 s; Hello World 11.55 s |
| PARIS plus its word gap, 20 WPM | 50 units, 3.000 s |
| Text 2% after the ITU spelling button | 2-0/0, ..--- -....- ----- -..-. ----- |
FAQ
How do you write SOS in Morse code?
SOS is ... --- ..., and on the air it is sent as one prosign, ...---..., with no gaps between the letters. At 20 WPM it takes 1.38 s; repeat it with a word gap between each one.
How long is a dot at 20 WPM?
One dot is 1200 ÷ 20 = 60 ms. A dah is 180 ms, the letter gap 180 ms and the word gap 420 ms.
What is Farnsworth timing?
The letters are keyed at a fast character speed and only the gaps between letters and words are stretched to give a lower overall speed. At character 18 and effective 5 WPM the letter gap is about 1.57 s and the word gap about 3.66 s.
Is there Morse code for ä, ö, ü or ñ?
Not in the ITU standard, which has only é (..-..). Common extensions are Ä .-.-, Ö ---., Ü ..-- and Ñ --.--; for a station that may not know them, write AE, OE, UE and N.
How do I signal SOS with a flashlight?
Flash a short pulse for each dit and a pulse three times as long for each dah, with a one-unit dark gap between them, so the nine elements run together (...---...). About 240 ms per dot (5 WPM) is easy to read at a distance. Call your local emergency number first if you can.
How long does it take to learn Morse code?
It depends mostly on how regularly you practise. Short daily sessions by sound, with Koch's method and Farnsworth spacing, work far better than occasional long ones or memorising a chart.