A seven-tone (0-6) DTMF line for sending text, images, and files as audio.
Each letter is sent as a base-7 pair of tones: a = 01,
b = 02 ... z = 35, and 00 is a space.
Type a message, encode it, then play the tones live or save them as a WAV file.
An 8x8 grid with a 7-color palette. Since the palette size matches the tone set, each pixel is sent as a single tone -- no pairing needed. Paint the grid, encode, then play or save.
Open any file and its raw bytes are converted to a hex string. Each hex nibble (0-15) is split into a base-6 pair of tones (digits 0-5, since 6×6 = 36 covers all 16 possible values). On the receiving end, the decoded hex is reassembled back into the original bytes and saved to a file -- a full round trip for arbitrary files over DTMF audio.
Every transmission opens with the operator's callsign spoken letter-by-letter
(NATO phonetic alphabet, digits read the aviation way -- 9 is "niner"). If a
transmission runs past 10 minutes, the callsign is re-sent partway through. The
closing ID also names the station's site. A dedicated Sign off
button speaks the callsign followed by QRT to end a session cleanly.
| 1209 Hz | 1336 Hz | 1477 Hz | |
|---|---|---|---|
| 697 Hz | 1 | 2 | 3 |
| 770 Hz | 4 | 5 | 6 |
| 941 Hz | - | 0 | - |
Implements all of the above -- text, image, and hex/file modes, live mic decoding, and the station-ID system.
Python source requires numpy and sounddevice
(pip install numpy sounddevice). The EXE is a standalone
Windows build with no dependencies needed.