(Morse Code Reviewer)
CW-Trainer is a tool for learning and practicing Morse code, such as for passing amateur
(ham) radio license exams. It either takes text that you supply or it randomly generates text, and converts the characters into code sounds.
It can test your reading of the tones. The sending speed and Farnsworth compression level are adjustable.
CW-Trainer is written in C for Linux PC's or other computers. It was originally
a text-based application (cw_trainer1), but recently a simple graphical interface was added.
The graphical interface makes it much easier to use.
Invoke CW_Trainer as: ./cw_trainer.exe
The CW-Trainer control panel is divided into two major sections: Settings and Code Sources.
- Speed - You can set the code-speed either by command-line argument, -wpm xx, or by the form-box under the Settings panel.
It defaults to 5.0 words-per-minute. The question-mark box to the right of the form-box provides an explanation about
what the words-per-minute (WPM) means, and how it is calculated.
- Farnsworth Compression -
Farnsworth Compression is a technique that increases the spacing between letters while speeding up the da-dits.
It maintains the average WPM speed, while making the letter-sounds more distinct, especially for learning.
CW-Trainer defaults to a Farnsworth Compression Ratio of 1.75. You can set the ratio either by command-line argument, -fwc xx,
or by the form-box under the Settings panel. The question-mark box to the right of the form-box provides an explanation about
what the Farnsworth ratio means, and how it is calculated.
The second block of the CW-Trainer control panel controls the sequence of letters to be sent.
It gives you several choices, which are selected by the radio-button on the left side of the block.
The first two choices enable you to supply your own text sources.
The remaining choices generate character sequences randomly. They are arranged from easier to more difficult.
The practice sessions can last as long as you wish, until you close the tool.
(I have found that practicing for no longer than 20-minutes at a time, to be beneficial, perhaps a few times a day or week.)
- The first, Play arbitrary string, let's you enter text interactively.
This is useful when first beginning. You hear the sounds of individual letters or words as you try them.
Can you distinguish 'h' from 's'? Try it. Are you having trouble distinguishing certain letter patterns?
You can practice them this way at your own speed. Type a letter, or letters, into the text-box and click Play.
- The second choice, Play Text-file, let's you play pre-prepared files. This is useful to hear realistic words and sentences.
One idea is to download news-stories into text files for virtually endless practice. When you press this radio-button, a
file browser dialog will pop-up. Enter the name of your text file and click Play.
The general progression while learning CW, is to progress from top to bottom of the code sources. But you can go in any order.
- The first random option (radio-button 3), generates one random character at time, and then waits for you to type the
letter on the keyboard. If you get the answer wrong, it sounds an error-beep and sends the same character again until you get it right.
This is a very good mode for new beginners. It enable you to control your own pace while you learn the sounds.
If you get really stuck, or while first learning, you can see the character being sent by looking at the console window.
- The second random option (radio-button 4), generates only the 26 letters of the alphabet in continuous groups averaging 5-characters (like words).
It leaves a space between the random words, but does not wait for any response from you. The words are composed of random characters.
Do not expect them to spell anything. It is useful to use paper and pencil in this mode.
This mode is good for intermediate code practice because it has a steady rate and includes only letters.
- The final random option (radio-button 5), generates groups of letters, numbers, and punctuation.
The groups average 5-characters. Some are shorter. Some are longer. Like real words. This mode
is good for experts because it contains all letters, numbers, and punctuation at steady rates.
Click to download:
This package contains the cw_trainer2.c source file and a pre-compiled cw_trainer.exe
for convenience. If you are on a compatible Linux PC, then you may not need to re-compile. You may
be able to run the supplied executable directly. However, if you wish to, or need to, the compilation
instructions follow below.
To unpack: tar xvfz cw_trainer2.2.tar.gz
Invoke by: ./cw_trainer.exe
To compile the graphical version of CW_Trainer, you will need to grab the Open graphics Tool-Kit (Otk).
Otk is a very small, lightweight, portable graphical user interface package for making the
graphical front-end (buttons/menus/etc.) for CW_Trainer. Download Otk from
When unpacked, it makes a subdirectory called otk_lib with a few files in it.
Compile CW_Trainer2.c as:
cc -L/usr/X11R6/lib -I/usr/X11R6/include cw_trainer2.c -lGLU -lGL -lXmu -lXext -lX11 -lm -o cw_trainer.exe
Porting CW-Trainer to Other Platforms
I am uncertain about the portability of the sound-card (audio) calls in CW_Trainer to other platforms, such as
Sun Solaris, Mac OSx, or Microsoft Windows. If anyone has hints about how to make sounds on these other
platforms, please let me know. Aside from the sound calls, everything in Otk should be very portable across
all platforms, including the graphical interface. My intention is to support the other platforms when I
find out about the sound calls.
Carl Kindman firstname.lastname@example.org