Code Monkey home page Code Monkey logo

pymorsetrainer's Introduction

A simple Morse code trainer written in Python for the Koch method with Farnsworth timing.

Installation

This program requires Python 3 with PyQt5, PySounddevice and Scipy installed.

The recommended way to install these is by your distributions package manager or pip.

For example, on Arch Linux you can use

pacman -S python-pyqt5 python-pysounddevice python-scipy

to install the required dependencies.

About the Koch method

The Koch method was developed by German psychologist Ludwig Koch to speed up training of new telegraphy operators.

To quickly recognize Morse characters, the operator needs to intuitively tell the characters apart by their sound alone, because cognitive decoding processes are too slow. Before Koch developed his method, Morse operators would often "hit a wall" at around 10 words per minute, and take a lot of (often frustrating) practice to proceed past that "wall".

For that reason, training takes place at a speed of at least 20 words per minute. At this speed, cognition is not able to keep up with decoding each letter, and the brain is forced to associate the sounds directly with the letters, without unconsciously constructing "decoding tables".

Afterwards, the operator will be able to use Morse code at a comfortable speed with potential to get faster with even more practice.

To allow training to drop to lower speeds, the Farnsworth timing was developed. In Farnsworth timing, the letters are unchanged, but the pauses between letters and words may be lengthened.

At first, newer operators will only be required to distinguished between two characters of morse code. When they are able to copy a random stream of these two characters accurately (i.e. with 90% accuracy or larger), they have mastered these two letters. After that they can proceed to the next lesson, where another letter is introduced, until the whole alphabet is learned.

Koch noted during experiments, that certain orders of letters allowed his students to learn a lot quicker. For that reason, the letters in this applications are ordered according to such a recommendation.

License

This program is licensed under the GNU General Public License version 3.

See file COPYING for details.

pymorsetrainer's People

Contributors

yayachiken avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

pymorsetrainer's Issues

Fails on OSX due to Qsettings.allKeys() behavior

Gives the following error on a clean install, in OSX:

Traceback (most recent call last):
  File "/usr/local/bin/pymorsetrainer", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.8/site-packages/pymorsetrainer/__main__.py", line 28, in main
    mw = MainWindow()
  File "/usr/local/lib/python3.8/site-packages/pymorsetrainer/pymorsetrainer.py", line 53, in __init__
    self.initUI()
  File "/usr/local/lib/python3.8/site-packages/pymorsetrainer/pymorsetrainer.py", line 98, in initUI
    lessonCombo.setCurrentIndex(int(self.settings.value("currentLesson"))-1)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

This is an OSX quirk. self.settings.allKeys() will always return truthy on OSX, even on the first startup. OSX shoves in all sorts of parameters like com/apple/trackpad/twoFingerDoubleTapGesture and com/apple/TimeZonePref/Last_Selected_City. And in your case, the settings.setValue() calls never get called. A proposed fix would be to test if any of those five values return None, and if so, write them.

Get rid of Numpy dependency

We only need Scipy to apply a low-pass filter to the Morse stream. Otherwise, we would get nasty clicks whenever the carrier is switched on or off.

This introduces quite a bit of bloat. In addition, we need only a very primitive low-pass filter. Reimplementing this would get rid of this more or less useless dependency.

(Note: We also use Numpy for convenience, we could get rid of this as well.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.