Morse Code Synthesizer🔒 100% local
Encode text to Morse code, decode Morse back to text, and play the message as a real 600 Hz tone at 20 WPM. Privacy-first, no server uploads, no tracking.
Related Tools
Encodes text to Morse code, decodes Morse back to text, and plays the message out loud as a real 600 Hz tone at 20 words per minute - each dit one unit, each dah three, with the standard gaps between symbols, letters and words. Playback is a WebAudio oscillator on the page; nothing is sent anywhere, and no audio file is produced or uploaded.
How to use it
- Type the message to encode, or paste Morse to run it backwards.
- Press Process to get the encoding and the timing breakdown.
- Press Play to hear the encoded message as a tone; the button reads Playing until the last dah ends.
Worked example
SOSbecomesEncoded: ... --- ...
Input: "SOS"
All characters supported.
Timing (20 WPM):
Length: 27 units
Duration: 2 seconds (1 unit = 60ms)
SOS: ... --- ...27 units by the ITU convention: 15 for the nine symbols, 6 for the one-unit gaps between symbols inside each letter, and 6 for the two three-unit letter gaps - 1.6 seconds of sound, rounded to 2. Play schedules the same string as oscillator bursts at 600 Hz with one unit = 60 ms, so the printed length and the sound agree.
... --- ... (the encoded output pasted back in)becomesDecoded: SOS
Morse: ... --- ...
Text: SOS
Dit (.) = 1 unit · Dah (-) = 3 units · letter space = 3 units · word space (/) = 7 unitsDecoding splits on the slash, so Morse that uses a slash between words comes back with spaces in the right places. Pasted Morse can be played directly without decoding first.
When to use it
- Learning the sound of Morse: encode a word, press Play, and hear the real rhythm at standard speed.
- Checking whether a message is short enough to fit a slot in a simulation or a game.
- Decoding a Morse string you were given, with the unit table printed underneath as a reminder.
What it does not do
- Playback needs the Web Audio API and a user gesture: it starts only from the Play button, there is no WAV export, and the speed is fixed at 20 WPM with no Farnsworth spacing.
- Characters outside the table are dropped before encoding rather than rejected. A message containing an emoji comes back shorter, with a Dropped (unsupported) line as the only indication.
- The decode path replaces an unrecognised code group with a question mark instead of reporting it, and a group with no separator is read as one character.