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