DTMF CONSOLE

A seven-tone (0-6) DTMF line for sending text, images, and files as audio.

Text mode

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.

Image mode

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.

Hex / file mode

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.

Station ID

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.

Reference: tone pairs

1209 Hz1336 Hz1477 Hz
697 Hz123
770 Hz456
941 Hz-0-

Get the app

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.

← back to KE9GDP