Morse Code Translator
Translate text to Morse code and Morse code to text.
Reviewed by Aygul Dovletova · Last reviewed
How to Use the Morse Code Translator
- Pick a direction with the toggle at the top: "Text → Morse" encodes plaintext; "Morse → Text" decodes dots and dashes back to letters. Switching clears the input so you don’t translate in the wrong direction.
- Enter input in the large textarea. For text input, anything in the supported character set works; for Morse input, use
.and-, one space between letters,/surrounded by spaces between words. - Read the output below the input - it updates live as you type. Text output preserves uppercase and word spacing; Morse output uses single spaces between letters and a slash between words.
- Click Play Audio to hear the Morse code as 600 Hz beeps at standard timing (80 ms per dit). Works on desktop and mobile; mobile requires volume up and silent mode off.
- Click Copy to put the output on your clipboard for pasting into a message, a ham radio logbook, or a code commit.
What the Translator Actually Does
Translation is a pair of small lookup tables. Text-to-Morse uppercases the input, iterates over each character, and maps through a Record<string, string> that encodes the International Morse alphabet - dots and dashes for the 26 Latin letters, the ten digits, and common punctuation. Unsupported characters are silently dropped. Morse-to-text goes the other way: split on / to get words, split each word on whitespace to get letter codes, look each code up in the reverse map, and join.
Audio playback uses the Web Audio API. The tool creates an AudioContext, then walks through each symbol of the Morse string and schedules an OscillatorNode at 600 Hz for the right duration: 80 ms for a dot (a "dit"), 240 ms for a dash (a "dah"), 80 ms of silence between symbols inside a letter, 240 ms between letters, 560 ms between words. The oscillator is scheduled on AudioContext.currentTime so timing is sample-accurate, not subject to setTimeout jitter. When the schedule finishes, the context is closed.
Places People Actually Need This
- Studying for an amateur (ham) radio license that still tests Morse, or just practicing for CW (continuous wave) operation.
- Decoding a short dot-dash sequence found in a puzzle, escape room, video game, or ARG.
- Teaching Morse to Scouts, cadets, or students as a unit on signalling history.
- Hiding a short message in a birthday card, tattoo design, or wedding favour as a novelty.
- Generating timing-correct Morse audio for a podcast, film, or documentary soundtrack.
- Converting SOS, MAYDAY, or a call sign to Morse for a sailing/aviation training context.
Pitfalls and Edge Cases
The most common decode failures come from wrong separators: using commas, newlines, or different spacing between letters breaks the split logic. The tool expects one space between letter codes and / (space, slash, space) between words. A single missing space between .. (I) and .. (I) turns into .... (H), which is a valid code but the wrong letter - classic Morse ambiguity that the operator must resolve with spacing. Mixed dit characters also bite: some copy-pastes use middle dot · (U+00B7) or bullet • (U+2022) instead of ASCII period, and the parser only accepts ASCII .. Long dashes (en-dash, em-dash) are likewise rejected in favor of the ASCII hyphen-minus. Characters outside the supported set are dropped rather than escaped, so Chinese, Arabic, and most emoji won’t survive a round trip. And note: Morse has no case - the translator uppercases everything on input, so encoding then decoding always returns uppercase.
A Real Look at Morse Timing and History
What this tool produces is International Morse Code, standardized in ITU-R Recommendation M.1677-1. It differs from the original American Morse that Morse and Vail used on the 1844 Washington-Baltimore line: American Morse had internal letter spaces (C was "dit-dit-space-dit") and different codes for C, F, J, L, O, P, Q, R, X, Y, Z. By the 1850s Friedrich Gerke’s simplified continental version was spreading across Europe; it was codified at the 1865 Paris ITU conference and eventually displaced American Morse everywhere except early US railroads. Timing is a ratio: dit = 1, dah = 3, intra-letter gap = 1, inter-letter gap = 3, inter-word gap = 7. A PARIS-standard "20 WPM" operator sends a dit in 60 ms; this tool uses 80 ms, roughly 15 WPM. The Farnsworth method keeps letters fast but stretches inter-letter and inter-word gaps so learners don’t count dits. SOS (... --- ...) is one continuous prosign, adopted at the 1906 Berlin Radiotelegraphic Conference because it’s easy to pick out.
Compared to Other Morse Tools
For casual encode/decode, a web translator like this one is usually enough. For serious training, desktop apps like CWops’ Morse Runner, LCWO (Learn CW Online), and G4FON Koch Method Trainer are much better - they implement the Koch method, handle QSO simulation, track progress, and let you tune to real pileups. Ham radios themselves have built-in CW keyers and straight-key modes for live operation. For decoding audio from a recording (not text), fldigi and CW Skimmer run FFT-based demodulators that can pick a call sign out of noise; a plain text translator can’t do that. This tool is the best fit when you already have the Morse as text or plain characters and want to go either direction quickly, or when you want correctly timed audio to drop into a project without installing software.
Frequently Asked Questions
What’s the difference between international and American Morse?
International Morse, standardized in ITU-R M.1677, is what everyone uses today. Original American Morse (Vail/Morse, 1844) had internal pauses inside some letters and different codes for C, F, J, L, O, P, Q, R, X, Y, Z. Continental/international Morse simplified those codes and became the world standard after the 1865 Paris ITU conference. This tool uses international Morse only; American Morse would not round-trip correctly through it.
What are the exact timing ratios?
The canonical ratios are 1:3:1:3:7 - one unit for a dit, three for a dah, one unit of silence between symbols inside a letter, three between letters, seven between words. This tool uses 80 ms as its unit (roughly 15 words per minute by the PARIS standard), so you get 80/240/80/240/560 ms in audio. Changing only the unit scales speed without touching ratios.
Why does the audio sometimes not play on mobile?
Mobile browsers (and all major desktop browsers since around 2018) require a user gesture before unlocking <code>AudioContext</code> for playback. Clicking Play Audio counts as that gesture. If nothing happens, check that the device isn’t on silent, the ringer volume is up (iOS sometimes routes app audio through the ringer channel), and the page is on HTTPS. The tool uses the standard Web Audio API, which every modern mobile browser supports.
Is my input sent to a server?
No. Text-to-Morse and Morse-to-Text both run through in-memory lookup tables in your browser. Audio is synthesized locally by the browser’s Web Audio API. There is no <code>fetch</code>, no WebSocket, no analytics event carrying your input. The tool would function with the network disabled after the page loaded.
How do I type Morse for the decode direction?
Use ASCII period (<code>.</code>) for a dit and ASCII hyphen-minus (<code>-</code>) for a dah. Put one space between letters in a word and put a forward slash surrounded by spaces (<code> / </code>) between words. So <code>... --- ...</code> is SOS as one word, and <code>.... . .-.. .-.. --- / .-- --- .-. .-.. -..</code> is "HELLO WORLD". Unicode middle dot or en-dash will be rejected.
What’s the Farnsworth method?
A pedagogy where individual letter sounds are sent at a fast rate (say 20 WPM) but the gaps between letters and words are stretched to simulate a slower overall rate (say 10 WPM). The idea is to prevent learners from counting dits and dahs; you hear each letter as a complete rhythm, not as a sequence. It was popularized by Donald Farnsworth in the 1950s and is the foundation of modern CW training in programs like LCWO.
Why don’t Chinese, Arabic, or emoji characters work?
International Morse was designed for the Latin alphabet plus digits and a handful of punctuation. There are historical extensions for Greek, Cyrillic, Hebrew, and Japanese kana, but they’re out of scope for this translator. Characters outside the ASCII letter/digit/punctuation set are simply skipped during encoding.
Is SOS Morse for "Save Our Souls"?
No. SOS was chosen at the 1906 Berlin Radiotelegraphic Conference because <code>... --- ...</code> is easy to recognize as one continuous prosign with no letter gaps. "Save Our Souls" and "Save Our Ship" are later backronyms. It replaced the earlier German distress signal <em>SOE</em> because a lone dit was too easy to lose in noise.
Why are unsupported characters dropped silently?
Because warning on every unsupported character would make pasting natural-language text (smart quotes, em-dashes, curly apostrophes from word processors) unbearably noisy. The tool strips what it can’t encode and translates the rest.
Can I use this to pass an amateur radio exam?
Morse is no longer required for any US amateur license class (the FCC dropped the requirement in 2007), and most other countries followed. It remains useful for weak-signal and low-power CW work. For genuine operating speed, pair this translator with a Koch-method trainer like LCWO - this tool helps with understanding, not ear training.
More Text Tools
Binary to Text
Convert text to binary and binary back to text.
Open toolCase Converter
Convert text between UPPER, lower, Title, Sentence, camelCase, snake_case and more.
Open toolCharacter Counter
Count characters with platform-specific limits for Twitter, Instagram and more.
Open toolEmoji Picker & Search
Search and copy emojis by name or category.
Open toolFancy Text Generator
Generate stylish text with bubbles, squares, upside down and more for social media.
Open toolFind & Replace
Find and replace text with regex support and case-sensitive options.
Open tool