APEX CW

User Manual

Christian Konecny, OE1CKO

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.

1 Introduction

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.

Where the app comes from

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.

About this manual

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.

2 Getting started

2.1 Installation

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.

  1. Copy the APK file to your phone, for example by messenger, e-mail or USB cable.
  2. Tap the file in your file manager. The first time, Android asks whether the app you install from may install unknown apps. That might be your file manager or browser. Allow it for that app.
  3. Confirm the installation.

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.

2.2 The home screen

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.

The home screen
Free modes: five tiles

2.3 Controls inside the trainings

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.

2.4 Light, dark, language

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.

2.5 Sound and volume

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.

3 Basics

3.1 Speed in WPM

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.

3.2 Spacing in dits: character spacing and word spacing

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.

3.3 Effective speed

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.

3.4 The Koch method

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.

3.5 Prosigns

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.

4 Getting started: learning Morse step by step

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.

The basic ideas

How to practice well

4.1 Step 1: Hear characters (Listen, Koch lesson, Random)

Open Listen and set:

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.

4.1.1 When it moves on

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.

4.2 Step 2: Words, abbreviations and sentences

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:

4.3 Step 3: Send yourself

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:

4.3.1 The key: optimum and alternative

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.

4.4 Step 4: Shorten pauses, raise speed

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:

  1. Shorten the pauses. Goals Character spacing 3 and Word spacing 7. After good blocks the app suggests one dit shorter at a time until the normal 3 / 7 dits are reached. You can also do this yourself: with Character spacing and Word spacing in the card below the practice area.
  2. Then raise the speed. A Speed goal, e.g. 25 WPM. The app then suggests +1 WPM per step. Small steps, no jumps.
  3. If it goes badly, it goes back. If the last 100 characters are below the lower threshold (70 %), the app offers to undo the last step. That is not a punishment but the right move: better one step back than skipping everything.

All suggestions appear on the result page. You decide with Apply or Not now (see Training goals).

4.5 Step 5: Add interference

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:

  1. Light: little noise and slight fading.
  2. HF evening: noticeable noise, fading and a neighbouring station.
  3. Pile-up: demanding, with a loud second station.

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.

4.6 Afterwards: practice where it is fun

Once the basics are in place, you can use everything else with a purpose:

When it doesn’t move on

5 Listen: practice copying

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.

5.1 Choosing the character set and content

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.

Listen start view: character set, content, Koch lesson, weak characters, spacing and speed

5.1.1 Setting the Koch lesson

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):

Tapping a Koch character: tile with its Morse code

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).

5.1.2 Prosigns

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>).

Prosigns character set in Listen: the ten prosigns as tiles

5.1.3 Practice set

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.

5.2 Speed

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.

5.3 How a block runs

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.

  1. Press Paper. After one second of “Get ready …” the block begins.
  2. The app plays the groups one after another, with the set word spacing in between. Only “Group n of N” (for words “Word n of N”) and the speed are shown, not the text. Copy on paper.
  3. After the last group, Sent appears, with each group as its own tile. Compare it with what you copied.
  4. Marking errors: tap a group where you made a mistake. It opens large, one character at a time. Tap every character you got wrong or missed, then Back. Tapping a character again removes the mark. The marked characters show in red in the overview.
  5. Done · n errors finishes the evaluation. The results are saved now, and the result page appears.
During the block: progress only, no text
Revealed: groups with errors are red
One group opened: tap the wrong characters

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.

5.3.1 Stop after each group

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.

5.4 Copying on the on-screen keyboard

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:

  1. Press Type. After one second of “Get ready …” the app plays the first group (or word). “playing …” is shown below the answer line.
  2. You can type along while it plays or wait until it has finished; both work. There is no time limit.
  3. Checking: as soon as you have typed as many characters as the word has, the app checks automatically (after the word has ended plus a short 0.4 s, during which you can still correct with ⌫). ⏎ Check hands in earlier, for example when you missed a character. If you press ⏎ while the word is still playing, the app checks right after the word ends.
  4. ✓ Correct: the next word comes after about one second. Whatever you type during that second counts for the next word.
  5. ✗ Wrong: the word is played again at once, with an empty field. Your previous attempt is shown small and struck through above it, without a hint where the error was. “Attempt n of max” shows which attempt this is. With the setting After a wrong answer → Learn (see below) there is no second attempt: the word sounds once more, each character is shown below as dots and dashes (the one sounding lights up), then the next word follows. Only the first attempt is still graded; a Pass also shows the lesson (with the error tone, all characters red). Wrong characters are red and also framed, so they stand out in the Red theme too.
  6. Pass: at any time, also while the word plays. After the last wrong attempt or a pass, the app shows the solution for 2 seconds (the characters wrong in the first attempt in red) with your attempts below it, then moves on.

::: {.shots one} After a wrong answer → Learn: the word as dots and dashes, the sounding character lights up :::

Typing: the keyboard, only the lesson’s characters are active
Wrong: the word plays again, attempt 2 of 2

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.

Sent after a typed block: first-attempt errors marked, your input below

How it is counted:

The arrow at the top left cancels the block; nothing is saved then. The keyboard is portrait-only for now.

5.5 The result page

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.

Result page with accuracy, spacing, weak characters and progress card
A weak character excluded (struck through)

5.6 Settings in the ⚙ sheet (Listen)

The ⚙ sheet of Listen has the following sections. Values in bold are the defaults.

⚙ sheet: Koch sequence and practice set
⚙ sheet: Spacing, Word selection, Flow

5.6.1 Koch sequence

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.

5.6.2 Practice set

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.

5.6.3 Spacing

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.

5.6.4 Word selection

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)

5.6.5 Flow

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

5.6.6 Training goals in the ⚙ sheet (Listen)

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.

⚙ sheet: After a wrong answer, Adaptive mode
Training goals: list for Listen and Send

6 Send: Echo Trainer

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.

6.1 Start view

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.

Send start view
While answering: prompt (Prompt = Both), attempt and speed

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.

6.2 How a word runs

  1. After Start the app waits 2 seconds, then plays the first word.
  2. Your answer: key the word back. Your sidetone is shifted by half a tone so you can tell prompt and answer apart. This is the Tone shift setting.
  3. When you have to start: from the end of the prompt you have about 1.4 seconds, plus one character pause, plus a third of the answer pause, plus the Think time (default 8 s) to begin your answer. If nothing comes by then, the word counts as wrong.
  4. When the answer ends: once you have started, the think time no longer applies. The answer is complete as soon as you pause long enough after a character (formula under Settings in the ⚙ sheet), at sending speed.
  5. Correcting: key <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.
  6. Grading:

Whether the prompt is played, shown or both is set with Prompt (see below).

6.3 Sending speed

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.

6.4 The result page

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.

Result page: accuracy, progress, weak characters
A training-goal suggestion (here: new character)

6.5 Settings in the ⚙ sheet (Send)

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:

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.

Send ⚙ sheet: the Echo Trainer section

6.5.1 Training goals (Send)

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.

6.6 Practicing a single character

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.

Practice: a character, keyed back correctly

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.

7 Adaptive mode

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.

7.1 What the app tracks

7.1.1 Per character

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?

7.1.2 Since the last change

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.

7.2 The two thresholds

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.

7.3 When the next Koch character comes

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:

  1. at least 20 attempts (the Occurrences per character setting), and
  2. an accuracy of at least 90 % (the high success threshold).

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.

7.4 Training goals

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.

7.4.1 The levers

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

7.4.2 Order and active goal

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.

7.4.3 Goals and settings

What applies right now is in the settings of Listen and Send, as before. The goals only store the target value and the order:

7.4.4 Accepting a suggestion or later

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).

7.4.5 After the update

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.

7.4.6 In the statistics

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.

7.5 Weak characters

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.

7.5.1 Practising recurring mix-ups

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.

7.5.2 Character selection in Send

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.

7.6 Progress card “On the way to X”

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:

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.

Listen start view with the compact “Practice focus” row
The row’s sheet: weak characters and mix-up pairs to tick or leave out

7.7 Trend

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.

7.8 Break hint

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.

7.9 Adaptive mode settings

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:

8 Daily goal and streak

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
Achievements page: daily goal, week and awards
Achievements settings

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.

9 Character statistics

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:

Detail view in Listen: weekly curve, unlock
Detail view in Send: last 30 attempts, curve, mix-ups

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:

Progress tab (Listen): hit rate, speed and days practised over 12 weeks
Below it the heatmap: practised characters, week by week
Progress tab (Send)
Progress tab (Send): timing of the straight key over time

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.

Listen statistics: attempts, accuracy, ready
Send statistics with common mix-ups
“Trends” tab (Listen): new, growing and fading mix-ups
“Trends” tab (Send)

10 CW Keyer

For free keying. What you key is heard and shown as decoded text.

::: {.shots one} CW Keyer ⚙ sheet: Special characters when decoding :::

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.

CW Keyer with decoded text

11 CW Decoder

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.

11.1 Operation

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.

CW Decoder listening, with level meter
Decoder settings

11.2 Decoder settings

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

11.3 Special characters when decoding

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.

12 WiFi Trx

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.

12.1 Services

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.

12.2 Sending and receiving

WiFi Trx only works while the app is in the foreground.

WiFi Trx with service, log and text field

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.

13 QSO Bot

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.

13.1 Starting

  1. Choose the QSO type: SOTA/POTA, Standard or Contest.
  2. Press Start. The bot listens for 5 seconds:

Each contact uses a new, realistic call sign for the bot.

A QSO with the bot, answered with the text field

13.2 QSO types

13.3 Talking to the bot

13.4 QSO Bot settings

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.

QSO Bot settings

14 Own texts

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.

14.1 Adding texts

  1. In any app, copy a text to the clipboard.
  2. In Own texts, tap Paste from clipboard.
  3. Give the text a title (the first words are suggested) and tap Add.

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.

14.2 What is sent

The text is always shown as you pasted it. Only the audio replaces characters Morse doesn’t have:

A paragraph break in the text is sent as a double word gap.

14.3 Playing

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.

Own texts: the library
A text playing (display: After playing)

14.4 Settings (⚙)

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.

⚙ sheet of Own texts

15 Audio trainer

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.

Audio trainer: start view

15.1 The view while it runs

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.

Audio trainer while running: the group’s solution

15.2 How a group runs

  1. Morse: the app plays one group.
  2. Thinking pause: silence, long enough to finish thinking the characters.
  3. Solution: the voice says one spelling word per character, in the order sent, with a short pause between the characters. The group appears on screen while it is spoken, in the display case you set and colored as everywhere in the app (letters, digits, and punctuation/prosigns each in their own color); the character being spoken is bold, the others are dimmed.
  4. Pause between groups, then the next group starts by itself. After the set number of groups (Groups per block) the block ends.

Pause holds the flow at the next step, Stop ends it. Leaving the screen also stops it.

15.3 Settings

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:

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.

16 Games

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.

The games

16.1 Head copy

Under Practice → Head copy you pick one of three listening modes: Sentences, Q-groups or Mini QSO. This section describes Sentences.

Head copy: the three listening modes

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.

Sentences: start view with language, level, speed and spacing

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.

Sentences: the round plays, the text stays hidden

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.

Sentences: a question with four answers

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.

Sentences: result with the plain text and your answers

16.2 Q-groups

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.

Q-groups: start view with level, questions per round and speed

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.

Q-groups: the group has played, four meanings to choose from

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.

Q-groups: result with the group played and its meaning

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”).

Q-groups: the cheat sheet

16.3 Mini QSO

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.

Mini QSO: start view with level and speed

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.

Mini QSO: the exchange plays, the text stays hidden

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.

Mini QSO: a question about the exchange

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.

Mini QSO: result with the whole exchange

16.4 Morsel

A word puzzle like Wordle, but in CW.

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.

Morsel before the start

16.5 Morse Invaders

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.

Morse Invaders before the start
Morse Invaders in play

16.6 Memory Chain

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.

Memory Chain before the start

16.7 Trailblazer and Fox Hunt

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.

Trailblazer before the start

16.8 Fight the Pileup

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.

Fight the Pileup before the start

16.9 Radio Cave

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.

Radio Cave before the start

16.10 Text adventure

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).

Choosing one of the three parts

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)
Game screen with touch keyer

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.

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.

Map: Visited
Confirmation before the whole map
Map: Whole map

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.

Command overview, “What it’s about” at the bottom

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
Settings: speed & spacing, input
Settings: played in CW, show text, rooms, map

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.

Saved games of one part

17 Learning resources

Under Learn → Learning resources you find help for learning CW that is not a training of its own.

Learning resources: Morse tree, character chart, links

17.1 Morse tree

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.

Morse tree: the path to Q lights up
With digits and signs: the tree scrolls sideways

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.

Landscape: letters
Landscape with digits and signs: the whole tree fits

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.

17.2 Character chart

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.

Character chart: a character lights up while it plays

17.3 Exam simulation

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} Exam simulation: choose country and speed :::

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.

17.3.1 Custom profile

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.

17.3.2 Sending

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.

Links to courses and practice sites

18 Morse key

18.1 Touch keyer

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 “.”.

18.2 A real Morse key or straight key

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.

18.2.1 Learning the dit and dah keys

This tells the app which key your adapter sends for dit and which for dah:

  1. Plug in the adapter.
  2. Go to Settings → USB CW adapter → Learn dit/dah keys.
  3. When “Press Dit key …” appears, press the dit key. When “Press Dah key …” appears, press the dah key.
  4. “Saved” confirms it. The detected keys are listed under Dit and Dah; below them, under Adapter, the name of the device with its USB id (vendor:product, e.g. 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.

18.2.2 Analyze key events

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.

19 Settings

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.

Settings: Appearance, General
Interference and Keyer
USB CW adapter, key events, audio output, Info

19.1 Appearance

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
Appearance: with “Hide status bar” on, the switch “Use the space at the top” appears

19.2 General

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

19.3 Interference

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.

19.4 Keyer

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

19.4.1 Straight key: automatic speed

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.

19.4.2 Straight key: rhythm analysis

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.

19.5 USB CW adapter and Analyze key events

See Learning the dit and dah keys and Analyze key events.

19.6 Audio output

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

19.7 Info: version and build

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.

19.8 Koch sequence

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.

19.9 Morserino terms

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.

20 What the app does not do (yet)

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.

21 Troubleshooting

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.