G0HYN - Robbie Robertson





Free Learn Morse App

Teach Morse (web only)

Free  Morse Reader App

Android - Morse reader app

Playback runningHelp with menu


Help with menu

Information and download page for my Android morse reader app.

It should be used with caution as the app is still new, and therefore may act unpredictably, especially on devices that it hasn't been tried upon before.

The app is designed to decode into plain text incoming audio morse, either via the devices built in microphone, or via an interfaced  connection (similar to that used for digi-modes).


It can also if desired, record the incoming audio for later playback. This allows you to try different setting on the same audio for maximum decode (sort of a training aid if you like). It is worth noting, that as the app records unaltered whatever is presented at the mic/audio input, that is could be used to record anything, remembering that as the sampling rate is low, the recorded quality is not the highest.

There is an inbuilt file selector that points into the devices storage area where the apps recorded files are kept, allowing you to replay current and older audio recordings.
It also allows you to share the recorded files with other apps that can handle .wav format.

The output audio recording is saved in WAV format, so it could be played (or manipulated) by other apps, or even transferred to other devices for replay/analysis/manipulation.

The app itself has completed Alpha testing, Beta testing, and is now at Production release (via Google Play, and the link below).

NEWS FLASH - Now available from Google Play store (free of course). Search for 'Morse code reader' or 'RX Morse'

The procedure below is still valid though... but you may find it easier to use Google Play.

WARNING: Please be aware that I have found the Android Chrome browser does not react well to the download request (continuously opening new tabs and I had to stop the browser app manually).
It does work ok with the standard 'Internet' browser built into my Samsung devices, the Firefox browser (which installed on my Nexus 7 from Google Play), and also via email attachment install.

To install this test version you may have to enable 'Unknown sources' in your Android devices Security settings. I'd suggest enabling, installing the app, and then disabling to be safe.

Note: There are no in App downloads, purchases, or any attempts to communicate with anything external to the device it's installed upon i.e. once installed the app is completely self contained.
Only permissions it requires are read/write to external storage so that it can create/manage recording files, and Record Audio so that it can access the mic input.

Ok, after all that scary stuff, if your still reading and interested in downloading the app, here's the link to the latest release...

icon Link for G0HYN - RX Morse latest version APK file

To help get you going, I've created a couple of short videos of Beta 1.1 and uploaded them to YouTube (Need to update really):

Link to quick start guide.

Release History:

Beta 1.0 - Initial build post Alpha testing

Beta 1.1 - Changed Graphic display to show Red bar when app believes it's 'in morse'

Beta 1.2 - Jan-2016 - Added 'Share' to playback options to allow 'sending' of recorded file via external Apps (DropBox, gMail,etc.)

Beta 1.3 - Jan-2016 - Amended 'Share' information to remove full path and use filename only

Beta 1.4 - Feb-2016 - Improved sensitivity of input (i.e. less volume needed from source without winding up the gain)

Beta 1.5 - 29-Feb-2016 - Added click actions to playback text field (single cycles font size, long-click clears text).
Also added single click to settings, stats, and file play fields to invoke Filter Settings screen, Help screen, and Playback File selector respectively

Beta 1.6 - 22-Oct-2016:
            Change background colour to customborder.xml so that playback field can be found easier for touch action
            Change radius of corners in customborder.xml from 20 to 10
            Added font cycling to help activity
            Added lowercase/uppercase flip to main menu. Note only a...z flips to A...Z (and back again)

Beta 1.7:   28-Oct-2016
            Added AGC which adjust the main gain to achieve a target level, within a tolerance range
            Made 'standard' screen layout changes to get more text lines on Samsung Galaxy Ace
            Added AGC settings for Level, Speed, and Tolerance (including AGC On/Off and reset to defaults)
            Added invoke of AGC settings via single click in image field
            Added AGC settings help text

Beta 1.8:   06-Nov-2016
            Added playback file time remaining (elapsed obviously still used for record)
            Added 'All' settings screen to encompass Filter, AGC, and general settings
            Added save/restore of all adjustable parameters (on app stop & start)
            Added 'hide' of gain slider when AGC is active, plus recovery to manual when AGC is switched off

Production 24-Nov-2016
Beta 1.8 promoted to production release.

Beta testing devices:
  • Samsung Galaxy Ace
  • Samsung Galaxy Trend 2 Lite
  • Samsung Galaxy S3
  • Samsung Galaxy S5
  • Samsung Galaxy Tab 3
  • Asus Nexus 7

Quick start guide

On start up the app has been designed to have all additional features active, so if you simply want to try decoding some audio morse that is coming out of a radio's loudspeaker, then just position your Android device next to the audio source ...

You should hopefully see an amplitude representation of the audio source appear in the graph area as a series of vertical lines moving left to right.

Although the app will attempt to boost the incoming audio by applying Automatic Gain Control (AGC), if the height of these lines is very low (i.e. the vertical lines are very small), then I would suggest one of the following to 'boost' the incoming:

  • Move the device nearer the source (I put my phone on top of my Yaesu HF rig's speaker)
  • Increase the volume of the source i.e. turn the radio volume up (but you don't want to annoy anybody by having it too loud)
  • On the app move the gain slider to the right (if you have AGC Off), and you should see the signal size increase (be careful not to turn it up too much though i.e. keep it less that full height of the display)
I'll assume you have reasonable signal strength at this point...  What we are looking for is the green dashed horizontal line positioning itself within the incoming audio height), you can of course adjust the threshold level, but it needs to be above zero, and we don't want it 'buried in the noise'.

You will be able to tell when you are breaking the threshold level as the vertical bars will be blue or red in colour for those above it.

To be honest, it's a lot easier to do, than it is for me to describe... :o)

So if you have a signal that is going above the threshold, and it's not just background noise, then the app will attempt to locate morse tones and the morse 'digits' which make up each character.

If the app is finding morse, then you should see:
  • Tone field displaying an approximation of the tone frequency that has trigger it 
  • Speed field changing as the app estimates the speed of the incoming morse
  • Morse field displaying what the app is decoding in Dots and Dashes e.g. [-.-.]
And finally, if all is going well, the lower text field will be displaying the decoded morse in 'plain text' :o)

If not, the first line of attack is to vary the signal strength and the threshold level to see if there is a simple combination that produces solid decode of the morse.

I would certainly expect the app to react well to 'generated' code (i.e. that coming from a practice generator of PC program), and have watched it decode at 50wpm (generated by a 'turbo' version of my morse teaching app), but live signals are another matter as they may have a lot of background noise, so you may need to read on ...

Additional features:

So you've had a quick play, and now want to see what else the app can do...

Record Record

Pressing Record from any mode will start the recording of the incoming audio. The background colour will change to red to show the app is in record, and the timer will increment to show the length of time recorded so far.

From record, you can press:

PlaybackTo stop & save the recording, and immediately playback what you have just recorded (see playback for further details)

StopTo stop & save the recording, and go back into Listen mode

Playback Playback
If you have just stopped recording, of have selected a previous recording, then pressing 
Playback will start the playback of the audio, the background colour will change to Green to show app is in playback, and the timer will increment to show the length of playback so far.
Record and playback share the same control, so you can play the same file over and over with different setting if desired to achieve maximum decode. The recorded audio file remains unchanged.

Pressing pauseduring playback 'pause' the audio, the background colour will change to blue to show app is paused, and the timer will stop incrementing. Pressing pauseagain will recommence at the point it was paused playback.

Pressing Stopwill halt playback, and switch the app back into listen mode.
Pressing Playbackwhilst already in playback will restart playback from the beginning of the file

Auto FilterFilterFilter active

Although the app tries to ignore 'false triggers' that result from a noisy signal just happening to match a morse tone and be valid enough to make it consider it to be a morse digit, there is a Bell band pass filter included, and can be activated by pressing Filter
The icon will change colour to 
Filter active(meaning active), and pressed again to deactivate the auto filter.
As the aim of this filter is to boost the morse tone frequencies (center of filter should automatically adjust itself to match the incoming morse tone), then you may find that the levels with this range are raised so high as to exceed the maximum desired, and although no harm can result, it can severely distort the manipulated signals waveform (i.e. clipping). You can usually hear this as a change in sound of the playback (not whilst recording).

If you think this is happening, you can either:

  • Manually turn down the incoming audio at it's source e.g. the radio
  • On the app move the gain slider to the left, and you should see the signal size decrease
  • Activate the automatic gain limiter (see separate description) which will incrementally decrease the gain (as long as it's greater than 1.0)

Gain Limiter Gain LimiterGain limit active

To help avoid the signal distortion (clipping) that can occur if the audio signal is too high (i.e. trying to exceed the maximum height of the display which represents the systems audio maximum), there is the additional feature of an automatic Gain Limiter, which when activated, monitors the audio and notes when it would exceed the maximum level allowed without distortion.  If it decided distortion is happening, then it will keep incrementally turning done the gain until the distortion stops.

The icon will change colour to Gain limit active(meaning active), and pressed again to deactivate the Gain Limiter.


  • If the gain has reached 1.0, then it will not attempt to decrease it further (if this is happening, then you most likely need to turn the input audio down, or try turning of the filter, if active that is)
  • To avoid turning down the gain too much in response to short transients, the monitor counts how many potential exceed there has been in a known period, and it only take action when the tolerance limit has been reached. That said, if you find it's forcing the gain down too much, then you may have to switch this feature off, and manually adjust the gain for best results...
Auto Threshold Level Auto levelAuto levle active

To help where the incoming audio is varying in strength, pressing 
Auto levelwill activate the automatic threshold level function, which will monitor the incoming audio strength and keep the threshold level the percentage of that strength as set by the level slider.

So for example if you set the level slider to 50 and press Auto levelthen the fixed red threshold line will change to a varying green dotted track at 50% of the incoming audio. PressingAuto levle activewill deactivate auto level, and revert to the fixed percentage of maximum volume. You may need to adjust the fixed threshold line to the appropriate position for decode.

Automatic Gain Control (AGC)

To help maintain stable signal strength for decode, the app employs Automatic Gain Control (AGC).

AGC is active by default, but can be toggled Off/On is desired via the AGC settings screen (see AGC settings under the menu section)

When AGC is active, addition indicators appear on in the graph area:

graph area

  • Main Gain - Black dotted line which tracks the main gain level
  • Input maximum average - Yellow dotted line which tracks the input max average
Note: These additional lines may be removed in the future, when the 'best' AGC parameters are determined

While AGC is active, the main gain slider is not updated (unless gain limiting occurs), but the main gain value is


Playback file

Selection will bring up a file selector screen containing a list of your recordings:

Playback selector
Once the desired filename is pressed, a further dialogue is displayed with the options:

Playback dialogue
  • Share externally - Allows sharing of record files via other Apps (Dropbox, Google Drive, Gmail, etc.). Upon return from external sharing, the file list is redisplayed
  • Delete - Deletes the selected file from device storage, and the file list is redisplayed
  • Select for playback - Selects the file for playback, and main screen redisplayed... press Playto start playback of the file
  • Rename - Allows renaming of recorded file to something more memorable e.g. g0hyn-cq. Once the selected file is renamed, the file list is redisplayed
To exit without making a selection, either press your Android back button, or  <G0HYN-Current... (top left of screen)


From Beta 1.8, all settings are combined onto one single screen (which is scrollable if needed on smaller devices), and are separated into the following:

Filter settings

Filter parameters

Filter parameters and controls:

Here you can use the slider control to set:
  • CF - The filter Center Frequency i.e. the frequency at which the filter has the maximum effect. Note - Auto filter now automatically adjusts the CF to match the incoming morse tone, but you can still force this to a new starting point.
  • BW - The Bandwidth of the filter. A smaller value will give a narrower range of effect
  • Q - The gain of the filter. Higher equals more gain, but be careful not to introduce clipping...
You can also:
  • Q Limiter is On/Off - Toggle the filter auto gain limiter On/Off (Beta 1.8 startup default now Off)
  • CF Track is On/Off - Toggle filter center frequency tracking On/Off
The aim here is:
  • To understand if the filter is useful, and if so,
  • Do we need to have parameters that are user adjustable.
  • What the useful values are
Note: For testing, additional information may be displayed by the app in the text field below the sliders. At present it at a minimum displays the full file path of the last .wav file used (recorded or selected), which should be a useful to find where on your specific device they are being stored (it varies from device to device I'm afraid...)

AGC parameters

Automatic Gain Control (AGC) parameters and controls:

Here you can use the slider control to set:
  • Level - Target level the AGC attempts to maintain. Expressed as a percentage of maximum input level the devices input system can provide
  • Speed - Gain delta applied to the main gain, which effectively controls the 'speed' at which the AGC attempts to adjust the input levels i.e. the larger the 'speed', the quicker the main gain is adjusted
  • Tolerance - Tolerance 'range' in which the AGC attempts to maintain. Expressed as a percentage of the AGC level, the aim being to avoid constant 'hunting' to the main gain once the target level is within the tolerance range
You can also:
  • AGC is On/Off - Toggle the AGC On/Off. When the AGC is active additional indicators will appear on in the graph area:
Main Gain - Black dotted line, which tracks the main gain level
Input average - Yellow dotted line, which tracks the input max average
  • AGC Defaults - Reset AGC parameters to their default (app start up) values:
AGC Level - 40%
AGC Speed - 0.05
AGC Tolerance - 5%

The aim here is:
  • To understand if the filter is useful, and if so,
  • Do we need to have parameters that are user adjustable.
  • What the useful values are
Note: For App testing and debug, there may also be app internal values displayed on this screen

General settings

Lowercase On/Uppercase On

The alpha characters of the decoded text can be displayed in either lowercase (app default at start up), or uppercase'.
Switching between the cases is achieved via a button within general settings, and will either display 'Lowercase On' or 'Uppercase On'. Pressing the button simply switches between the two, so a-z becomes A-Z and back if selected again (i.e. it flips between the two).

Remaining On/Elapsed On

When playing back previously recorded files, the time displayed can either be:
  • Time remaining to end of file (Remaining) - app default at start up
  • Time elapsed from start of file (Elapsed)
Switching between the cases is achieved via a button within general settings, and will either display 'Remaining On' or 'Elapsed On'.

To exit, either press your Android back button, or  <G0HYN-Settings (top left of screen)


When help is selected, the overview help screen will be displayed:

From the overview help screen, you can either:
  • Select a topic from the help screen menu (see above screenshot), and the help text for that topic will be displayed
  • Press one of the control buttons (see top of screenshot), and a description of it's usage will be displayed
To exit, either press your Android back button, or  <G0HYN-Help (top left of screen)

Touch features:

The following 'touch' features allow you to:

Invoke the following screens, 'single touch' the associated area of the main screen (effectively menu shortcuts):
  • Help - Speed/Tone/Morse
  • All settings (filter, AGC, and general) - Filter/BW/Time or Graph
  • Playback file - Playback filename
Aid readability, within the decoded text area:
  • A 'single touch' cycles one step through a built-in set of four character sizes. At start up the smallest is used, with successive touches increasing the size, until it recycles back to the smallest size.
  • A 'long touch' clears the screen of all decoded text
  • A 'touch & drag' allows scrolling through the text if larger than the area available. Note: If in listen mode and a new character is decoded, the text area will always 'jump' to the bottom of the text decoded so far to display the new character.

email address: [email protected] for any questions, feedback, issues found, or to request .apk file via email.

Thanks, 73 Robbie G0HYN