Skip to content

ggerganov/ggmorse

Repository files navigation

ggmorse

Actions Status License: MIT ggmorse badge

Morse code decoding library

ggmorse2.mp4
ggmorse-0.mp4
ggmorse-1.mp4

Try it out

You can easily test the library using the free GGMorse application which is available on the following platforms:

Download on the App Store Get it on Google Play

Simply start the application and place your phone near speakers or radio that plays some Morse code. The speed and frequency of the transmission will be detected automatically by the application and you should be able to see the decoded text in real-time.

Browser Demo: https://ggmorse.ggerganov.com/

Details

The library decodes Morse code transmission in real-time from raw audio captured via microphone.

  • Automatic pitch detection: [0.2, 1.2] kHz
  • Automatic speed detection: [5, 55] WPM

Todo

The current library implementation is not very user-friendly when it comes to using it in external projects. Still, if you want to try using it in your project and have trouble in getting it to work, let me know and I can try to help you.

The next version of the library would be in a much better state. These are the things I want to improve before releasing v0.2.0:

  • Improve the C and C++ interface
  • Add tests
  • Add examples
  • Reduce memory allocations
  • Clean-up the algorithmic part

Depending on the level of interest this gets, I can also provide various language bindings, similar to ggwave.

Examples

The examples folder contains several sample applications of the library:

Example Description Audio
ggmorse-to-file Output a generated waveform to an uncompressed WAV file -
ggmorse-gui GUI application for decoding Morse code SDL

Building

Dependencies for SDL-based examples

[Ubuntu]
$ sudo apt install libsdl2-dev

[Mac OS with brew]
$ brew install sdl2

[MSYS2]
$ pacman -S git cmake make mingw-w64-x86_64-dlfcn mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2

Linux, Mac, Windows (MSYS2)

# build
git clone https://github.com/ggerganov/ggmorse --recursive
cd ggmorse && mkdir build && cd build
cmake ..
make

# running
./bin/ggmorse-gui

Emscripten

git clone https://github.com/ggerganov/ggmorse --recursive
cd ggmorse
mkdir build && cd build
emcmake cmake ..
make