My latest project brings together amateur radio and .NET: Morse Code Trainer. I wanted one application for practicing Morse by ear or by watching a flashing light, translating messages, and experimenting with decoding signals from a microphone or camera.
The first version is taking shape with .NET 11, MAUI Blazor Hybrid, and a standalone Blazor WebAssembly app. The source is now public on GitHub. This is an early preview, with physical-device testing still ahead.
The browser version will be available at morsecode.mynoc.com once the first deployment is complete. It is hosted on Azure Static Web Apps.

Learning the rhythm
Practice mode generates short character groups, starting with a small set of letters and expanding to the full alphabet or numbers. Play the sequence, type what you recognize, and check your answer. You can replay it as sound, screen flashes, or both, with a score kept for the current session.
Character speed and effective speed are separate controls. That allows Farnsworth spacing: characters retain their rhythm while longer gaps give you more time to recognize them. Pitch and volume are adjustable too. A reference view lets you play individual characters when you want to work on a particular letter or number.
Sending and receiving
The translator works in both directions using International Morse: letters, digits, and common punctuation. Enter text to generate dots and dashes, then play the result with tones or screen light. You can also enter Morse to turn it back into text.
The receiver takes a different path. Microphone input measures a selected tone, while camera input measures changes in brightness around the center of the image. Both feed the same streaming decoder, which turns signal timing into characters.
This part still needs real-world testing across devices. Speed, pitch, and detection threshold are selected manually; background noise, camera exposure, and lighting all affect the result. It is intended to recognize Morse tones and flashes, rather than transcribe speech or read printed symbols. Light output uses the screen.
One shared application across platforms
The native targets are Windows, Android, and iOS. MAUI Blazor Hybrid hosts shared Razor components, and the browser version uses those same components in a standalone Blazor WebAssembly SPA. The Morse alphabet, timing, encoding, decoding, and training logic live in a separate Core library, with device access behind interfaces.
The web app only needs static hosting. Signal processing stays on the device: recordings, video, and decoded transcripts are not uploaded. Practice results currently live in memory, so there is no account or database to set up.
Each source assembly has its own MSTest project, with NSubstitute used at dependency boundaries. GitHub Actions are configured to run tests and platform builds, and enforce 90% line coverage for shared code and changed shared code. That coverage measure excludes Razor markup and native platform glue, so device testing remains a separate part of the work.
Follow the project
The project currently targets .NET 11 RC2. The next steps include testing microphone and camera behavior on physical devices and preparing signed native packages. It is a development preview, not a store release.
You can browse the current application on the work/initial-setup branch. The README has setup instructions, supported platforms, and the details needed to run the browser app locally.
Morse Code Trainer is a myNOC LLC project. Copyright © 2026 myNOC LLC.