Free • Browser-Based • No Signup • No Data Collection
| Time | Message | WPM | ▶ |
|---|---|---|---|
| No history yet | |||
Start at higher speed and gradually reduce — or start slow and build up.
| # | Δ% | Char WPM | Farn WPM |
|---|
Welcome to the InMorseCode CW Academy Morse Trainer — a professional-grade, completely free Morse code learning application that runs entirely in your web browser. Whether you are picking up a straight key for the very first time or you are a licensed amateur radio operator fighting through the dreaded speed plateau, this tool was built for you.
Unlike mobile apps that lock features behind subscriptions, or simple online tone players that teach nothing about rhythm, InMorseCode combines the proven Koch and Farnsworth training methodologies with modern Web Audio technology. Every sound is synthesised in real time — no pre-recorded clips, no internet dependency once the page loads, and absolutely no data ever leaves your browser.
What is CW? |
CW stands for Continuous Wave — the technical name for Morse code as used in amateur (ham) radio. A licensed ham operator transmitting Morse is said to be ‘working CW.’ The CW Academy is a globally respected programme run by the CW Operators Club (CWops) that teaches Morse code using a structured, scientifically-grounded curriculum. InMorseCode follows this same curriculum. |
You can go from zero to hearing your first Morse transmission in under 60 seconds. Here is all you need to do:
In the left column, find the card labelled Practice Content. Click the dropdown (it shows ‘Lesson 1 — K M’ by default) or use the blue arrow buttons to pick your lesson. If you are a complete beginner, stay on Lesson 1. You can also use the N key on your keyboard to jump to the next lesson at any time.
In the right column, look for the Speed & Timing card. As a beginner, set Character WPM to 20 and Farnsworth WPM to 5. Do not worry if those terms are unfamiliar — Section 6 of this guide explains them in full detail. The sliders are clearly labelled and the current value updates as you drag.
Click the large amber Play button in the Playback Controls card. Your browser may ask permission to play audio — click Allow. You will immediately hear the Morse code, see the waveform scrolling, and the signal lamp will glow amber in sync with each dot and dash. Press Space on your keyboard to pause at any time.
The trainer is divided into two main columns. Understanding the layout will help you find any feature instantly.
Across the very top of the tool you will find the InMorseCode brand, a status indicator dot (grey = idle, green pulsing = transmitting, amber = paused), and a live stopwatch that counts your total practice time. There is also a Shortcuts button that opens a keyboard shortcut reference panel.
The Session row in the Practice Content card shows your current lesson as a badge (e.g., ‘1 / 13’). Use the small arrow buttons on either side to step back and forward, or click the dropdown to jump directly to any lesson. The keyboard shortcuts P (previous) and N (next) do the same thing without clicking.
A small toggle lets you switch between Copying mode and Sending mode. In Copying mode, the trainer plays Morse audio and you try to write down what you hear. In Sending mode, the text is displayed and you practice transmitting it yourself on your key while the audio plays as reference.
Tip |
Enable multiple filters at once to mix practice types. For example, combining Characters + Words gives you both letter drills and word recognition in a single session. The message pool de-duplicates automatically so you will never see the same item twice in the queue. |
These pill-shaped toggle chips control what types of content are pulled into the message pool for the current lesson:
Filter | What it includes in the practice pool |
Characters | Individual letters from the current lesson’s alphabet. In Lesson 1, this means just K and M practised one at a time. |
Words | Short vocabulary words built from the lesson’s characters, such as KM, MK, MARS, and similar. |
CW Abbrev | Common ham radio shorthand: CQ, DE, QSO, QTH, QRZ, RST, 73, 88, OM, YL, TU, PSE, and more. |
Numbers | Digits 0-9 plus common numeric strings used in radio: 73, 88, 100, and 599. |
Callsigns | Real-format callsigns from various countries: W1AW, K6RB, VK2ZZZ, JA1ZZZ, G3ZZZ, DL9ZZZ. |
Phrases | Complete practice sentences such as GOOD MORNING, 73 DE W1AW, and QSO COMPLETE. |
The Transport Buttons
Button / Key | What it does |
Play (Space) | Starts transmission of the current message. The status dot turns green and pulses, the waveform begins scrolling, and the signal lamp glows with each element. |
Pause (Space) | Freezes playback mid-transmission. The audio stops, the lamp goes dark, and the dot turns amber. Press Space or Pause again to resume exactly where you left off. |
Stop (S) | Halts playback completely and resets to the beginning of the message. The waveform clears and the status returns to idle. |
⏮ / ⏭ Arrows | Step backward or forward through the message pool without playing. Useful for skipping to a specific word or callsign. |
⟳ New | Picks a random message from the pool and loads it without playing. Use this to quickly browse available content. |
Below the transport buttons is a row of numbered bubbles: 1 2 3 4 5 ∞. Click any number to set how many times the current message plays before automatically advancing. Selecting ∞ (mapped to key 6) makes the trainer repeat the message forever until you manually stop it — ideal for intense character drills.
The 🔁 Repeat button cycles through three states:
This is the most important section for making real progress. The three speed sliders are not just different ways of saying ‘fast’ or ‘slow’ — each one controls a different part of the Morse timing and they work together in a specific way.
This slider controls the actual speed of the dots and dashes within a single letter. At 20 WPM, one dot lasts 60 milliseconds. At 10 WPM, it lasts 120 milliseconds. Character WPM determines the ‘feel’ of each character — its unique rhythm and sound pattern.
Recommendation |
Set Character WPM to 20-25 from your very first day and keep it there. Never train at low character speeds. A letter learnt at 8 WPM sounds completely different at 20 WPM — you will have to unlearn it. High character speed trains your brain to hear the letter as a sound, not count individual dits and dahs. |
This slider controls the spacing between individual letters. Set it lower than Char WPM to insert extra silence between characters. This is the Farnsworth technique — the most scientifically validated method for learning Morse code.
For example, with Char WPM at 20 and Farnsworth WPM at 5, each letter is transmitted at a fast 20 WPM but the gaps between letters are stretched to the equivalent of 5 WPM spacing. You hear crisp, fast characters but have generous time to think about what you just heard before the next one arrives.
The Golden Rule of Farnsworth Training |
Start with Char WPM = 20, Farnsworth WPM = 5. Each week, increase Farnsworth WPM by 1-2 points. When Farnsworth WPM matches Char WPM (both at 20), you are reading at 20 WPM head copy. This is the only scientifically-proven path to reaching 25+ WPM. Never reduce Character WPM to make things easier — only ever reduce Farnsworth WPM. |
This controls the gap between complete words. It works the same way as Farnsworth but applies between words rather than between letters. As a beginner, set this to the same value as Farnsworth WPM. As you advance, you can experiment with different inter-word spacing independently.
Below the sliders are three fine-control input fields:
Setting | Purpose |
Recog (ms) | Recognition Gap. The silence that plays after the Morse transmission, giving you time to write down or speak the answer. Default is 2000 ms (2 seconds). Set to 5000 ms or higher for handwriting or keyboard copying practice. |
FC Time (ms) | Flashcard Display Time. How long the answer flashcard stays on screen before automatically hiding. Default is 2000 ms. |
Extra Gap (ms) | An additional pause added between the answer and the start of the next message. Useful for longer drills where you need breathing room. |
Bluetooth Delay |
If you are using wireless headphones and the first dit of each character gets cut off, go to the Audio Controls card and increase the BT Delay slider. Start at 200 ms and increase until the cutoff disappears. This adds a silent pause before each transmission starts, giving your headphones time to fully wake up. |
The Audio Controls card in the right column gives you complete control over how the trainer sounds and behaves.
Drag the Volume slider from 0% (silent) to 100% (full). This controls the amplitude of the Web Audio sine wave oscillator. The Mute button in the card header provides instant silence without losing your volume setting.
The Pitch slider sets the frequency of the CW tone, ranging from 300 Hz to 1000 Hz. The default is 600 Hz, which is a comfortable mid-range pitch suited for most training purposes. Experienced operators often prefer 700-750 Hz. Experiment to find what feels most natural to your ear.
The Playback Sequence card is one of the most powerful features in the trainer. It lets you design exactly what happens during each message cycle — before, during, and after the Morse transmission.
How the Pipeline Works
Think of it as a recipe. Each step is an ingredient you can add or remove. Every time a message plays, the trainer executes the active steps in order from top to bottom. You toggle each step on or off by clicking it.
# | Step | What happens |
1 | Show Before | The message text appears as a large flashcard overlay. You see the word before you hear it — useful when learning to associate letters with sounds. |
1 | Say Before | Your browser’s text-to-speech voice reads the message aloud before the Morse plays. Helps build the sound-to-letter connection. |
2 | Morse (always on) | The Morse code transmission. This step cannot be turned off. |
3 | Recognition | A silent gap (set in the Recog field) giving you time to copy what you heard. |
4 | Show After | The flashcard answer appears after the gap. The moment of reveal — compare with what you wrote. |
4 | Say After | The TTS voice reads the answer after the gap. |
5 | Morse Repeat | Plays the Morse transmission a second time after the answer is revealed — great for confirming your copy. |
6 | Bell | A short bell tone signals the end of the cycle. Satisfying psychological closure. Choose between Boop, Ting, or Piano in the Bell Settings. |
The Preset dropdown lets you activate a pre-designed pipeline in one click:
When Show Before or Show After steps are active in the pipeline, the answer appears as a large, full-screen flashcard overlay. The background dims and the text is displayed in the centre of the screen in high-contrast amber text.
Click on the Text-to-Speech accordion section to expand the TTS settings:
iOS Note |
On iPhone and iPad, speech synthesis voices only load after you first interact with the page. If no voices appear in the dropdown, press Play once, then open the TTS dropdown again. The voices will populate automatically. |
Speed Racer is an advanced training module that automatically varies your WPM across multiple repetitions of the same message. It is designed to break through speed plateaus — those frustrating periods where you seem stuck at a certain WPM and cannot progress.
Click the Off chip next to the Speed Racer title to toggle it On. The card becomes fully interactive and a live table appears showing the speed plan.
Speed Racer generates a table of WPM values for each repetition. For example, with 3 repeats and a Delta of 25%:
# | Δ% | Char WPM | Farn WPM |
1 | 25% | 25 WPM | 12 WPM |
2 | 12% | 22 WPM | 11 WPM |
3 | 0% | 20 WPM | 10 WPM |
The trainer plays the message three times. The first play is 25% faster than your set speed, the second is 12% faster, and the third is exactly your set speed. By the time you reach your target speed, it feels easy because you have already processed the message at higher speeds. This is the Speed Racer effect.
The amber waveform display shows the last three seconds of signal history as a step function — high for a mark (tone on), low for a space (tone off). It scrolls in real time as the message plays. The visual pattern of the waveform matches what you would see on an oscilloscope connected to a real CW transmitter.
This display serves as a learning tool: you can visually identify the dit-dah patterns of each letter and develop pattern recognition alongside your audio training.
Directly below the waveform is the signal lamp — a circular indicator that glows amber whenever the tone is on. It mirrors the waveform exactly. Toggle the Light option in the Audio Controls card to enable or disable it. Some practitioners prefer to practise with Sound off and Light on for silent visual copying drills.
Every message you successfully complete is automatically logged in the History card at the bottom of the left column. The log shows:
Click CSV to download the complete history as a comma-separated file. Open it in Excel, Google Sheets, or any spreadsheet application to analyse your practice sessions, track progress over time, or share with a training partner or Elmer.
Click Clear to erase the history log for the current session.
Every message you successfully complete is automatically logged in the History card at the bottom of the left column. The log shows:
Click CSV to download the complete history as a comma-separated file. Open it in Excel, Google Sheets, or any spreadsheet application to analyse your practice sessions, track progress over time, or share with a training partner or Elmer.
Click Clear to erase the history log for the current session.
Directly below the waveform is the signal lamp — a circular indicator that glows amber whenever the tone is on. It mirrors the waveform exactly. Toggle the Light option in the Audio Controls card to enable or disable it. Some practitioners prefer to practise with Sound off and Light on for silent visual copying drills.
Pro Tip: For the most accurate OCR results from photos of physical documents, use high-contrast images (dark text on white or light background), ensure text is horizontal and not tilted, and photograph in good lighting. For images containing printed Morse code dot-dash patterns, always select the “Morse Code in Image” option before clicking Read Text from Image.
Every key shortcut works when the keyboard focus is not inside a text input or dropdown. If shortcuts stop working, click anywhere on the main interface area to restore focus.
Space | Play / Pause — the most important shortcut. Toggle playback without touching the mouse. |
S | Stop — halt playback completely and reset to message start. |
P | Previous Session — go back one lesson. |
N | Next Session — advance to the next lesson. |
M | Next Message — load the next item in the pool without replaying the current one. |
L | Cycle Repeat Mode — toggle between None, All, and One repeat modes. |
F | Toggle Random Mode — turn random message selection on or off. |
B | Toggle Bell step in the sequence pipeline. |
C | Toggle Show After (flashcard reveal) step in the pipeline. |
T | Toggle Say After (TTS reading) step in the pipeline. |
1 | Set play count to 1 (play each message once). |
2 | Set play count to 2. |
3 | Set play count to 3. |
4 | Set play count to 4. |
5 | Set play count to 5. |
6 | Set play count to Infinite (∞). |
? | Open or close the built-in keyboard shortcuts reference panel. |
The lesson order follows the official CW Academy progression, developed by the CW Operators Club (CWops). Each lesson introduces characters chosen for their acoustic distinctiveness — so you always learn characters that sound as different from each other as possible. This prevents confusion and accelerates recognition speed.
| Lesson | New Characters | What to practise & notes |
| 1 | K, M | Start here. K is -.- and M is –. Both are long sounds with no dits. Focus on the rhythm contrast. |
| 2 | R, S | R is .-. and S is … — your first dit-heavy characters. With characters from Lesson 1. |
| 3 | U, A | U is ..- and A is .- — introduce dit-dah combinations. Pool now includes K, M, R, S, U, A. |
| 4 | P, T | P is .–. and T is just -. T is the shortest character in Morse. Good contrast with P. |
| 5 | L, O | L is .-.. and O is —. O is three dahs — a distinctive sound. Pool grows to 10 characters. |
| 6 | W, I | W is .– and I is .. — two more high-contrast additions. Try random mode from this lesson. |
| 7 | N, E | N is -. and E is just a single dot — the shortest possible sound. Critical to master. |
| 8 | Common Words | The, And, But, For, Are, Was, His, Her, That. Full word recognition training begins here. |
| 9 | H, D | H is …. and D is -.. — complete the core alphabet used in QSOs. Start Ninja Mode here. |
| 10 | Numbers 0-9 | All ten digits plus common strings: 73, 88, 599, 1000, 2024. Numbers are slower to learn. |
| 11 | Punctuation | Full stop .-.-.- , comma –..– , question ..–.. , slash -..-. , exclamation -.-.-. |
| 12 | CW Abbreviations | CQ, DE, QSO, QTH, QRZ, RST, 73, 88, HI, OM, YL, TU, PSE, UR, FB. Real QSO vocabulary. |
| 13 | Callsigns | W1AW, K6RB, WR7Q, AC5EZ, VK2ZZZ, JA1ZZZ, G3ZZZ, DL9ZZZ. International formats. |
Switch to Lesson 13, enable the Callsigns filter, apply the Ninja Mode preset, and set your play count to 3. The trainer will: play the callsign in Morse, pause for your recognition gap, show the callsign as a flashcard, say it aloud, then play the Morse a second time. This complete loop bakes callsign patterns in deeply. Expect significant improvement within one week of 15-minute daily sessions.
Serious operators copy Morse onto paper. Set the Recognition Gap to 5000 ms (5 seconds). This gives you enough time to write the full word between transmissions without falling behind. Reduce it by 500 ms each week as your speed increases.
Load Lesson 12 (CW Abbreviations), set your target WPM, enable Random mode, then click Save Audio. Do this for five or six messages to create a batch of WAV files. Combine them in any audio editor (Audacity is free) to make a 5-10 minute practice track. Transfer it to your phone and play it during your morning commute or exercise session.
Real on-air CW signals drift in frequency due to temperature and oscillator aging. Enable Variable Pitch in the Audio Controls to simulate this. It shifts the tone randomly by up to 100 Hz each character. Your brain learns to identify letters regardless of exact pitch — a critical skill for contesting and pile-up work.
Configure the trainer exactly as your Elmer or training partner recommends — specific WPM, specific pipeline steps, specific lesson. Click Share and send the URL. They will open the tool with your exact settings pre-loaded. Ideal for remote coaching without the complexity of explaining every setting.
Browser Compatibility
Mobile Devices
The interface is fully responsive and adapts to phone and tablet screen sizes. On small screens, the two-column layout stacks vertically. Vibration feedback is available on Android devices. All features including Save Audio, TTS, and keyboard shortcuts work on mobile (keyboard shortcuts require a physical keyboard).
Audio Engine
All CW tones are generated in real time using the Web Audio API OscillatorNode. No audio files are downloaded or cached. Timing precision uses requestAnimationFrame for sub-millisecond accuracy. The WAV export renders offline using an OfflineAudioContext.
Privacy
InMorseCode collects zero data. No analytics, no cookies, no tracking pixels, no account required. Settings are stored only in the JSON file you download or the URL you share. Nothing is sent to any server — ever.
Standards Compliance
Morse timing follows the ITU-R M.1677-1 standard. The 1200/WPM formula is used for all timing calculations. The character set covers all ITU standard Morse code characters including letters A-Z, digits 0-9, and standard punctuation marks.
Find answers to common questions about Morse code and how to use our Wingdings Translator effectively
iOS requires a direct user interaction (a tap or click) before any Web Audio will play. The Play button itself counts as that interaction, so simply pressing Play should resolve the issue. If you still hear nothing, check that your iPhone’s Silent Mode switch (on the left side of the device) is not enabled — it silences Web Audio even when your volume is turned up. Also check that the Sound chip is toggled On in the Audio Controls card.
Click the Save button in the Settings card to download a JSON file containing all your settings. The next time you open the trainer, click Load and select that file to restore everything exactly. Alternatively, use the Share button to generate a URL you can bookmark — opening that URL restores your complete configuration without needing a file.
Character WPM controls how fast the dots and dashes inside each letter are sent. Farnsworth WPM controls how much space appears between letters. Set Char WPM high (20-25) and Farnsworth WPM low (5-10) as a beginner. Gradually increase Farnsworth until both match. At that point you are reading at your Char WPM speed.
Once the page has loaded (which requires internet to fetch the fonts and application code), the audio engine works entirely offline. The only features that need an active connection are text-to-speech voices on some devices (iOS loads them from Apple’s servers) and the initial font downloads. After first load, the audio, waveform, and all training features work with no internet connection.
The table shows the exact WPM values for each repetition of the current message. If your Character WPM is set to 20 and your Delta is 25% with 3 repeats, the table shows: Rep 1 at 25 WPM (25% faster), Rep 2 at 22 WPM (12% faster), Rep 3 at 20 WPM (your target speed). The row for the currently-playing repetition highlights amber so you always know where you are in the cycle.
Go to the Practice Content card and turn off all the content filter chips except the one you want. To practise only callsigns, disable Characters and Words, then enable only Callsigns. To practise only numbers, enable only Numbers. Select Lesson 10 for numbers (which has all digits plus common radio strings) or Lesson 13 for callsigns. The message pool updates instantly.
Below the message text in the Current Message card, the trainer shows the ITU Morse code representation of the current message. It uses a middle dot (·) for dits and an em dash (—) for dahs, with a slash (/) separating words. This is purely for reference and learning — you will soon stop needing to look at it as the sounds become automatic.
Free for all amateur radio operators and Morse enthusiasts worldwide.
ITU-R M.1677-1 compliant • Web Audio API • JetBrains Mono & Inter fonts • No account required