The window below is laid out exactly as the pyqtgraph app will be. The signal is simulated from the numbers measured on your desktop beeper, with hand-keying jitter added, so the plots move the way the real ones will.
Spectrum 0–8 kHz · 2048-point FFT · 43 msATone power at 2491 Hz· last 10 s · threshold with hysteresisBDecoded · letters appear at each gap, a long gap adds a spaceC
Current letter
Dit— msDah— msLetter gap— msReverb offset— msMark lengths, last 30
Encode · type a message, read it as Morse, follow the keying guide or play itD
WPM
Duration—s
Dit · dah—
Letter gap · word gap—
Tone2491Hz
Play keys the tone through this machine's speakers, so the decoder above can be tested without the desktop.
● Listening480-sample blocks0 dropped00:00
Simulation
A
Spectrum
What the mic hears, 0 to 8 kHz. The amber marker sits on the tone frequency; the faint marker at 3f shows the beeper's third harmonic, which is 11 dB down on your speaker. Auto-detect averages this view for a second and snaps the marker to the strongest peak.
B
Tone power and ON/OFF strip
Energy at the tone frequency, one point per 10 ms, scrolling over the last 10 seconds. The dashed pair is the hysteresis threshold, drawn from the tracked floor and peak. The strip beneath is the detector's verdict, the tape a Morse operator would read.
C
Decoded text and timing
The letter being keyed builds up as dots and dashes and is committed at the next letter gap. On the right, the live estimates that drive the decoder: dit, dah, letter gap and the reverb offset, plus a histogram of recent mark lengths that should show two clusters.
D
Encode
Type English, read the Morse. Letters are separated by a space and words by a slash. The bar underneath is the keying guide: marks and gaps drawn to scale at the chosen speed, with each letter labelled, so you can follow it while pressing the button. Play keys the tone through the speakers and runs a playhead along the guide.
•
Right rail
Input level in dBFS with a peak-hold tick, a 6 ms slice of the band-passed input so a dead microphone is obvious at once, and the key numbers as readouts. The detector pill lights amber on every mark.
Decisions to confirm
Spectrum range. 0 to 8 kHz shows the fundamental and third harmonic. The plan said 300 Hz to 5 kHz; this is wider on purpose.
Speed defaults to Auto. The decoder estimates dit length from your keying. Manual is a fallback for very uneven presses.
Save 30 s writes the recent audio to a WAV file for test fixtures. Drop it if you never want files written.
Encoder placement. A full-width strip under the plots, always visible. It could instead live in a second tab if you want the decoder view taller.
Window size. Designed for about 1100 by 880 pixels with the encoder. Panels stretch with the window.