Signal Lab

An oscillator bank and a signal analyzer, pointed at each other: generate a tone, a touch-tone digit, a Bell System MF pulse, or the 2600 Hz that once told a trunk it was idle, and watch the decoder name it back. That round trip is the point.

Audio is off until you ask for it. Nothing here starts an audio context, let alone makes a sound, before you press Enable audio; the level ramps in gently and a limiter sits across the output. Headphones can still be loud, so start quiet.

Rendered when the site was built, from the same frequency table the decoder uses. No JavaScript required, and no audio. With JavaScript on, the interactive lab replaces this.

DTMF: the touch-tone grid

Every key is one row tone plus one column tone. Two frequencies, deliberately not harmonically related, so no voice sound could imitate a digit by accident.

DTMF keypad frequencies
Row \ column1209 Hz1336 Hz1477 Hz1633 Hz
697 Hz123A
770 Hz456B
852 Hz789C
941 Hz*0#D

Bell System MF (R1): between the switches

The digits switches sent each other, framed by KP (key pulse, start of a number) and ST (start, end of it). These travelled in the same channel as the call.

Bell MF symbols
SymbolLow toneHigh toneWhat it meant
1700 Hz900 Hzinter-office MF digit
2700 Hz1100 Hzinter-office MF digit
3900 Hz1100 Hzinter-office MF digit
4700 Hz1300 Hzinter-office MF digit
5900 Hz1300 Hzinter-office MF digit
61100 Hz1300 Hzinter-office MF digit
7700 Hz1500 Hzinter-office MF digit
8900 Hz1500 Hzinter-office MF digit
91100 Hz1500 Hzinter-office MF digit
01300 Hz1500 Hzinter-office MF digit
KP1100 Hz1700 Hzkey pulse: opens an MF digit string
ST1500 Hz1700 Hzstart: closes an MF digit string

Supervisory, coin and call-progress tones

2600 is the famous one: a single tone that said this trunk is idle, in band, where anyone on the call could put it.

Supervisory, coin and call-progress tones
SymbolClassFrequenciesWhat it meant
COINCOIN1700 + 2200 Hzcoin-acceptance tone; the count of bursts is the denomination
2600SF2600 Hztrunk idle / supervisory: control sharing the voice channel
2400SF2400 Hzthe 2400 Hz half of two-frequency SF signalling
DIALPROGRESS350 + 440 Hzdial tone: the switch is ready for digits
RINGBACKPROGRESS440 + 480 Hzaudible ringing: the far end is being rung
BUSYPROGRESS480 + 620 Hzbusy: the far end is off-hook
1004TEST1004 Hzmilliwatt test tone: the reference level of a circuit

Coin cadences

All three denominations are the same 1700 + 2200 Hz pair. Only the number and length of the bursts differ, which is exactly what a red box imitated, and exactly what the decoder counts.

Red-box coin cadences at 1700 + 2200 Hz
CoinBurstsBurst lengthGap
nickel166 msnone
dime266 ms66 ms
quarter533 ms33 ms

Offline, signal-cli does both halves: signal-cli coin nickel --out n.wav then signal-cli decode n.wav.

About this toy2 paragraphs

Why it is worth knowing: 2600 Hz was control signalling sharing a channel with the conversation. Anyone who could make the sound could speak the network's own language: the audible ancestor of SQL injection and prompt injection. One channel, two kinds of meaning.

It runs offline via signal-cli, which synthesizes a WAV and decodes one back to symbols.

Use it locally This toy has a native command line twin. Build signal-cli from the site's source with:
cargo build --release --bin signal-cli
Source and licence terms