How the Morse code translator works
Both boxes are live. Type in Text and the Morse appears as you go; paste into Morse code and it is decoded back to text. Letters are separated by a single space and words by a slash (or three spaces, if you prefer — pick the style under the player). When decoding, the translator is forgiving: it accepts full stops, middle dots or bullets as dots, and hyphens, minus signs, en dashes or underscores as dashes, and it treats /, | or a double space as a word break. New lines are kept as new lines.
Nothing is thrown away quietly. A character that has no Morse equivalent — an emoji, most symbols, a Chinese character — is skipped and listed underneath so you know it was dropped. Accented letters with a recognised code are sent with it: Å and À share .--.-, Ä, Æ and Ą share .-.-, Ö, Ó and Ø share ---., and Ł, Ś, Ż, Ź, Ð, Þ, Ĝ, Ĵ, Ŝ, Ŭ, ¿ and ¡ have their own. Letters with no code at all (such as Í or ô) are sent as their plain letter and counted. In the other direction, a code shared by several letters decodes to the first one (so .-.- reads as Ä), and any code that matches nothing is shown as � — usually a missing space between two letters.
Letters, digits and the core punctuation follow the ITU recommendation M.1677-1, including its rule that % is sent as 0/0 and ‰ as 0/00. The ! ; _ $ and & codes and the accented letters are long-standing extensions rather than ITU codes. Type prosigns in angle or square brackets — <SK>, [AR] — and they are sent as one run-together character; tick Decode prosigns to see <AR> rather than + when decoding.
Other alphabets. Choose Russian, Ukrainian, Greek, Hebrew or Arabic under Alphabet. Encoding works for any of them whatever is selected, but decoding needs the right choice, because the same codes mean different letters: .-.- is Ä in Latin, Я in Russian and ع in Arabic. Hebrew final letters are restored at the end of words; Japanese Wabun code is not supported.
Speed, timing and Farnsworth spacing
Morse speed is measured in words per minute using the standard word ‘PARIS’, which is exactly 50 dot-lengths long including the gap after it. So at w WPM one dot lasts 1.2 ÷ w seconds — 60 ms at 20 WPM. Every other duration is a multiple of that unit:
| Element | Length | At 20 WPM |
|---|---|---|
| Dot (dit) | 1 unit | 60 ms |
| Dash (dah) | 3 units | 180 ms |
| Gap inside a letter | 1 unit | 60 ms |
| Gap between letters | 3 units | 180 ms |
| Gap between words | 7 units | 420 ms |
Farnsworth spacing keeps each letter at the full character speed but stretches the gaps so the overall rate is slower — for example letters at 20 WPM with an effective speed of 10 WPM. That stops learners counting dots and dashes and teaches them to hear each letter as a rhythm, which is how every experienced operator reads. The gaps are calculated with the ARRL formula, so 20/10 here sounds the same as 20/10 in any mainstream training course. Most people start at 18–20 WPM character speed with a 5–10 WPM effective speed, then close the gap.
Tone is a matter of taste: 550–750 Hz is traditional and easy on the ear; higher tones cut through background noise. Each tone is shaped with a 5 ms rise and fall so it clicks less than a raw on/off beep.
Light, sound, vibration and WAV download
The light flashes in step with the audio, driven from the same clock so the two never drift apart. Untick Sound for silent, visual-only practice, or press the full-screen button to turn the whole screen into a signalling lamp — hold a phone up to a window and it works as a torch at night. iPhone Safari does not allow real full screen for page elements, so there the lamp fills the browser window instead. At speeds of about 12 WPM and above the light flashes several times a second, so please untick Light if you are sensitive to flashing.
On Android phones a Vibrate option buzzes the pattern through the vibration motor. Chrome cuts any single vibration pattern off after 99 steps (about a dozen letters), so the translator sends it in chunks of 49 pulses, each started from the playback clock — long messages vibrate all the way through and stay in step after a pause or a speed change. iPhones do not let web pages vibrate at all.
Switch the sound from Tone to Sounder clicks to hear it the way railway and telegraph operators did: a sharp click as the key goes down and a softer clack as it lifts, with the letter formed by the space between them. Tick Repeat to loop the message for practice.
WAV renders the audio directly in your browser — nothing is uploaded — as 16-bit mono at 22.05 kHz, using your current speed, Farnsworth setting and tone (or sounder clicks). Files are limited to 15 minutes, which at 20 WPM is roughly 300 words. The play limit is 4,000 letters, and the timer and file stop at that point instead of running on in silence.
Decoding Morse from sound
Listen with microphone decodes Morse you can hear — a practice oscillator, a radio, a video — and Open audio file (or dropping a file on the panel) decodes a recording. Both run entirely in your browser. The decoder works in four steps:
- Find the tone. It scans 250–1,600 Hz with the Goertzel algorithm over the loudest moments and locks on to the strongest steady pitch, so it ignores speech and hum outside that pitch.
- Follow the envelope. Every 5 ms it measures the strength of that one frequency over a 10 ms window, which rejects most background noise.
- Decide on or off. The threshold adapts: it tracks the noise floor in the gaps and the signal level in the tones, with hysteresis so a fading signal does not chatter. The meter shows the level (green while a tone is detected) and the threshold line.
- Learn the speed. Tone lengths are clustered into dots and dashes, and the dot length keeps updating, so it follows a sender who speeds up or slows down. For files the whole recording is measured first.
It reads clean machine-sent Morse from about 5 to 50 WPM reliably, even with moderate noise. Hand-sent Morse with uneven spacing, several signals at once, or heavy fading will produce errors — check the result, and if the phone’s own noise suppression mangles the tone, use a recording instead. Microphone access needs your permission; if you block it, the panel explains how to allow it again in your browser.
Tapping out Morse yourself
The Tap it out key turns your screen into a straight key. Press and hold with a finger or the mouse, or focus it and hold Space. The key keeps separate running averages of your dots and your dashes and splits them halfway, so it copes with a heavy or light hand. A pause of about two dot-lengths ends the letter and about five adds a word break — halfway between the textbook gaps of three and seven, so a slightly quick sender does not run letters together. It also learns the gaps you leave inside letters, and the Spacing switch (Quick, Normal, Relaxed) shortens or lengthens those pauses if letters still merge or split.
The key starts at the slider speed (capped at 15 WPM, which suits beginners) and the readout shows your current dot and dash lengths and the speed it thinks you are sending. If letters come out wrong, exaggerate the difference between dots and dashes and leave a clear pause between letters.
For spoken spelling rather than code, the NATO phonetic alphabet translator converts text to Alfa, Bravo, Charlie. To see the ones and zeros a computer stores for the same letters, try the text to binary converter.
Frequently asked questions
What is SOS in Morse code?
SOS is three dots, three dashes, three dots: ...---.... It is sent as one continuous prosign with no letter gaps, not as the separate letters S, O, S. Type <SOS> in the text box to get the run-together version, or just SOS to get the three letters with normal gaps — the difference is audible when you press Play.
How do I separate letters and words when typing Morse?
Put a single space between letters and a slash between words, for example .... . .-.. .-.. --- / .-- --- .-. .-.. -.. for HELLO WORLD. The translator also accepts a vertical bar or two or more spaces as a word break, and new lines are kept. If you run two letters together without a space, they will usually decode as a different letter or as �.
What does WPM mean in Morse code?
Words per minute, measured with the standard word PARIS, which is 50 dot-units long. At 20 WPM a dot lasts 60 milliseconds and a dash 180 milliseconds. Amateur radio conversations typically run at 15–25 WPM; the old US amateur licence test was 5 WPM, and skilled operators exceed 40.
What is Farnsworth timing?
Farnsworth timing sends each letter at a fast character speed but adds extra space between letters and words, so the overall speed is slower. It helps learners recognise letters by their sound rather than counting dots and dashes. Tick Farnsworth and set the overall speed lower than the character speed; the gaps follow the ARRL formula.
Can I download the Morse code as an audio file?
Yes. Press WAV and the translator renders the audio in your browser and saves a 16-bit WAV file using your current speed, spacing and tone. Nothing is uploaded. Messages up to 15 minutes long can be exported; for longer text, raise the speed or split it into parts.
Can this decode Morse code from audio?
Yes. Press Listen with microphone and hold the device near the sound, or open a recording with Open audio file. The decoder finds the tone automatically, measures dots and dashes against a speed it keeps learning, and writes the result into the Morse box. It works best on clean, machine-sent Morse; noisy or hand-sent signals may need a quick check.
Why are some of my characters missing from the Morse?
Morse only covers letters, digits, common punctuation and a set of accented letters. Anything else — emoji, most symbols, Chinese or Japanese characters — has no code and is skipped. The translator lists every skipped character under the boxes, sends % as 0/0 as the ITU specifies, and converts curly quotes and dashes from Word documents automatically. For Cyrillic, Greek, Hebrew or Arabic, choose the alphabet so the result decodes back correctly.
Why does vibration not work on my phone?
Vibration needs a phone browser that supports the Vibration API, which in practice means Chrome and other browsers on Android. iPhones do not allow web pages to vibrate, so the option is hidden there. On Android, check the phone is not in silent or battery-saver mode, which can disable the motor for web pages.