APEX CW
User Manual
App version 1.11.1 · October 2026 · c7cb08e
APEX CW – User Manual, for app version 1.11.1 (source c7cb08e), October 2026. Author: Christian Konecny, OE1CKO. App icon: Sia, OE1LMR.
APEX CW is an independent project. Its training concept and algorithms come from the Morserino-32 firmware by Willi Kraml, OE1WKL, and the Morserino-32 team; there is no other connection to them.
This manual is also available in German.
APEX CW is an Android app for learning and practicing Morse code (CW): copy training with the Koch method, sending practice with the Echo Trainer, a CW Keyer, a CW Decoder using the microphone, CW over the internet (WiFi Trx), a QSO Bot and several games. An adaptive block flow tracks your mistakes character by character and suggests when you are ready for a new character, more speed or shorter pauses.
APEX CW is an independent hobby project by Christian Konecny, OE1CKO. Many ideas and much of the training logic come from the open-source firmware of the Morserino-32 by Willi Kraml, OE1WKL. Its training concept, with the Koch sequences, the Echo Trainer, the QSO Bot and much more, is the result of years of careful work by Willi and his team. Many thanks for that!
The logic was read out of the firmware source and rewritten for Android; the app contains no original firmware code. Beyond that there is no connection to Willi Kraml or the Morserino-32 team, and the app is not a product of the Morserino project.
The app was based on firmware version 9.0.0. Later firmware changes are not carried over automatically.
This manual describes the app version printed on the title page. You can see which version you have installed under Settings → Info (see Info: version and build).
Settings that also exist on the Morserino have plain names in the app (for example Character spacing instead of “Interchar Spc”). The table Morserino terms lists which Morserino menu item belongs to which setting.
If you are new, read the chapter Getting started: learning Morse step by step first: a practice plan that puts the app’s features into a sensible order.
The app is currently handed out as an APK file, not through the Play Store. It needs Android 8.0 or newer and a 64-bit device (practically every phone since about 2017); it cannot be installed on 32-bit-only devices.
Updates work the same way: install the new APK over the old one, and your settings and statistics are kept. This only works if both APKs are signed with the same key. If Android reports a conflict, you first have to uninstall the old version, and that deletes your settings and statistics.
The home screen has four groups:
| Group | Tile | What for |
|---|---|---|
| Practice | Listen | Practice copying: CW Generator and Koch Trainer in the block flow |
| Send | Practice sending: Echo Trainer. A word is played and you key it back | |
| Head copy | Listening without writing: sentences, Q-groups, Mini QSO (see Head copy) | |
| Free | Free modes | Opens six tiles: CW Keyer (key freely, with the text decoded on screen), CW Decoder (copy CW through the microphone), WiFi Trx (CW over the internet with other Morserinos and apps) QSO Bot (a simulated QSO partner) Own texts (hear your own texts from the clipboard as Morse, see Own texts) and Audio trainer (think along with the Morse, then hear the spelling words, see Audio trainer) |
| Play | Games | Morse Invaders, text adventure, Morsel, Memory Chain, Trailblazer, Fox Hunt, Fight the Pileup, Radio Cave |
| Learn | Learning resources | Interactive Morse tree, character chart, exam simulation, links to courses and practice sites |
At the very top sits the daily goal card: a ring with your active practice minutes today, your streak, and the week Monday to Sunday as dots. Tap it to open the Achievements page.
Below it there is a note on the training goals at first: Tip: set your own training goals! on a new install, New: training goals after the update. A tap on it opens the training goals; the ✕ hides the note for good. The app also hides the tip by itself once you set a goal.
The Listen and Send tiles show your current Koch lesson and speed, and – from the sixth block on – the trend of your last blocks (see Trend).
The gear icon at the top right opens the global settings (chapter Settings). Anything that concerns only one training is set up directly inside that training.
Straight from the home screen: long-press the APEX CW app icon to get shortcuts, at first to Listen, Send, Audio trainer and CW Keyer. A tap opens that training directly; back takes you to the app’s home screen as usual. You can drag any shortcut from that menu onto your home screen to get an icon of its own. The names follow the app’s language. Which shortcuts there are and in which order is set under Settings → Appearance → App shortcuts; CW Decoder, Own texts, Games and Character chart are also on offer. Most launchers show only the first four.
Each training has these icons at the top right:
While a block is running, these icons and the selection at the top are hidden to keep the screen calm. The back button then only ends the running block and returns you to the training’s start view. A second back leaves the training.
The screen stays on while you practice.
Text size: you can pinch text areas that show decoded text or results to make the text larger or smaller. This works in the CW Keyer, in Send and on the result page, among others. Each area remembers its own size.
Under Settings → Appearance you choose the Theme (System, Light, Dark, Amber, Red, Green, Warm grey or Navy & orange) and the app Language (Deutsch or English; without your own choice it follows the phone’s language). Amber, Red, Green, Warm grey and Navy & orange are dark themes with their own palette: Amber with warm yellows, Red (night vision) with muted red, which disturbs dark adaptation the least, Green like a phosphor terminal, Warm grey with a soft, low-contrast brown-grey, and Navy & orange with a blue-black ground, silver text and an orange accent (only orange and silver tones, like a smartwatch face; all menu icons are orange). There is also a Blue light filter you can switch on: it tints the whole app warm (in light and dark) at a strength you set. All of it takes effect immediately.
The app follows the Android font size setting, but only up to 1.3× the default size (step 4 of 7 on a Pixel). Larger steps look the same as that one in the app; otherwise the training screens would no longer fit. The on-screen keyboard for typing along and the Koch character row always keep their size. The Android Display size setting (“Make everything bigger or smaller”) has no effect in the app; it always uses the device’s default size. When a page is longer than the screen, a scrollbar at the edge shows that there is more.
Set the volume with the phone’s volume keys. You set the pitch and the tone softness in the settings. When headphones, a USB audio device or a Bluetooth device is connected or disconnected, the app switches to it automatically. If you don’t want that, you can fix the output (see Audio output). How to practice with noise, fading and a neighbouring station is described under Interference.
Bluetooth headphones usually add noticeable latency. That doesn’t matter for listening, but it does for sending: you hear your sidetone noticeably later than you key. For sending, use wired headphones or the speaker. Wherever the keys (dit/dah or straight key) are shown, a small line above them warns you while the sound plays over Bluetooth. Tap the line to open the settings right at the audio output, so you can switch there. Close it with the X until the next app start; turn it off for good in the settings under Audio output.
Speed is given in WPM (words per minute), based on the standard word “PARIS”. At w WPM a dit lasts exactly 1200 / w milliseconds, so 60 ms at 20 WPM.
As on the Morserino, the pauses are set in dit lengths:
The pause between the elements (dits and dahs) inside a character is always 1 dit. So the characters themselves always come at the set speed, and only the pauses between them get longer. This is the Farnsworth method. You learn the sound of a character at full speed and still have time to think.
Next to each spacing slider the app also shows the pause in seconds at the current speed, for example “28 dits · 1.68 s @ 20 WPM”.
The Listen and Send trainings start with generous pauses of 28 / 40 dits. The CW Keyer, WiFi Trx and the QSO Bot use the normal 7 dits as word spacing.
Because the pauses are longer, whole words arrive more slowly. The app shows this as eff. (effective WPM):
eff. WPM = 50 × WPM / (31 + 4 × character spacing + word spacing)
Example: 20 WPM with 28/40 dits gives 50 × 20 / (31 + 112 + 40) ≈ 5 WPM. The characters sound like 20 WPM, but you have as much time as at 5 WPM. With 3/7 dits the two values are the same.
When copying on the on-screen keyboard (Typing) the app waits for you after every word, so the word spacing does not matter. Then only the character spacing counts; the word spacing is taken at the normal 7 dits:
eff. WPM = 50 × WPM / (31 + 4 × character spacing + 7)
With character spacing 3 the value equals the WPM. On the start view, where you have not chosen Paper or Typing yet, the display calculates as for Paper.
With the Koch method you start with two characters at full speed. Once you recognise them reliably, the next character is added, then the next, until you know them all. Each step is called a lesson. The lesson number is the number of active characters.
The order of the characters is set by the Koch sequence (see Koch sequence).
When drawing random characters, the app weights them like the Morserino. Two out of three characters are drawn evenly from all active characters. Every third one is drawn only from the last third, where the most recently learned characters are. New characters therefore come up more often, without the old ones disappearing.
Prosigns (procedural signals) are sent as run-together letters. The app writes them in angle brackets:
| Prosign | Meaning |
|---|---|
<ka> |
Start of message |
<ar> |
End of message (+) |
<kn> |
Only the station called should answer |
<sk> |
End of contact |
<as> |
Wait |
<ve> |
Understood |
<bk> |
Break, over to the other station |
<err> |
Error: eight dits (........) |
In Listen (block flow), a prosign from the groups (Group
characters, Koch lesson, practice set) sounds as one character
and is shown and graded as one character (<ka>). When
copying on the on-screen keyboard you type it with the prosign key (AS,
KA, KN, SK, VE, BK; it appears as soon as the character set contains
prosigns); the two letters K and A count as wrong. The replay “Listen to
how it sounds” plays it as a prosign too.
This chapter is a practice plan for beginners. It does not explain what every setting means (the chapters on each mode do that), but in which order to do what and how to set up the app for it. The steps build on each other. You don’t have to read everything in one day, and certainly not practice everything in one day.
Open Listen and set:
m and k). The default is 5; moving the slider
back is a good idea for the start. Which sequence you use is secondary;
the main thing is to stick to it (see Koch
sequence).Before you start, tap each character of the lesson: the app plays it three times and shows the code. You don’t have to memorize it. Just listen to the sound.
Then press Paper. The app plays a block, you copy on paper, at the end it reveals the text, and you mark what was wrong (see How a block runs). Mark honestly: only then can the app judge your progress correctly.
Tip for the first lessons: In the ⚙ sheet, switch on Flow → Stop after each group. Then you can hear each group again with Dit or REPEAT until you have it.
You do not have to raise the lesson yourself if you set the training goal New characters. As soon as every character of the lesson has at least 20 attempts and was recently 90 % correct, the app then suggests the next character (see When the next Koch character comes). You accept it or stay a while longer. If you are not sure yet, stay. You can set the thresholds higher or lower in the ⚙ sheet under Training goals.
The Character statistics show which characters aren’t solid yet. If you keep confusing two characters, tap them one after the other and compare them directly.
If New characters comes first in your goals, the app does not shorten the pauses or raise the speed in this phase, because it works through the goals one after the other (see Training goals). You are meant to focus on new characters without everything getting faster at the same time.
After a few lessons there are enough characters for real words. Then set Content to Words, Abbreviations or Mixed. With the Koch lesson only words made entirely of characters you already know are used; at the start that is very few, with more every lesson. Feel free to switch between Random and Words: random groups train the sound of each character, words train recognizing the whole.
If you catch yourself recognizing a word as a word while listening, rather than letter by letter, you are on the right track.
After that, move towards sentences and texts:
As soon as you hear a few characters reliably, you can start Send (the Echo Trainer). The app plays a word or group and you send it back with the key. Here you have a profile of your own, with its own Koch lesson, its own speed and its own statistics, separate from Listen. Start with few characters, even if you are further along when listening.
Settings for the start:
A real Morse key is the optimum. A phone has no input for it, so you need a small USB adapter that turns the key contacts into key presses, for example the vband or a homemade one. Which adapters exist and how to connect and teach it is in the chapter A real Morse key or straight key. You feel the pressure point, the movement is the same as later at the radio, and you don’t have to look at the screen. Which key you take depends on the goal:
The on-screen touch keys are a good alternative for the start and on the go, and for Send, the games and the CW Keyer they are fully sufficient up to a point. They have limits, though:
If you want to continue seriously with keying, plan for a real key sooner or later.
So far the effective speed (about 5 WPM) was much lower than the character speed (20 WPM). You change that now with the training goals, for example in this order:
All suggestions appear on the result page. You decide with Apply or Not now (see Training goals).
Under real conditions signals are rarely clean. With Settings → Interference you simulate noise, fading, a second station and a “bad fist” (see Interference). Start carefully, and only once you are reliable at normal pauses:
The quickest way to switch interference on and off is the wave symbol in the header. With Constant noise the noise is also there between characters, which is more realistic but more tiring. Practice with interference best with characters you already know well, not with brand-new ones. Your hit rate will often drop briefly with interference. That is expected.
Once the basics are in place, you can use everything else with a purpose:
Listen is the app’s CW Generator and Koch Trainer. The app plays a block of groups or words, and you copy it, in one of two ways:
Either way you get the same result with suggestions for the next block at the end, and both count towards the same Listen statistics.
At the top of the start view you choose two things.
The character set decides which characters are practiced:
| Character set | Meaning |
|---|---|
| Koch lesson | Only the characters up to your current lesson |
| All characters | All letters, digits, punctuation and prosigns |
| Prosigns | Only the prosigns: AS, KA, KN, SK, VE, BK, AR, BT, HH and SOS |
| Practice set | Only the characters you enter yourself |
The content decides what is played:
| Content | Meaning | Available with |
|---|---|---|
| Random | Groups of random characters | all |
| Words | Common words (English or German, weighted by frequency). The chip shows roughly how many different words can come up (e.g. “~190”, or “none fit” when nothing matches): it depends on the language, the word length and, with Koch, on the unlocked characters | Koch, All |
| Abbreviations | Common CW abbreviations | Koch, All |
| Call signs | Random, realistic call signs | All |
| Mixed | With Koch: words, abbreviations and groups mixed. With all characters: words, abbreviations, call signs and single punctuation marks or prosigns, as on the Morserino | Koch, All |
With the Koch lesson, only words and abbreviations made entirely of characters you have already learned are used. In the first lessons there are very few of them.
The KOCH slider sets the lesson. Below it you see every character of the Koch sequence. The characters active in this lesson are highlighted, and their color shows the kind of character: letters, digits and punctuation/prosigns are colored differently. Characters not yet unlocked by the lesson are dimmed.
To get to know a character (this works for the dimmed ones too, so you can listen ahead to later lessons):
Usually you don’t need to raise the lesson by hand. The block flow suggests the next character once you are ready (see When the next Koch character comes).
The Prosigns character set practices only the
procedural signals. Below the chips you see the ten prosigns as tiles
(tap one to hear it); the content is always Random. In
Listen, a group is shown like <ka><sk> (display
case as set) and, with typing, you answer with the prosign keys: the
keyboard then shows one row of ten prosign keys. AR and BT are the same
signals as + and = (the keyer shows them that
way); HH is the error sign (eight dits). In Send (keying) the set leaves
out HH, because eight dits erase what you keyed, and SOS, which the
keyer cannot decode. The set cannot be edited; for your own mix use the
Practice set with prosigns in angle brackets
(<AR><SOS>).
With the Practice set character set, an input field
appears right on the start view. Enter the characters you want to
practice, for example QXZJ. Upper/lower case and spaces
don’t matter, and duplicate characters are ignored. The app shows how
many distinct characters it found. The practice set only offers the
Random content.
Below the practice area is a card with Speed (character speed, 10 to 60 WPM, the effective speed in brackets behind it), Character spacing and Word spacing. It is the same as in Sentences and Mini QSO (Q-groups have the speed only). You see it on the start view and in the result, not while a block runs and not in “Sent” (nor while you mark single words). You can also set the pauses in the ⚙ sheet under Spacing.
At the bottom of the start view are two start buttons: Paper and Type. The one you used last is highlighted. This section describes Paper; Type follows further down.
You set how many groups a block has in the ⚙ sheet under Word selection → Groups per block (with words, the setting is called Words per block). During the block and on the result page the app says groups for Random and words for all other contents.
With Flow → Stop after each group (in the ⚙ sheet; with words it is called Stop after each word), the app waits after every group or word:
This matches “Stop<Next>Rep” on the Morserino. It’s handy at the start, when you want to hear a group several times. The setting only applies to Paper; when typing, the app waits after every word anyway.
With Type you copy on the app’s own keyboard on the display instead of on paper, meant for on the go. It is not the phone’s system keyboard.
The keyboard is a QWERTY keyboard with a digit row
above it. Every key is always in the same place. Only the characters the
chosen character set can contain are active (bright, tappable); the
others are only outlined and do nothing. If the character set contains
punctuation (. , : - / = ? @ +), it gets a row of its own.
While you press a key, a bubble above it shows the character large.
⌫ deletes the last character. Pass is
at the bottom left, ⏎ Check at the bottom right. While
the block runs, the WPM slider is hidden to make room for the
keyboard.
How a word runs:
::: {.shots one}
:::
Which short tone follows the grading (high = correct, low = wrong), or none at all, is set in Settings under General → Confirmation tone (it applies to Listen, Send and character practice). How many attempts you get per word and whether the keys vibrate is set in the ⚙ sheet under Flow (see below).
After the block, Sent appears as with Paper. The errors of your first attempt are already marked red, and under each group is what you typed (“— passed” for a pass). You can tap a group and change marks, for example when you only mistyped. Done · n errors saves and shows the usual result page.
How it is counted:
tqr5u, typed
tq5u → only r is wrong. A character heard
wrong is wrong (cd9al as cb9al →
d wrong). An extra typed character does not make any played
character wrong.ABCC for
ABC) counts as a typing slip: the word is ✓ right and not
repeated. Any other extra character (ABCE,
AABC) is still wrong, and the word is repeated.The arrow at the top left cancels the block; nothing is saved then. The keyboard is portrait-only for now.
From top to bottom, the result page shows:
At the bottom there are two buttons:
Neither changes speed, spacing or lesson. Only Apply does that.
How the app arrives at its suggestions is explained in the chapter Adaptive mode.
The ⚙ sheet of Listen has the following sections. Values in bold are the defaults.
Only shown when the Koch lesson character set is selected. This setting applies to all trainings and games that use the Koch method. For a description see Koch sequence.
| Setting | Meaning | Values |
|---|---|---|
| Characters | The practice set characters. This is the same field as on the start view with the Practice set character set | any characters |
| Boost practice set | Draws practice set characters more often in random groups (see below) | Off / Moderate / Strong |
This is how Boost practice set works. For each character of a random group, the app draws up to 3 times (Moderate) or 8 times (Strong) until it gets a character from the practice set. If that doesn’t happen, the last character drawn stays. The practice set characters come up more often, but the others don’t disappear.
Boost practice set works in Listen (Koch lesson or All characters · Random) and in Send (All characters · Random). In Listen the practice set is combined with the weak characters: the characters from both lists are boosted, at the higher of the two levels. The more characters come together, the less each single one stands out.
| Setting | Meaning | Values |
|---|---|---|
| Character spacing | Pause between characters, in dits | 3–45 (28) |
| Word spacing | Pause between groups/words, in dits | 6–105 (40) |
Word spacing can never be smaller than character spacing. If you move character spacing past it, word spacing is pulled along.
Word spacing only applies in paper mode. In typing mode the app waits for your input after each word, so only the character spacing counts there. The ⚙ sheet notes this below the sliders.
Only the settings that fit the chosen content are shown. The line “Applies to: …” tells you which combination you are setting up.
| Setting | Meaning | Values |
|---|---|---|
| Group characters | Only with All characters · Random: which character classes are drawn from | All / Letters / Digits / Punctuation / Prosigns / Letters+Digits / Digits+Punct. / Punct.+Prosigns / Letters+Digits+Punct. / Digits+Punct.+Prosigns |
| Group length (min–max) | Characters per random group (with Random and Mixed). A range slider: with min = max (e.g. 5–5) all groups are equally long; with min < max (e.g. 2–7) each group gets a random length, so you can’t tell while listening whether a group is over | 1–8 (5–5); with 1–1 you practise single characters |
| Word language | Which word list is drawn from (with Words and Mixed): English or German. Both lists are weighted by frequency: common words come up more often than rare ones. The German list has no umlauts and no ß | English / German |
| Word length (min–max) | Only words within this length range (with Words and Mixed); the open ends mean no limit | 1–all (1–8, all) |
| Abbreviation length (min–max) | Only abbreviations within this length range (with Abbreviations and Mixed); the open ends mean no limit | 2–all (2–6, all) |
| Max call sign length | Only with Call signs, and with Mixed (All characters): maximum length of the call signs. One value for Listen and Send | Unlim. / 3 / 4 / 5 / 6 |
| Region | Same, only call signs from this region | All / EU / NA / SA / AF / AS / OC / VK/ZL |
| Common prefixes only | Same, only frequently heard prefixes instead of all possible ones. Call signs follow a weighted prefix table, as on the Morserino | Off / On |
| Groups per block / Words per block | Number of groups (with Random) or words in a block | 1–50 (10) |
| Setting | Meaning | Values |
|---|---|---|
| Stop after each group / Stop after each word | Paper only: wait after each one, dit = repeat, dah = next | Off / On |
| After a wrong answer | Type only: Repeat = the same word comes again (attempts per word); Learn = no second attempt; instead the word sounds once more and shows each character as dots and dashes with the letter above it, then the next word follows | Repeat / Learn |
| Attempts per word | Type and Repeat only: how often you may try a word; 1 = no second attempt | 1 / 2 / 3 |
| Vibrate on key press | Type only: short vibration on every active key | Off / On |
The ⚙ sheet contains the training goals of Listen: the list of goals, in which you set each target by tapping and the order by dragging, and below it the rules for when a suggestion comes (thresholds, occurrences for unlock, see Adaptive mode settings). The goals change nothing by themselves: what you set in the ⚙ sheet and in the speed and spacing card applies at once, and the goals read it at the next block.
Send is the Echo Trainer. The app plays a word or group, and you key it back with the Morse key. That can be the touch keyer or a real Morse key (see Morse key). If you get it right, the next word comes. If not, it is repeated. Keying with a real Morse key on an adapter feels much better than with the touch keys; the first time you open Send, a short tip says so (close it with the ✕, it does not come back).
Send has its own profile, independent of Listen. It keeps its own Koch lesson, speed, spacing, practice set and character statistics. What you mix up when listening isn’t necessarily what you get wrong when sending.
At the top you choose the character set and content as in Listen (see Choosing the character set and content). With the Koch lesson you also choose the lesson. Tapping a character works as in Listen.
Below that, two sliders set the speeds:
At the bottom are the dit/dah keys or the straight key, and Start.
On the start view the same speed and spacing card sits at the bottom as on the result page. The Send speed is at the top (the leftmost step is “same as Listen”; with a straight key the slider only shows the measured speed), below it the Listen speed with the spacing. The touch paddles only appear once the block runs, and then sit at the very bottom like in the other keying screens. You end the block with Stop at the top right or with the back arrow.
<err> (eight
dits) or four e in a row to clear your answer so far and
start again. The exception is when the word itself continues with
another e at that point. Then the e counts as
a normal character.Whether the prompt is played, shown or both is set with Prompt (see below).
On the Morserino this setting is called “Echo Speed Max”. It limits the speed at which your answer is expected. The prompt still plays at the listening speed.
Example: Listen at 25 WPM and Send at 18 WPM means you hear fast but may answer more slowly. The sending speed sets how fast the keyer produces your dits and dahs and how long a word pause has to be. At the far left (“same as prompt”), the listening speed applies to the answer too. The lowest sending speed is 10 WPM.
With the straight key (keyer mode Straight) there is no set sending speed: the app measures it from your keying (see below). The Send row is then disabled and shows the measured speed.
After the last word of a block the result page appears:
Next block (right) boosts the ticked weak characters in the next block and starts it. Finish (left) returns to the start view without a boost. Only Apply changes speed, spacing or lesson.
The Koch sequence, Practice set, Spacing and Word selection sections are the same as in Listen (see Settings in the ⚙ sheet (Listen)), but they apply to the Send profile. There are two differences:
Spacing applies to the word played to you and to your answer, as on the Morserino. Your answer counts as finished once you pause this long after a character:
2 × character spacing + 1 + answer pause / 8 (dits at the answer speed)
With a straight key it is answer pause + 1 dits, measured at your own speed (up to 30 WPM; above that the shorter straight-key gaps apply). Example: character spacing 28, answer pause 40, answer speed 18 WPM gives 62 dits, about 4 s. That is how long you may pause between the characters of a group, and how long the app waits after the last character before it scores. If that is too lenient or too slow for you, lower the character spacing; the normal 3 / 7 gives 8 dits. When the adaptive feature shortens the character spacing, the answer gets stricter too. A longer character spacing also gives you more time to begin your answer. The Spacing section has only the character spacing here; the answer pause is in the Echo Trainer section and does not depend on it.
Word selection shows the same call sign settings as in Listen (one value for both).
In addition there is the Echo Trainer section:
| Setting | Meaning | Values |
|---|---|---|
| Think time | Extra time after the played word to begin your answer (for example for head copy). It only applies until your first character | 0–20 s (8 s) |
| Answer pause | Silence after your last character before the answer counts (formula above). It is never played and independent of the character spacing. Also extends the time to begin a little (a third of it) | 6–105 dits (40) |
| Repeats | How often a wrongly answered word is played again before the app reveals it. “Forever” repeats until you get it right | 0–6 (3), Forever |
| Prompt | How the prompt is given. Sound means you only hear it. Display means you only read it, with no audio. Both means you hear it and then read it once it has played | Sound / Display / Both |
| Sending speed (max) | Highest speed for your answer, see Sending speed | same as prompt, 10–50 WPM |
| Tone shift | Your sidetone while answering is half a tone above or below the prompt | No shift / Up ½ / Down ½ |
Prompt = Display is a good way to get from written text to sending, for example to drill new characters.
At the very bottom the ⚙ sheet contains the training goals of Send: your goals with their order, and the rules for when a suggestion comes. The rules are the same as in Listen. As in Listen, the goals change nothing by themselves; the values here apply at once.
In Listen or Send, long press a Koch character (locked ones too) to open Practice: X. In the middle is the same tile as for a tap: the character and its Morse code, whose dits and dahs light up while it plays. The character plays over and over.
After each play you can key the character back, with the touch keyer at the bottom or a connected key, but you don’t have to. Your dits and dahs appear below the line in the tile as you key them. Once the character is complete they turn green (✓ Correct) or red (✗ You keyed: with the character you keyed), and shortly after the character plays again. If you key nothing, it repeats after a pause. That is no error, and nothing is counted or added to any statistics. Back leaves the page.
Above the keyer two sliders set the speed: Listen is the speed the character plays at, Send the speed you key back at (the leftmost step is “same as prompt”; with a straight key it only shows the measured speed). They are the same two settings as in Send, so a change applies there too, from the next play on.
Set the length of the pause with the gear icon at the top right: Pause before repeating, 1–20 s (default 4 s). It applies only to this practice page, not to Send.
This corresponds to “Learn New Chr” or “Preview Char” on the Morserino.
Listen and Send always run in blocks. After each block the app evaluates how it went and gives you at most one suggestion: the next step towards your training goal (e.g. the next Koch character, a shorter spacing, +1 WPM) or, if it goes badly, undoing the last step. None of this happens behind your back. The suggestion appears on the result page, and you decide whether to accept it. Without training goals there are no suggestions.
This chapter explains exactly how the app calculates. You don’t need it to practice, but it helps you understand the suggestions and set the thresholds deliberately.
The app keeps statistics for every character, separately for Listen and Send:
The moving error rate is an exponential moving average (EMA). On every attempt:
new rate = 0.2 × (1 on error, else 0) + 0.8 × old rate
Each new attempt counts 20 % and the past counts 80 %. Recent results weigh more than old ones, but a single slip doesn’t upset everything. For example, a character at 0 % error rate that gets one error is at 20 %. It then takes 3 correct attempts to get back below 12 %, and 8 correct attempts to get below 5 %.
A character’s accuracy is 100 % minus its moving error rate.
What counts as an attempt?
For the training goals the app counts how well the last 100 characters went, in Listen and Send alike:
Only what you practised since the last change counts. When speed, spacing, group length, lesson or sending speed change (by Apply or by hand), counting starts over. So only what you managed at the current level counts. Until 100 characters are together there is no suggestion; after that the most recent 100 always count. The size of your blocks doesn’t matter: short blocks simply need more rounds. The count is kept across sessions, separately for Listen and Send.
With Success threshold low/high (default 70 % / 90 %) the app divides the accuracy of the last 100 characters into three ranges. The thresholds are the same for all goals:
| Accuracy | Meaning | Suggestion |
|---|---|---|
| 90 % and above (high) | Going well | One step towards the active goal |
| 70 % to below 90 % | About right | None |
| below 70 % (low) | Too hard | Undo the last step |
The high threshold is also the accuracy every character has to reach before the next Koch character unlocks.
The next Koch character is suggested when the New characters goal is active and every character of the current lesson meets two conditions. That means all of them, not just the most recently learned one:
Two points matter here:
The suggestion shows New characters + “X”. The 🔊 icon next to it plays the new character three times, without leaving the result page. It shows the same tile as tapping a Koch character: the character with its code below, each element lighting up as it sounds. A tap closes it early. With Not now you stay in the current lesson. A new character is never taken away again, even if it goes badly afterwards; the weak characters and the mix-ups help with that instead.
For Listen and Send you set your own goals separately and decide in which order to work on them. The app works through them one after the other: when things go well enough, it suggests the next step towards the active goal on the result page, and you approve it with a tap. No goal, no suggestion, for each lever on its own. If you set no goals at all, you get no suggestions.
You find the training goals on the Achievements page, via the ⚙ sheet of Listen (its goals) and of Send (its goals), and via the note on the home screen. The Achievements page and the home screen show both trainings next to each other.
| Lever | Step | Listen | Send | Notes |
|---|---|---|---|---|
| New characters | +1 character | ✓ | ✓ | Koch character set only; goal all or a number of characters |
| Character spacing | −1 dit | ✓ | ✓ | Send: not with a straight key |
| Word spacing | −1 dit | ✓ | – | never below the character spacing; no effect when typing, so skipped. In Send it only sets the answer pause |
| Group length | +1 character | ✓ | ✓ | character groups only; one fixed length, a step sets from and to to the next length |
| Speed (Send: Listening speed) | +1 WPM | ✓ | ✓ | |
| Sending speed | +1 WPM | – | ✓ | only with an own sending speed below the listening speed, not with a straight key |
Exactly one goal is active at any time: the first one in your order that is set, not yet reached and in effect right now. A lever that does nothing at the moment (e.g. New characters while practising words, Word spacing while typing) is skipped. So two things never get harder at once, and the app doesn’t have to weigh anything up.
In the training goals you drag a lever by its handle ≡ to its place. A tap on the lever sets its goal; No goal switches it off. Each row shows the current value and the goal, e.g. 5 dits (goal: 3 dits), plus active, reached or why a goal is resting.
What applies right now is in the settings of Listen and Send, as before. The goals only store the target value and the order:
The suggestion on the result page shows which goal is up and where it is in your order (Your goal 2 of 5), the old and new value, the goal with the steps still needed, and why now (Last 100 characters: 93 % right).
After every applied step, counting starts over (see Since the last change).
If you used the app before, your previous behaviour becomes goals, separately for Listen and Send: New characters (all), Character spacing 3, and in Listen also Word spacing 7, in this order. There is no speed goal; speed suggestions only come once you set one yourself. A new install has no goals set.
The Progress tab of the statistics shows Your goals (start → now → goal with a bar for each goal) and the Steps (date, lever, from → to, including undos and reached goals). A speed goal appears as a dashed line in the speed chart.
A character counts as weak if both of these are true:
So a weak character is exactly one that is currently holding back the unlock of the next character. The higher the upper threshold, the sooner a character is boosted after a mistake.
At most the 5 weakest are shown, worst first, with their error rate.
Exception, Listen with the Koch lesson: there a character counts as weak as soon as it has at least 8 attempts and its accuracy is below the upper threshold (exactly what holds back the unlock). Up to 10 are shown, in the “On the way to X” card (see below) when it is visible. Because the rate is tracked over time, a character stays weak until you get it right reliably again. This can take several blocks and sessions.
Tap a weak character to exclude it from the boost (it appears struck through), or to include it again.
In addition to the weak characters, the app suggests mix-ups that keep recurring (e.g. K → R). The suggestions appear where the weak characters do (start view and result page in both), as a second section of the same card, and only where the boost works (random groups). There are at most three pairs. A pair is suggested when
Falling or vanished mix-ups are not suggested. Tap a pair to leave it out (struck through) or take it in again. Both characters of the pair then come up more often in the next block, with the same boost as the weak characters. The characters are merged: a character that is weak and in two pairs is boosted only once, the weights do not add up. Listen and Send count separately; in Listen only typing-mode blocks count.
In Send · Koch lesson · Random the characters are drawn exactly as in Listen (see Koch sequence): two draws in three come evenly from all active characters, every third from the last third. Weak characters you leave ticked in the Weak characters card are favoured in the next block; how strongly is set in the ⚙ sheet under Boost practice set. A mistake therefore does not act at once in the middle of a block but through the statistics in the next block, the same in Listen and Send.
In Listen and Send (start view and result page) this card follows your active training goal. With any goal other than New characters it is titled after that goal, for example “On the way to: Character spacing 3 dits”, and shows two bars:
If space is tight, the card is spaced more tightly. Without an active goal there is no card; the weak characters then appear in their own card.
With the goal New characters (Koch lesson) the card looks the same. The title reads “On the way to: 39 characters”, with “Now 26 characters” below it. If another goal comes first, no new character is added anyway, so that goal’s card is shown instead. With New characters:
q 7. Those missing the most come first.The “Still to practice” list shows at most 10 characters; the rest appear as “+N more”.
The weak characters and recurring mix-ups look the same for every goal: in their own card above “On the way to”, as two sections with a thin line between them. Tap a character or pair to exclude it (struck through).
The start page of Listen (before the first block) shows the same card as at the end of a block, as long as everything fits on the screen. If space gets tight (small display, large font, many weak characters), the card is spaced more tightly and leaves out the character lists. The weak characters and mix-ups then appear in one row (“Practice focus: E 5 Q · 2 mix-ups”). Tapping it opens a sheet from the bottom with all characters and pairs to tick or leave out; Done closes it. The same applies to the Send start view.
From the sixth block on, the status line shows a trend, for example “Trend 87 % ▲”:
The trend is kept across sessions, separately for Listen and Send. The app stores the last 20 blocks for it.
If errors pile up in Listen or Send, or your hit rate drops clearly during a session, the app suggests a short break on the result page. Fatigue and fading concentration show up this way early; a break often helps more than carrying on.
It counts characters, not blocks – it makes no difference whether your block is 5 groups of 3 characters or 10 groups of 5. The check runs at the end of each block, with two rules:
You set the sensitivity in three steps:
| Step | Cluster (wrong in 20 characters) | Drift (first against last … characters) |
|---|---|---|
| Early | from 7 | 40, drop of 12 percentage points |
| Normal | from 9 | 60, drop of 15 percentage points |
| Late | from 11 | 80, drop of 20 percentage points |
“Early” warns sooner but gives more false alarms; “Late” only warns on clear signs.
Anything that makes the task harder is not counted as fatigue: a new character, higher speed, tighter spacing, other content, the interference (on/off and any change of its levels) or the input method restarts the observation. Only characters under the same conditions are compared.
The hint appears at most once per session. A session ends after 10 minutes without a block. Listen and Send are watched separately.
In Send, a word that was not right on the first try counts as wrong from its first wrong character on.
It is never forced. Break returns to the start page, Continue closes the card, Don’t show again switches the hint off.
Settings: Settings → General → Break hint when the error rate rises (on/off) and below it Break hint: sensitivity.
These are in the ⚙ sheet of Listen and of Send under Training goals, below the list of goals. Listen and Send each have their own values: what you set in Listen applies only there, and the other way round. Within one training they apply to all training goals alike. Send takes over the values of Listen until you change them in Send once yourself.
| Setting | Meaning | Values |
|---|---|---|
| Success threshold low/high | Accuracy of the last 100 characters since the last change: from high one step towards the active training goal, below low undoing the last step. High is also the accuracy each character needs for the Koch unlock | 30–99 %, at least 5 points apart (70 % / 90 %) |
| Occurrences per character (“New characters”) | Minimum attempts per character before the next Koch character can come (only the goal New characters) | 5–50 (20) |
Some notes:
Short, regular practice beats long, rare sessions. The app therefore counts your active practice time and shows it on the home screen.
What counts. Time in the trainings (Listen, Send, games, adventure, QSO Bot, Own texts, Morse key) while you are active: you touched the screen or keyed within the last 20 seconds, or a block is playing (copying on paper). The CW Decoder, WiFi Trx and the reference screens (chart, tree) do not count. A day runs from 04:00 to 04:00, so practice after midnight still counts for the evening before.
The card. The ring fills up towards your daily goal and shows a check mark once it is reached. Next to it: the streak (days in a row on which you met the goal) and the week as dots: filled = goal met, ring = open or missed, a ring with a dash = free day. On a small screen or with a large system font the card shrinks to one line, so all tiles stay visible.
Free day. One missed day per week (Monday to Sunday) does not break the streak. It is not counted as a practice day, it only bridges the gap. A second miss in the same week ends the streak. You can switch this off.
Achievements page. Tap the card. It shows today and this week in minutes, a Training goals card (see Training goals) and below them the awards (see below). The gear icon opens its settings:
| Setting | Meaning | Values |
|---|---|---|
| Daily goal | Minutes of active practice per day | 5 / 10 / 15 / 20 / 30 / 60 min |
| One free day per week | Bridges one missed day per week | On / Off |
| Spread over sessions | Each session counts for at most the daily goal divided by 3 or 5, so the goal is only reached when you practise spread over the day (see below) | Off / 3× / 5× |
| Reminder | A notification at the chosen time, only if your goal is still open then. The app asks for the notification permission when you switch it on | Off / On, time (19:00) |
| Show daily goal and achievements | Hides the card and stops recording. The data is kept; switch it on again here or under Settings → General | On / Off |
Weekly review. Below Today and This week a short card sums up one week: practice time, practice days, new characters and error rate, each with the week before in brackets. On Sunday it shows the running week, on every other day the last finished one (Monday to Sunday). The error rate appears from 3 blocks in the week. With no practice that week the card is not shown. No ranking, nothing leaves the device.
Awards. Ten of them, no pop-ups while you practise, only on this page. An earned award shows the day you first reached it; open ones are grey with a lock. Everything stays on the device.
| Award | Condition |
|---|---|
| New character | Unlocked a new character in the Koch course |
| Three in a week | 3 new characters in one week (Monday to Sunday) |
| Weekly streak | At least one new character in 4 weeks in a row |
| Spread out | 3 sessions in one day (at least 5 min each, 15 min apart), also without the “Spread over sessions” setting |
| Spreading as a habit | Practised that way on 5 different days |
| Better than last week | Fewer errors than the week before, at least 3 blocks each |
| Clean run | 3 blocks in a row with under 5 % errors |
| Despite interference | A block with interference switched on and under 10 % errors |
| New speed | A new speed record in Listen or Send |
| Welcome back | Practised again after a break of at least 7 days |
Tap an award: you see what it means, when you first and last reached it, and how often (open ones show only the explanation). What “how often” counts differs per award and is stated in the text there, e.g. new characters, weeks, days or blocks.
Error rates count Listen and Send together. Block awards only work with blocks played after this update.
Spread over sessions. Learning in small chunks works better than one long block. With 3× or 5× every session counts for at most the daily goal divided by that number (15 min and 3×: at most 5 min per session). Practising 45 minutes in one go therefore fills only a third of the ring, while 15 times one minute spread over the day fills it completely. Practice that starts less than 15 minutes after the previous one ended still belongs to that session. The ring shows the counted minutes. Once the current session has reached its share, the card says when practice counts again. Off by default, not everybody has time for several sessions a day.
Reminder. Optional and off by default. At the chosen time you get a friendly notification, but only if your goal for that day is still open. The app plans the next days in advance and re-plans whenever you finish a training or leave the app. If you refuse the notification permission, the reminder stays off.
The 📊 icon in Listen and Send opens that training’s statistics. Listen and Send have separate statistics.
The percentage is a moving average, not an overall rate. Newer attempts count more than older ones: each attempt goes into the value with 20 %. A miss therefore lowers it at once (100 % becomes 80 % at most), and correct answers rebuild it slowly. A character can drop below the threshold after a single miss even if it was flawless before. The tick needs both: enough attempts (default 20) and a current accuracy above the threshold (default 90 %). The bar shows only the attempts, not the accuracy.
Tap a character (a hint on the list says so) to open its detail view as a page of its own, with a back arrow at the top left. It shows:
Progress tab. At the top, switch between Characters (the list above), Progress and Trends (see Trends below). Progress shows how practice develops over time, separately for each training. It fills up from the day this feature was added; earlier practice is not included. Choose 4 weeks, 12 weeks or All:
Trends tab. Shows whether a specific mix-up is becoming more or less frequent, separately for Listen and Send. It compares the mix-up rate of the last 14 days (or 30 days, chip) with the days before. The rate is “how often K was taken for R, divided by all attempts at K”, so practising more does not make a mix-up look more frequent. The pairs are grouped by what needs attention:
Each row shows the pair, arrow, current rate, the rate before, a small weekly curve and the count in the current period. Tap it to open the character. Mix-ups are logged per day only since this feature exists, so the first weeks show just a “Trend from …” hint with a progress bar; there is no trend for the time before.
The reset icon deletes all of this training’s statistics after a confirmation: error rates, weights, mix-ups and the progress. The other training’s statistics are kept. This cannot be undone.
For free keying. What you key is heard and shown as decoded text.
..--..) stays ?.
Seven or more dits in a row are the error sign and show as
ERR. Besides letters, digits and prosigns the keyer
also recognises Ä, Ö, Ü, CH and ; !
" '.::: {.shots one} :::
You set the keyer mode and its details in the global settings under Keyer (see Keyer). They apply everywhere you key: CW Keyer, Send, WiFi Trx, QSO Bot and the games.
The CW Decoder listens through the microphone and writes down what it recognises as Morse code. The signal might come from a radio, a practice program or another Morserino.
On first start Android asks for microphone permission. Without it the decoder can’t work. If you declined, allow the microphone in the Android settings under Apps → APEX CW → Permissions.
The decoder adapts to the speed automatically, so there’s nothing to set. It comes from the firmware. A Goertzel filter detects the tone, and timing logic tells dits, dahs and pauses apart. It keeps learning the current dit and dah length as it goes.
| Setting | Meaning | Values |
|---|---|---|
| Bandwidth | Wide is more tolerant of a pitch that doesn’t quite match. Narrow filters interference better, but the pitch must be exact | Wide (~700 Hz) / Narrow (~175 Hz) |
| Tone pitch | The frequency of the CW tone the decoder listens for | 300–1200 Hz (698 Hz) |
| Threshold | Minimum loudness for a tone to count. Set it just above the grey noise mark | −65 to −10 dBFS (−40 dBFS) |
| Monitor tone | Plays back the detected tone cleanly at the set pitch | Off / On |
| Special characters when decoding | How codes that mean different things in different languages are decoded, see below | Standard / ITU / Fr/Es/Pt / Sv/Fi / Da/No |
Tips
e and t appearing in the pauses
mean the threshold is too low.Some Morse codes mean different letters in different languages, and the brackets exist only in the ITU recommendation (ITU-R M.1677-1). This setting (in the ⚙ sheet of the CW Decoder and the CW Keyer) chooses how they are decoded. It is shared by both and stays saved.
Applies to: CW Decoder and CW Keyer. Does
not apply to: Send, Listen, the games and the QSO Bot. They
always decode with Standard, because they compare what
you key with their own text (e.g. <KN> or AE).
| Code | Standard | ITU | Fr/Es/Pt | Sv/Fi | Da/No |
|---|---|---|---|---|---|
.--.- |
* | * | À | Å | Å |
.-.- |
Ä | Ä | Ä | Ä | Æ |
---. |
Ö | Ö | Ö | Ö | Ø |
-.--. |
KN | ( | KN | KN | KN |
-.--.- |
* | ) | * | * | * |
..-.. |
* | É | É | * | * |
.-..- |
* | * | È | * | * |
-.-.. |
* | * | Ç | * | * |
--.-- |
* | * | Ñ | * | * |
Standard decodes as before. All other codes, Ü
(..--) included, are the same in every set. These letters
cannot be sent yet; the setting only affects decoding.
With WiFi Trx you send Morse over the internet or your local network with other Morserinos, apps and servers. The app uses the same protocol as the Morserino (“Morse over Packet”, MOPP, UDP port 7373). One example is the chat server cq.morserino.info.
The app uses the phone’s existing WiFi or mobile data connection, so there are no WiFi credentials to enter.
At the top you choose the service to connect to. The
default is cq.morserino.info.
Connect connects and Disconnect
disconnects. The line below shows the status. If the server ends the
connection (:bye), the app disconnects too.
WiFi Trx only works while the app is in the foreground.
If your partner is behind a different router, UDP packets on port 7373 must be able to get through. With a public server such as cq.morserino.info this is normally no problem.
The QSO Bot is a simulated partner for complete, realistic radio contacts, without going on the air. The bot sends in CW, understands what you key and reacts to it. It only sounds through the app’s speaker and never sends anything to the network.
cq cq de oe1abc k), it answers you.Each contact uses a new, realistic call sign for the bot.
name, qth, rig,
ant, wx and age, and it remembers
your name.k, bk,
<ar>, <sk> or 73, or
simply pause. The bot won’t talk over you.agn, rpt or
? repeats the bot’s last over. rpt rst,
rpt call, rpt qth or rpt name
repeats just that item.qrs makes it slower and
qrq faster. Your own speed doesn’t change.<err> (eight dits)
or eeee discards your last word.5nn for 599,
t for 0, a for 1, n for 9.de, r and
ur don’t matter, because the bot picks out the
information.These are behind the ⚙ icon in the QSO Bot:
| Setting | Meaning | Values |
|---|---|---|
| Your call sign | Your call sign for the bot. If you call CQ yourself, the call you key is used | empty = OE1XXX |
| Difficulty | Beginner: more patience, 599 instead of 5nn, and the bot sends at your speed. Intermediate and Advanced: the bot sometimes calls at a slightly different speed, as practice for qrs/qrq. Advanced also keeps a tighter rhythm | Beginner / Intermediate / Advanced |
| Contest type | Exchange in a contest | CQ WW / WPX |
| Word spacing | After which pause your word counts as finished. It is shared with the CW Keyer | 6–105 dits (7) |
WPM sets your speed. Long-press the log to clear it after a confirmation.
Own texts lets you listen to any text as Morse code – a weather report, a newspaper article, a book chapter or a list of call signs. You find it under Free modes.
Even quicker: select the text in any app (browser, mail, notes, e-reader), tap Share and choose APEX CW. The app opens Own texts with the same dialog for the title. The same size limit and character handling apply as for pasting.
You can add as many texts as you like. A text can be at most 20,000 characters long. The ⋮ menu next to a text renames or deletes it (after asking). You can’t edit a text in the app: to change one, paste the corrected version. The texts stay on your device.
The text is always shown as you pasted it. Only the audio replaces characters Morse doesn’t have:
! becomes ., ; becomes
,, & becomes AND, dashes become
-. A dash standing alone between spaces is skipped.<KA> or [SK]; they are sent as one
character. A pair of letters without brackets is always two
letters.A paragraph break in the text is sent as a double word gap.
Tap a text, then ▶. At the top you set the speed (WPM) with the slider or ⊖/⊕ – also while the text plays; the change applies at once.
| Button | Effect |
|---|---|
| ▶ / ⏸ | Play; pause (then it goes on from the start of the current word) |
| Word | Repeat the current word, then pause |
| Sentence | Repeat the current sentence, then pause |
| Start | The whole text from the beginning |
| ⏮ / ⏭ | To the start of the previous / next sentence |
| ‹ / › | One word back / forward |
Tap any word in the text to listen from there. Pinch with two fingers to make the text larger or smaller. At the end the text starts again from the beginning.
Progress is saved automatically. When you open a text you have started, the app asks: Continue or Start over. The list shows how much of each text you have heard.
Speed, spacing and display apply to all texts. Pitch and tone softness come from the general settings. The display stays on while you are in a text.
Keep listening in the background: A text that is playing goes on when you turn the screen off or switch to another app. While it plays, Android shows a notification with Previous sentence, Play/Pause and Next sentence; the same buttons appear on the lock screen and on Bluetooth headphones (previous/next jump by sentence). The first time, Android asks for permission to show notifications – without it the text still plays on, but the notification has no buttons. A phone call, another audio app or unplugging the headphones pauses the text. Leaving the text with “Back” ends playback. This applies to Own texts only, not to the other exercises.
The Audio trainer is for head copy with your eyes closed. You hear one group of characters in Morse and type nothing – you only think it. After a pause a voice says the spelling word of every character (Alfa, Bravo, Charlie …) in the order they were sent. You compare what you thought with what you hear and judge for yourself. Then the next group follows. You find it under Free modes.
Nothing is graded and nothing is counted per character, so there is no statistics entry and no heatmap. The time you practise still counts towards your daily goal.
After Start the Audio trainer hides the character-set choice, the description and the tempo, and shows the same running view as Listen: a header line with the content and Koch level, the current phase in the middle, the progress dots, “Group n of N” and the speed, below that the solution (it has a fixed place, so nothing jumps), and Pause and Stop at the bottom. After Stop (or “Back”) everything is shown again as at the beginning.
Pause holds the flow at the next step, Stop ends it. Leaving the screen also stops it.
The page is laid out like the other trainings: the character set at the top (character set, content, Koch lesson), then the description, the status field, the speed and character spacing, and the Start button. Character set, Koch lesson, speed and spacing work as in Listen. Umlauts (Ä, Ö, Ü, CH) are not spoken; they are removed from the group and played neither as Morse nor as voice. A group can therefore come out shorter than set. The interference symbol in the top bar works as in the other trainings (tap: on/off, long press: settings); the noise stands while the trainer runs and affects the Morse, not the voice.
Everything else is in the gear (⚙) at the top:
<AS>). The voice always says the meaning: AS “Stand
by”, KA “Start of message”, KN “Go ahead, named station only”, SK “End
of contact”, VE “Understood”, BK “Break”, AR “End of message”, BT “New
paragraph”, HH “Error”, SOS “Distress call”. Before it you hear, as
chosen, the words “Pro sign”, a tone
(Bell, Harp or Gong)
or nothing (Off). The default is “Pro sign”. The choice
applies from the next spoken prosign; the tones have the level of the
voice.All of these, including the character set, the Koch lesson and the Koch sequence, are stored only for the Audio trainer: changing them here does not change Listen or Send, and the other way round (the first time they are copied from Listen). Only the pitch, the display case and the interference settings are shared with the rest of the app. The display stays on while the Audio trainer is open, but you can turn it off.
In the background and with a headset: The Audio trainer keeps running when you turn the screen off or switch to another app. While it runs, Android shows a notification with Play/Pause and four buttons to adjust it: Slower and Faster (−/+, tempo by 1 WPM) and Shorter and Longer character spacing (arrows towards or away from the bar, by 1 dit; the word spacing follows if needed). The same buttons are on the lock screen. Under the title you see the current values, e.g. “20 WPM · char spacing 3”. A change is saved as in the app and applies from the next group on. Headsets only control play/pause; the Audio trainer has no previous/next, they had to make room for the tempo and spacing buttons (Android has only five slots there). A call, another audio app or unplugging the headphones pauses the trainer. The first time, Android asks for permission to show notifications – without it the trainer keeps running but has no buttons in the notification. “Back” ends the run and returns to the start view; a second “Back” leaves the Audio trainer.
Under Play → Games there are eight entries. The list is longer than the screen; a scroll bar at the edge shows that it goes on. You play Morsel, Morse Invaders, Memory Chain, Trailblazer, Fox Hunt, Fight the Pileup and Radio Cave with the touch keyer or the adapter. They use the keyer settings. Morsel, Morse Invaders, Memory Chain, Trailblazer and Fox Hunt take the Koch lesson from Send, and Morsel, Memory Chain, Trailblazer and Fox Hunt also let you change it for the game only. Each of these seven shows short rules before you start. The text adventure has its own speed and input settings; it also takes the keyer mode from the keyer settings.
Under Practice → Head copy you pick one of three listening modes: Sentences, Q-groups or Mini QSO. This section describes Sentences.
Here you practise understanding Morse without writing it down. You hear one to three short sentences, then answer questions with four answers each. The text stays hidden until the result.
Start. Choose the language of the sentences (German or English; it is independent of the app language), the level (1, 2 or 3 sentences) and the speed, plus character spacing and word spacing (in dits, with the time in seconds below). They apply to Sentences only; on first open the app takes them from Listen, after that they are separate. The effective speed is shown in brackets behind the speed, the result of speed and both spacings (formula under Effective speed). Below the start button you see the hit rate of the recent rounds.
Listening. The sentences play one after the other with a short pause. Listen again replays the whole round as often as you like. To the questions goes on. The interference simulation (icon at the top) works as in the other trainings.
Questions. For each sentence you are asked for its parts, in the order Who? – What does the person do? – Where? – When? (When only if the sentence has a time). A follow-up question names the correct answers of the earlier questions, even if you got one wrong, and never anything asked later. After you tap you see at once what was right. Level 1 asks every part. Levels 2 and 3 ask “Who?” plus one more question per sentence, prefixed with “Sentence N:”. The sentences are unrelated. You can listen to the sentences again during the questions too.
Result. The round’s hit rate (right answers out of all questions), the sentences in plain text, Play with text (the sentence playing is highlighted) and your answers. The sentences are built from blocks and always make sense: places fit the activity. German umlauts are sent as AE, OE, UE, so “Küche” goes out as KUECHE. The time counts towards the daily goal.
Here you learn to understand Q-groups (QTH, QRZ, QRM …) at once when you hear them. You hear a group in Morse and pick from four answers what it means. Like Sentences, it needs no key.
Start. Choose the language of the answers (German or English, independent of the app language), the level (1, 2 or 3; the groups are ordered by how common they are, and each level adds the rarer ones: level 1 has the 8 most common, level 2 has 16 in all, level 3 all 24; below the choice it says what the level means), the questions per round (5 or 10), speed. The speed applies to Q-groups only; on first open the app takes it from Listen. There is no character or word spacing: you hear a Q-group as one whole “melody”, not character by character, and only one group is played at a time, so a word gap would never occur. The characters therefore always run with normal spacing, and the speed is the WPM directly. Below the start button is the hit rate of the recent rounds. Cheat sheet opens the list of all groups.
Questions. The group plays by itself when the question appears; the button at the top right plays it again. You only see which group it was after you answer. Some groups also come as a question (“QRZ?”); then the four answers are questions too. QRM, QRN and QSB only exist as statements. From level 2 on, some are followed by a value, like “QTH WIEN” or “QRG 7030”. The answers come from the groups of your level; two similar meanings (for example QRM and QRN, QRS and QRQ) never appear together in one question.
Result. The round’s hit rate and every question with the group played, the right meaning and your answer. Tap a row to hear the group again. The time counts towards the daily goal.
Cheat sheet. All groups with their meaning, ordered by level, with the question form below (marked with “?”). You reach it from the start and the result, not during a question; All also shows groups outside your level. The meanings are worded the way the groups are used on air. The official ITU wording differs for some: QRL there means “Are you busy?”, QRT “Stop sending”, QTH gives latitude and longitude, and QSP asks for relaying free of charge. For QRP, QRO, QRS, QRQ and QSY the statement is a request to the other station (“Send slower”).
Here you hear a short on-air exchange between two stations in real radio style (“CQ CQ DE OE1ABC K” … “UR 579 QTH BONN NAME TOM BK”) and answer questions about it. As with Sentences you write nothing down and need no key. The abbreviations are the same in both languages; only the questions are translated.
Start. Choose the language of the questions (German or English, independent of the app language), the level (1, 2 or 3; below the choice it says what the level means), speed, character spacing and word spacing. They apply to Mini QSO only; on first open the app takes them from Listen. The effective speed is shown in brackets behind the speed, below the start button the hit rate of the recent rounds.
Listening. Station A (it calls CQ) sounds a little lower, station B (it answers) a little higher than your set pitch, like two signals in the band. The callsigns are random ones as in the QSO bot; names and places are made up. You can hear the exchange as often as you like; the text stays hidden. To the questions goes on.
Levels.
| Level | Exchange | Questions |
|---|---|---|
| 1 | call and answer | callsign, place (QTH) and name of the answering station |
| 2 | as level 1, plus report and one piece of station info (RIG, PWR, ANT or WX) | also report and station info (5 questions) |
| 3 | full exchange of both sides with closing | both callsigns and four randomly chosen items from both sides (6 questions) |
Questions. Four answers to choose from, always in the order you heard the facts. In levels 1 and 2 the station is called “the answering station”. In level 3 the first two questions ask for the callsigns; after that every question names the station by its callsign (“What is the name of DL2XYZ?”), even after a wrong answer. So no question gives away something that comes later, and one mistake does not spoil the rest.
Result. The hit rate of the round, the whole exchange as “A: … / B: …” (with Play with text) and every question with the right answer and yours. The time counts for the daily goal.
A word puzzle like Wordle, but in CW.
<err> (eight dits) deletes the last character.| Setting | Meaning | Values |
|---|---|---|
| Koch lesson | For this game only. It starts at your Send lesson | 2 to the end of the sequence |
| Word length | Exactly 3/4/5/6 letters, or at most 4/5/6 | 3, 4, max 4, 5, max 5, 6, max 6 |
| Clue start speed | Speed of the first play | 10–48 WPM (48, as on the Morserino) |
Longer words need a higher Koch lesson. If too few words are available, the app tells you which lesson you need.
An arcade game. Characters from your Koch lesson fall down four lanes. Key a character to shoot the lowest invader showing it.
| Setting | Meaning |
|---|---|
| Koch lesson | The lesson from Send (change it there) |
| Start level | The level you begin with |
| Sending speed | Keyer speed, counts towards the score |
Results go into a high score list.
A memory game. Each round adds one character, and you key the whole chain from the start, from memory. There is no time limit.
The high score list is kept per mode.
Two maze games on the same grid: 12 × 4 cells filled with characters of your Koch lesson. A path from left to right is hidden in it. Only the part you have already walked is drawn, never the path ahead. The token (grey circle) moves one cell with every right answer; the game is solved at the right edge.
A pileup of stations calls you, and you have to copy them quickly. Call signs line up in a queue and the first one plays in CW, a little lower than your sidetone and at your keying speed. The call sign repeats until you answer. Key it back, and it is sent after a word pause, or at once with Send.
The call signs come from the same generator as in the other modes and follow the call sign settings from the ⚙ sheet of Listen or Send (region, common prefixes only). There is no high score list, as in the firmware. When the game ends, you see score, defended and dropped callers, accuracy and best streak.
A text adventure in an abandoned Cold War radio station: explore twelve rooms, find six items, repair the equipment and finish with a QSO with the remote station IR7. Every command is keyed; the game text is English.
The three classic Infocom adventures Zork I, II and III (1980–82), played in CW: the game answers in Morse, and you enter your commands. Microsoft released the source code under the MIT License in 2025; the app plays the original story files with its own interpreter. The game text is in English only, and it uses the full alphabet, digits and punctuation, whatever your Koch lesson. Zork is a trademark of its owners; the app is not affiliated with them.
Selection. Each part shows its score, moves and last room. Start or Continue picks up where you left off. Saved games opens your saves. New starts over (after asking; your own saved games are kept).
The game screen. At the top the status line with room, score and moves, below it the transcript. The newest answer is played in CW, and the word that is sounding is highlighted. Below that:
| Control | What it does |
|---|---|
| Speed bar | Listening and keying speed, character and word spacing; tap it for Speed & spacing |
| ↻ Again | The sentence that is playing (in the gap right after a word: that word’s sentence; after the end: the last one), then paused |
| Long press ↻ Again | The whole answer from the start (like sending ?) |
| Tap a word | Only that word, then paused |
| Pause / Resume | Pauses playing; Resume goes on from the word where it paused – after ↻ Again from the next word |
| Text (eye) | Shows the whole answer at once; tap again to hide it, then the words reappear as they are played (e.g. with Again) |
| ↶ Move | Takes back the last command (up to 20) |
Keying commands. With the touch keyer at the bottom (keyer mode Straight: the key) or a connected Morse key (see Morse key). The decoder writes into the input line; the character being keyed is shown in orange as · and — after it. As soon as you start keying, the CW output stops.
<AR>
(·—·—·) sends the command at once. With the setting “<ERR> (8 dits; 7 or more count)
deletes the last word, as does the ⌫ Word button.
✕ Line clears the whole input.*.With the setting Input → Keyboard, the on-screen keyboard replaces the dit/dah keys (for listening practice only): ␣ separates words, ⌫ deletes a character, ⏎ sends. A connected Morse key works then too.
Map (🗺). The map icon in the title bar opens a map of the current part. It starts at the current room (orange outline); pinch to zoom, drag to move, ⌖ goes back to the current room. Rooms carry their names from the game (English). Their positions are set by hand, because Zork isn’t drawn to scale; the connections come from the story file.
Command overview (?). The ? in the title bar opens a list of the most important commands and, under Playback, the buttons above; at the bottom, What it’s about briefly gives the story and goal of the current part, how points and moves are counted and what happens when you die. The short forms work in all three parts:
| Command | Meaning |
|---|---|
N S E W, NE NW SE SW, U D,
IN OUT |
Moving |
L |
LOOK: describe the room again (takes a move) |
I |
INVENTORY: what you carry |
Z |
WAIT: wait one move |
G |
AGAIN: repeat the last command |
OOPS word |
Replaces a word the game did not know |
TAKE, DROP, EXAMINE,
READ, OPEN … |
Handling things (Zork has no X for EXAMINE) |
SCORE, SAVE, RESTORE,
RESTART, QUIT |
Game commands |
<AR>, K, <ERR>,
? |
Only in this app: send, send (as its own word, depending on the setting), delete the last word, again |
The game reads only the first 6 letters of a word
(EXAMIN is enough). Separate several commands in one line
with a full stop: TAKE LAMP. N.
Settings (⋮ → Settings; shared by all three parts):
| Setting | Meaning | Values |
|---|---|---|
| Listening | Speed of the CW output | 10–60 WPM |
| Keying | Keyer speed for your input | as listening, 10–60 WPM |
| Character spacing | Pause between characters when playing; part of the word end when keying | 3–45 dits |
| Word spacing | Pause between words; never below the character spacing; part of the word end when keying | 6–105 dits |
| Input | Touch keyer or on-screen keyboard | Morse key, Keyboard |
| Send with | What sends a keyed command (the Send button always works) | <AR>, <AR> or
K, Button only |
| Played in CW | What is played; the rest is only shown as text (italics) | Everything, First sentence, Room / message |
| Show text | When the new answer becomes readable | Always, After playing, Only on tap |
| Room descriptions | How much of a room is described | Brief, Superbrief, Verbose |
| Map: warn before the whole map | Asks before Whole map ⚠ | On, Off |
Punctuation in the audio. The screen always shows the text as the game writes it. Only for playing, characters that Morse doesn’t have are replaced:
| In the text | Played as |
|---|---|
' " ( ) [ ]
* # and others |
left out |
! |
. |
; |
, |
& |
AND |
| Paragraph | double word gap |
Saved games.
SAVE. The name
is suggested (room · score).RESTORE. Tap to load; the current state is saved
automatically first. Long press to rename or delete.RESTART (the game asks).QUIT the app
offers to load a saved game, take back the move, or restart.Under Learn → Learning resources you find help for learning CW that is not a training of its own.
The Morse tree shows all codes in one picture: from the dot at the top, a dit goes left and a dah goes right. The lines show it too: a dit is a dotted line, a dah a thick solid one. A character sits where its code ends, so you can read every code by following the path down to it. Letters are on the first four levels. Digits and signs adds the fifth level with digits and signs; the tree then scrolls sideways. Prosigns such as SK, BK, HH and SOS have more than five elements and do not fit in the tree: they are in a Prosigns row below it. Tap one to hear it and see its code.
Tap a character to hear it. It sounds at your pitch (Settings → General) and at the speed shown below the tree. That speed starts at your Listen speed and can be changed here with – and + (10–60 WPM); the change applies only to this screen. While the character sounds, the path from the top lights up element by element: dit or dah is highlighted exactly when you hear it. Below the tree the code is shown once more as dits and dahs.
With an external key you walk the tree yourself: a dit moves one step to the left, a dah one step to the right, and the node reached lights up. If you pause for a moment, the node reached stays lit and you start again at the top. A step with no branch also starts over. The key must be learned in Settings → Keyer; the touch keys play no role here.
Note on CH (– – – –): the character at the bottom right (four dahs) is a historic national extra character, once common in German- and Scandinavian-speaking countries. It is obsolete in international radio today. Always send CH as two separate letters: C (– · – ·) and H (· · · ·). The app shows this note below the tree as soon as you tap the character. Ä, Ö and Ü can be played here too.
Turn the phone sideways for a bigger tree: the tree screen is the only one in the app that also works in landscape. There the controls sit in one row above the tree, and with Digits and signs the whole tree fits on the screen without scrolling. The rest of the app stays in portrait.
The tree is drawn by the app from the same code table it uses for playing and decoding, so it always matches what you hear.
The character chart lists every character of the app with its code,
grouped into Letters, Umlauts and CH
(Ä, Ö, Ü, CH), Digits, Punctuation and
Prosigns (AS, KA, KN, SK, VE, BK, AR, BT, HH, SOS; AR
and BT have the same code as + and =). Each
code is drawn as dots and dashes.
Tap a character: it sounds at your pitch, and its dots and dashes light up as they sound. The speed starts at the value from the Listen training; − and + change it for this view only. Set the pitch under Settings → General. CH is a historic extra character; tapping it shows a note to always send it as the two letters C and H.
Some countries offer a voluntary Morse exam. Under Learn → Learning resources → Exam simulation you can practise its receive part in the exam’s own format and see whether you would pass. The app does not replace the official exam: the values come from public sources and the real exam may differ.
You first choose a country, then the speed:
| Choice | Variants and rules |
|---|---|
| Austria | 12 WPM, 3 minutes, at most 3 errors (the official limit is not published) |
| Germany | 5 WPM Farnsworth (characters at 9 WPM, long pauses), 5 WPM or 12
WPM, 3 minutes, at most 4 errors, with . , ? = / and AR
(type +) |
| UK | 5, 10, 12, 15, 20, 25 or 30 WPM; plain text 3 minutes (at most 4 errors) or Figures: groups of five figures for 1 minute (at most 3 errors) |
| New Zealand | 5 WPM, 3 minutes, at most 4 errors, up to 5 attempts |
| India | 5 or 8 WPM, 1 minute without a mistake |
| USA | ARRL Code Proficiency: 10 to 40 WPM, 1 minute without a mistake, receive only |
| Custom | your own profile, see below |
::: {.shots one} :::
The card below the choice shows the rules of the chosen exam for both parts (receiving and sending), the source they come from and the kind of text. The plain text is amateur-radio text with figures: German (without umlauts) for Austria and Germany, English for the UK, New Zealand, India and the USA, with call signs and towns of the country in the generated QSO lines. In the custom profile you choose the language. The text is as long in Morse as the exam part lasts (a text of “WPM × 5 characters” would be shorter, because spaces and short characters go quickly). Figure and letter groups are groups of five characters.
Custom lets you define an exam yourself, for receiving and sending alike: overall speed (5 to 40 WPM), character speed (from the overall speed up to 40 WPM; a higher value gives Farnsworth pauses when receiving), minutes (1 to 10), the allowed errors (0 to 10), the retries of a failed part (0 to 5, see Retries above) and the kind of text: plain text (with switches for punctuation and AR at the end), figure groups or groups of letters and figures. The settings are saved. Your runs are listed per combination of settings, so “ready” refers to exactly this exam.
Start receiving begins after a 3 second countdown. The text plays once, without a pause and without a replay, while you copy it into the text field. When it ends you have 30 seconds left to correct your copy (or tap Done). Spaces and case do not matter. Every wrong, missing or extra character counts as one error.
The result page shows passed or not passed, the number of errors against the limit, the characters you copied wrong, the text that was sent (wrong characters in red) and your copy. Recent runs lists your last five runs per exam. After three passes in a row the app tells you that you look ready for the receive part.
The speed and spacing of the exam are set by the profile; your other settings (such as the pitch) are used.
Start sending on the exam page (or On to sending after a receive run) opens the send part. You first see the text and the rules. Start sending begins a 3 second countdown, then the time of the exam runs (three minutes) and you key the shown text with the touch paddle or a Morse key, in the keyer mode set under Settings → Keyer. With a paddle, a WPM slider sets the keyer speed: it starts at the exam speed (at 5 WPM Farnsworth at the character speed of 9 WPM) and you may send faster, up to 40 WPM, but not slower; the setting is remembered per exam. With a straight key there is no slider. The text you have keyed so far is highlighted, and below it you see what the app decoded. A correction (eight dots) deletes the last character, like a correction on paper. Done ends the run early.
The result page shows three checks: the errors (substituted, missing or extra characters, against the limit), how much of the text you reached (at least 80 %) and your speed, estimated from the time between the first and the last element keyed (at least 85 % of the exam speed, measured in real Morse length, so figure groups count as they sound). All three must be fine to pass. Speed and amount of text are estimates by the app and not part of the official rules; an examiner also judges rhythm and readability. Wrong characters are shown in red in the text, and the decoded text is listed below. The runs of both parts appear under Recent runs.
Retries. Where the exam allows a retry of a failed part (Germany: one per part, New Zealand: up to five attempts in all), the result page shows Attempt 1 of 2 and the button changes to Retry. A new text is used for every attempt. When the retries are used up and the part is failed, it counts as failed, as in the exam, and the button becomes New exam. A passed part starts again with attempt 1. Receiving and sending count their attempts separately, and the counting starts again when you leave the screen.
A list of external sites for learning CW: the video course by Heinz (“just me”) on YouTube, LCWO, VBand, WebSDR (listen in on real QSOs through online receivers) and the Morserino-32 homepage. A tap opens the site in your browser. These are independent offers that are not affiliated with this app; the app only links to them and shows nothing of their content.
Every mode where you key shows two areas at the bottom: DIT (left) and DAH (right). In the Straight keyer mode there is a single KEY area that sounds for as long as you press it.
Hiding the touch keys. If you key with a real key on an adapter, you don’t need the touch keys. To hide them, switch on Settings → Keyer → Hide touch keys when an adapter is detected. When you teach the dit and dah keys, the app also remembers your adapter and recognises it as soon as you plug it in. Without teaching on the adapter (or if you taught it earlier), it detects the adapter the first time you send a dit or dah with it. An ordinary USB or Bluetooth keyboard never counts. The touch keys then disappear in all modes; the keyer symbol in the title bar shows that an adapter is detected (see below). When you unplug the adapter, the touch keys come back. The “A real Morse key is better” tip no longer appears then.
The keyer symbol. The title bar of many screens (Listen, Send, practice, games, Morse chart and more) shows a symbol for the external key. It is dimmed while no adapter is detected and lit once one is. Tapping it opens the keyer settings. On screens where you do not key yourself you can also try the key out: dit and dah sound there with your Send settings (speed, pitch, keyer mode). It stays silent while a block runs. On the result page in Send the key chooses: dah (–) = Next block, dit (·) = Finish; the two buttons then carry a “-” or “.”.
A phone has no Morse key input. You need a small USB adapter that turns the key contacts into key presses:
Older phones with micro-USB need a USB OTG adapter.
Settings → USB CW adapter has a short hint with two links that open both of the above in your browser: the ready-made vband adapter and the instructions for the homemade one.
This tells the app which key your adapter sends for dit and which for dah:
Name (1a86:7523)). The small key
symbol in front is lit while the adapter is plugged in, and dimmed
(faint text) when the app only knows it but it is not connected.So there’s no list of supported adapters. The app learns whatever keys your adapter sends.
If an adapter doesn’t behave as expected, use Settings → Analyze Key Events. Press Start analyzer, then press the keys. The app lists every key event it receives, so you can see whether the adapter sends anything and what it sends. Stop analyzer ends the display.
Open the global settings with the gear at the top right of the home screen. They apply to the whole app. Anything that concerns only one training is in that training’s ⚙ sheet.
Changes apply immediately. Right after you change a switch, a choice or a slider (in the settings and in the ⚙ sheets), a bar at the bottom shows “Changed: …” with Undo for a few seconds. One tap on Undo restores the previous value, for example after touching a control by accident while scrolling. A newer change replaces the bar, so Undo always refers to the last change.
| Setting | Meaning | Values |
|---|---|---|
| Theme | Light or dark look, plus five more dark themes | System / Light / Dark / Amber / Red / Green / Warm grey / Navy & orange |
| Blue light filter | Warm colour filter over the whole app (light and dark), easier on the eyes in the evening | Off / On |
| Filter strength | How strongly blue is reduced (only shown while the filter is on) | 10–100 % (50 %) |
| Hide status bar | Hides the Android status bar (clock, battery) so it does not clash with the blue light filter; swiping down from the top shows it briefly | Off / On |
| Use the space at the top | Only shown while the status bar is hidden. The title bar moves up into the freed strip beside the camera cut-out and gets slimmer (smaller text and icons, title independent of the system font size and shortened if needed so it does not end up behind the camera), so the content below gets more room. With a wide notch, a hole in a corner or too little room beside the camera (very narrow phones) the normal layout stays | Off / On |
| Language | App language. Until you choose one, it follows the phone’s language: Deutsch on a German-language phone, English on any other | Deutsch / English (by phone) |
| App shortcuts | Opens the list of shortcuts a long-press on the app icon shows (Listen, Send, Audio trainer, CW Keyer, CW Decoder, Own texts, Games, Character chart). Switch each on or off and drag it by the handle into place. Most launchers show only the first four that are on; any further ones are marked “most launchers won’t show this” | Listen, Send, Audio trainer, CW Keyer on, the rest off |
| Setting | Meaning | Values |
|---|---|---|
| Pitch (Hz) | Frequency of the sidetone and of the played characters | 300–900 Hz in 50 Hz steps (600 Hz) |
| Tone softness | Rise and fall time of the tone. Larger values sound softer and click less, especially on short dits | 1–9 ms (5 ms) |
| Letter case | Show characters in lower or UPPER case. Display only | lower / UPPER |
| Confirmation tone | Short tone after grading: high for right, low for wrong. Classic is the two tones of the Morserino firmware, Marimba two soft marimba notes, Gentle a single note with a light vibrato (both stand out clearly from the Morse tone). When you pick one you hear “right”, then “wrong”; tapping the chosen one again plays it again | Classic / Marimba / Gentle / No tone |
| Break hint when the error rate rises | Suggests a break in Listen and Send when errors pile up or the hit rate drops clearly under the same conditions (see Break hint) | On / Off |
| Break hint: sensitivity | How early the hint comes (only shown while the hint is on) | Early / Normal / Late |
| Do not disturb while practising | While a training screen is open, switches Android’s Do Not Disturb to “priority” and back afterwards, so other apps stay quiet. Calls and messages you allowed in the Android settings still come through. Needs Do Not Disturb access for APEX CW: the setting then shows a button to grant it, and one that opens the Android Do Not Disturb settings so you can switch it on yourself | On / Off |
| Show daily goal and achievements | Shows or hides the card on the home screen, and switches the recording of practice time on or off. Stored data is kept | On / Off |
With Settings → Interference the other station sounds as if it came over a real band: with noise, static crackle, fading, a neighbouring station, drifting pitch and a “bad fist”. That trains you to read a signal under poor conditions.
The interference only affects what the other station plays: the text when listening, the word when sending, Own texts, QSO Bot, WiFi Trx, Text Adventure, Morsel, Memory Chain, Trailblazer and Fox Hunt. Practicing a single character, the Morse chart and the Morse tree also play with interference while the switch is on, and show the wave icon as well. Your own sidetone while keying always stays clean. The statistics do not record whether you practiced with or without interference.
Quick switch: screens with another station show a wave icon in the app bar (next to statistics and the gear). Grey means off, coloured means on. A short tap switches the interference on or off, a long press opens these settings.
| Setting | Meaning | Values |
|---|---|---|
| Simulate interference | Main switch | Off / On |
| Constant noise | Noise and QRM stay on for as long as an exercise, block or game is running, also between characters and under your own keying (your sidetone stays clean). When listening and sending this means a whole block, until the result appears; in Morsel, Memory Chain, Trailblazer, Fox Hunt and Fight the Pileup a game; in QSO Bot and WiFi Trx the session or connection; in Own texts only during playback. More realistic, but more tiring. Off: the interference is only heard while the other station is sending | Off / On |
| Preset | Ready-made mixes. You can change every slider of a preset directly; the change is kept for that preset. A small “Default” button (circular arrow) appears as soon as a preset differs from its defaults and resets it. “Custom” keeps its own values and has no reset | Custom / Light / HF evening / Pile-up |
| Noise (SNR) | Signal-to-noise ratio, measured in a fixed 2.4 kHz bandwidth. The noise swells and ebbs slowly and contains occasional crackle | 0 % (no noise) to 100 % (SNR −10 dB), shown in dB |
| Noise colour | How bright the noise sounds | 0 % dull (treble cut from about 800 Hz) to 100 % bright (about 3.2 kHz) |
| Receiver filter | Narrow CW filter around your pitch. The narrower it is, the more noise and neighbouring station it removes. At a very narrow setting the remaining noise sounds like a wavering tone | 0 % wide to 100 % very narrow (Q 1.5 to 20) |
| QRM (other station) | A second station sends random Morse in runs of 3 to 12 characters (12 to 28 WPM), 100 to 350 Hz above or below your tone, then pauses. 100 % is as loud as your signal | 0–100 % |
| QSB (fading) | The level varies slowly (periods of about 30 to 125 s) by up to about 8 dB | 0–100 % |
| Pitch (drift) | The pitch wanders slowly, up to about ±30 Hz at 100 %. With a narrow filter the tone can drift out of the passband | 0–100 % |
| Timing (bad fist) | Dits, dahs and gaps are uneven, the station sometimes hesitates | 0–100 % |
The presets start with (noise / QRM / QSB / pitch / timing / receiver filter, noise colour always 50 %):
| Preset | Values |
|---|---|
| Light | 15 / 0 / 10 / 0 / 0 / 30 % |
| HF evening | 35 / 20 / 45 / 10 / 15 / 50 % |
| Pile-up | 55 / 60 / 35 / 15 / 30 / 60 % |
Try it plays four random groups of five with the speed and spacing of your Listen training, so you get an impression of how it sounds in the training. A known text like “CQ CQ DE …” would be much easier to read through noise than random groups.
These settings apply wherever you key.
| Setting | Meaning | Values |
|---|---|---|
| Mode | How the keyer reads the keys (see below) | Iambic A / Iambic B / Ultimatic / Non-Squeeze / Straight |
| Swap on-screen paddles | Puts dah on the left and dit on the right of the two touch buttons. Affects only the on-screen buttons, not the keys of an adapter (those stay as you taught them, see Learning the dit and dah keys). Not shown for Straight | Off / On |
| Hide touch keys when an adapter is detected | Hides the touch keys in all modes once an adapter has sent a dit or dah; the keyer symbol in the title bar shows that an adapter is detected (see Touch keyer) | Off / On |
| CurtisB dit timing | Iambic B only: from what percentage of a dit a press on the other key is already stored | 0–100 % in steps of 5 (75 %) |
| CurtisB dah timing | The same for dahs | 0–100 % in steps of 5 (45 %) |
| Auto character spacing | Enforces a minimum pause between characters so they don’t run together. Not available for Straight | Off / 2 / 3 / 4 dits |
| Straight key start speed | Straight only (replaces Auto character spacing): first estimate for the speed measurement, see Straight key | 5–40 WPM (15) |
| Timing analysis in the CW Keyer | Straight only: turns on the rhythm display in the CW Keyer, see Straight key: rhythm analysis. Works only with a key on an adapter | Off / On |
The keyer modes
With the straight key you don’t set a speed. The app measures it from your keying, like the Morserino: from the length of your dits and dahs (a running average) it derives the speed, the dit/dah threshold and the character and word gaps. If you key more slowly, longer pauses are allowed automatically.
With a straight key on a USB adapter (e.g. VBand) the CW Keyer can show how evenly you key. The analysis is off by default: Settings → Keyer → Timing analysis in the CW Keyer (only visible in keyer mode Straight). As soon as an adapter with a straight key is detected and the analysis is still off, the CW Keyer shows a tip; tapping it jumps to the settings, the ✕ hides it for good. If the analysis is on but no key on an adapter is detected, a dismissible note with a link to the guide appears. With the touch keys there is no analysis, because the touch screen lags too much; with paddles it would make no sense.
The app measures the times from the system’s timestamp of the key press, not from its own clock. Short contact bounce of the adapter (under 20 ms) is filtered out. A pause of more than 15 dit lengths (thinking, the end of a phrase) is not counted as a gap, so a break doesn’t lower the number. When the analysis is switched off or the adapter is unplugged, the panel starts afresh.
The Rhythm panel shows:
Gaps under two dit lengths count as “gap in character”. If you leave a very short gap between two characters, you therefore see a too long “gap in character” or merged elements, not a too short letter gap.
See Learning the dit and dah keys and Analyze key events.
| Setting | Meaning | Values |
|---|---|---|
| Active | Shows where the sound is going right now | – |
| Output | Automatic follows whatever is currently plugged in or connected. The other options fix the output. Only outputs that are currently available are offered | Automatic / Speaker / Wired/USB / Bluetooth |
| Bluetooth hint when keying | Shows a hint above the keys when the sound plays over Bluetooth (delay about 100–250 ms) | on (default) / off |
| Row | Meaning |
|---|---|
| Developed by | Christian Konecny, OE1CKO |
| Thanks | Morserino-32 (OE1WKL), app icon, testing and ideas (Sia, OE1LMR), Zork (Infocom) |
| Version | Version number and build number, for example “1.0.0 (Build 42)” |
| Commit | The exact source code state the app was built from |
| Built | Date and time of the build |
| Online manual | Tap to open this manual online in your browser (German or English, following the app language) |
| Licences | Tap to open the licence texts (see below) |
When you report a problem, please include the version, commit and build time.
Licences: The app is free software under the GNU General Public License v3.0 (or later). It takes algorithms and data (word lists, abbreviations, call sign prefixes, QSO texts) from the Morserino-32 firmware by Willi Kraml, OE1WKL, which is also under the GPL-3.0. The source code is on GitHub. The licence page also shows the MIT License of Zork I–III, the SIL Open Font License of the fonts Anonymous Pro and DM Sans, the CC-BY-SA-4.0 licence of the word lists (derived from the FrequencyWords project), and the licences of the Flutter packages the app uses. The confirmation tones “Marimba” and “Gentle” are the app’s own sounds (computed from sine waves) and are also under the GPL. The spoken spelling words of the Audio trainer were generated with Piper from the public-domain voice models “kristin” and “bryce” (script in the source code); the tones before prosigns (“Bell”, “Harp”, “Gong”) are the app’s own sounds, computed from sine waves. Zork is a trademark of its owners; the app is not affiliated with them, nor with Infocom, Activision or Microsoft.
You set the Koch sequence in the ⚙ sheet of Listen or Send when the Koch lesson character set is selected there. It applies to all trainings and games, though.
| Sequence | Description |
|---|---|
| LCWO | The lcwo.net order (41 steps: letters, digits and
. , ? = /; no prosigns) |
| CW Academy | The CW Academy (CWops) beginner order (44 steps, ending
x z BK SK .; + is AR, = is
BT) |
| LICW | The Long Island CW Club order (44 characters) with an entry point (see below) |
| Morserino | The Morserino-32 order (51 steps):
m k r s u a p t l o w i . n j e f 0 y v , g 5 / q 9 z h 3 8 b ? 4 2 7 c 1 d 6 x - = SK + AS KN KA VE BK @ : |
| Custom | Your own order |
LICW entry point (0–13): in the LICW course, students join a “carousel” at different points. The entry point rotates the sequence so that it starts there.
Custom: enter the characters in the order you want
to learn them. Duplicates are ignored, and the app shows how many
characters it found. The default is
esno0tqr5ucd9al8ix1myj7h4gvkfz3b.6/w2p?, the order of the
YouTube Morse course by “Heinz – just me” (playlist).
Prosigns: the Morserino sequence contains the six
prosigns SK, AS, KN, KA, VE and BK exactly where the firmware puts them
(mostly at the end). The CW Academy and LICW sequences contain only the
prosigns of their courses, SK and BK (+ and =
stand for AR and BT); LCWO has none. These three follow the original
courses and stop where those stop. A prosign is a lesson step of its
own: it appears as a two-letter tile, is played as one character (not as
two letters) and turns up in random groups. Words and abbreviations
contain no prosigns. They are left out of the games (Morsel, Memory
Chain, Maze, Invaders), where every character has to fit into one box.
The LICW carousel follows the firmware rule: its window holds the
prosigns that fall inside its 18 or 44 characters (SK and BK); the
others do not occur there. In Custom and in the
practice set you write a prosign in angle brackets,
e.g. esn<KA>t<SK> (allowed: AS, KA, KN, SK, VE,
BK); it counts as one character. Without brackets KA is two
letters.
The app gives the Morserino-32 menu items plain names. If you come from the Morserino or read its manual, this table helps:
| Morserino menu | In the app |
|---|---|
| Interchar Spc | Character spacing |
| InterWord Spc | Word spacing |
| Random Groups | Group characters |
| Length Rnd Gr | Group length |
| Length Words | Max word length |
| Length Abbrev | Max abbreviation length |
| Length Calls | Max call sign length |
| Calls Region | Region (under Call signs) |
| Max # of Words | Groups per block / Words per block |
| Stop<Next>Rep | Stop after each group / Stop after each word |
| Koch Sequence | Koch sequence |
| Practice Set | Practice set |
| Boost Practice | Boost practice set |
| Echo Prompt | Prompt |
| Echo Repeats | Repeats |
| Echo Speed Max | Sending speed (max) |
| Tone Shift | Tone shift |
| Confrm. Tone | Confirmation tone |
| AutoChar Spc | Auto character spacing |
| Output Case | Letter case |
| Keyer Mode | Mode (under Keyer) |
| CurtisB DitT% / DahT% | CurtisB dit timing / dah timing |
The names of the keyer modes (Iambic A, Ultimatic …) and of the Koch sequences (Morserino, LCWO …) are the same as on the Morserino.
Some Morserino-32 features are missing from the app, because a phone doesn’t have the hardware or Android handles it already. These are the rotary knob and buttons, the display, LoRa, ESP-NOW (and with it the multiplayer parts of the games), iCW/Ext Trx and keying a real transmitter, firmware updates and the WiFi setup page. Instead of the firmware’s Practice Stats, the app has its own, more detailed character statistics.
Not done yet, but planned: the games Trailblazer, Fox Hunt, Radio Cave and Fight the Pileup.
The app doesn’t key when I press my Morse key. Learn the dit and dah keys (see Learning the dit and dah keys). If nothing arrives, check with Analyze key events whether the adapter sends anything at all.
Sound comes out of the wrong device. Fix the output under Settings → Audio output.
When sending, I hear my tone late. This is almost always Bluetooth headphones. Use wired headphones or the speaker.
The next Koch character doesn’t come. Open the 📊 statistics in Listen. The characters without a tick are holding up the unlock. Usually it’s a character with too few attempts or recent errors. See When the next Koch character comes.
The pauses never get shorter. The app only suggests steps towards your training goals, one after the other. Set a Character spacing or Word spacing goal; if New characters comes before it, the pauses only come up after that. You can shorten them yourself at any time with the speed and spacing card.
The decoder only writes garbage. Check pitch, bandwidth and threshold (see Decoder settings). Only turn on the monitor tone with headphones.