Press play and you hear the dial-up sound the way a modem actually made it, generated live in your browser rather than played back from a recording. The whole handshake goes first - off-hook, dial tone, DTMF digits, ringback, the ANSam answer tone and its phase reversals - and underneath it modem runs a real Bell 103 connection at 300 baud between two machines over their sound cards.
The overture is a reconstruction. The FSK connection underneath it is real.
Fast data-over-sound tools such as minimodem already move bytes across a room quicker than this ever will, and that is not what this is for. They have no interest in the dial tone, the DTMF, the answer tone or the negotiation, because none of it makes them faster. This performs exactly the parts a fast tool has no reason to want.
Try it now
Three ways in. Watch a full handshake and a real connection right here, nothing to set up. Or open this device as one real end of an acoustic call - dial from one, answer on the other, the sound genuinely crossing the room between them.
Sound help
If Dial looks like it is running but nothing plays: check the mute switch and the volume, then try Resume sound below. This tracks what the audio pipeline has actually done, not just whether a button responded.
Demo - both ends live, right here
Two real sessions, cross-wired in software exactly as the binary's own split-screen demo wires them - the link never crosses the air, so this is genuinely DEMO MODE, the same honesty the terminal app's own status bar carries. Answer picked up and originate dialled automatically; redial with different digits below, or hang up and stop whenever you like.
IDLE - press ATDT to dial
ORIGINATE · 1270/1070 Hz
IDLE
ANSWER · 2225/2025 Hz
IDLE
The two devices need to be near each other for this to have any chance of working.
IDLE
Microphone activity
Modem signal detected
Two ways to try this
Split screen is the default, so anyone can watch a full handshake without a second machine. The real thing is two machines, one end each, sound genuinely crossing the room.
One device
Run modem with no flags and both ends open in one window, originate on the left and answer on the right, sharing one spectrum. The link between them is wired in software rather than crossing the air, so the status bar says [DEMO MODE] - not an apology, the same honesty this whole project runs on. It appears whenever the link is not acoustic, and only then.
modem - split screen
╔═ ORIGINATE ═════════════════════════ 1270/1070 ═╦═ ANSWER ═══════════════════════════ 2225/2025 ═╗║● CARRIER 300 YOUR TURN║● CARRIER 300 THEIR TURN║╠═════════════════════════════════════════════════╬════════════════════════════════════════════════╣║2225║2225║║║║║2025║2025║║║║║1270║1270║║║║║║║║1070║1070║╠═════════════════════════════════════════════════╬════════════════════════════════════════════════╣║ATDT01234567890║ATA║║OK║OK║║CONNECT 300║CONNECT 300║║hello from the other side║║║║║║║║║║║║║║║║║║> took you long enough_║║╚═════════════════════════════════════════════════╩════════════════════════════════════════════════╝ F2 directory F4 answer F7 swap focus F10 hang up[DEMO MODE]
modem - originate
╔═ modem ══════════════════════════════════════ ORIGINATE · 1270/1070 ═╗║● CARRIER 300 baud half duplex YOUR TURN 00:00:33║╠══════════════════════════════════════════════════════════════════════╣║2225║║║║2025║║║║1270║║║║║║1070║║dial tone ┴ DTMF ┴ ringback ┴ ANSam ┴ training ┴ data║╠══════════════════════════════════════════════════════════════════════╣║ATDT01234567890║║OK║║CONNECT 300║║hello from the other side║║║║║║> took you long enough_║╚══════════════════════════════════════════════════════════════════════╝ F2 directory F4 answer F6 colour F10 hang up[DEMO MODE]
modem - answer
╔═ modem ═════════════════════════════════════════ ANSWER · 2225/2025 ═╗║● CARRIER 300 baud half duplex THEIR TURN 00:00:33║╠══════════════════════════════════════════════════════════════════════╣║2225║║║║2025║║║║1270║║║║║║1070║║dial tone ┴ DTMF ┴ ringback ┴ ANSam ┴ training ┴ data║╠══════════════════════════════════════════════════════════════════════╣║ATA║║OK║║CONNECT 300║║║║║║║║> _║╚══════════════════════════════════════════════════════════════════════╝ F2 directory F4 answer F6 colour F10 hang up[DEMO MODE]
Two devices
The real thing needs one machine per end, speakers and microphone facing. Like a real modem, you choose which end you are: the calling machine runs modem --single --acoustic, the receiving machine runs modem --single --acoustic --answer and waits for a call. Dial from the calling machine with ATDT<digits>. Whichever end dials becomes originate and whichever end answers becomes answer, so the two land in opposite Bell 103 bands automatically - originate on 1270/1070 Hz, answer on 2225/2025 Hz - and each can hear the other, exactly as a Hayes modem's own originate/answer switch worked.
modem - originate
╔═ modem ══════════════════════════════════════ ORIGINATE · 1270/1070 ═╗║● CARRIER 300 baud half duplex YOUR TURN 00:00:33║╠══════════════════════════════════════════════════════════════════════╣║2225║║║║2025║║║║1270║║║║║║1070║║dial tone ┴ DTMF ┴ ringback ┴ ANSam ┴ training ┴ data║╠══════════════════════════════════════════════════════════════════════╣║ATDT01234567890║║OK║║CONNECT 300║║hello from the other side║║║║║║> took you long enough_║╚══════════════════════════════════════════════════════════════════════╝ F2 directory F4 answer F6 colour F10 hang up
Why dial-up sounded like that
Nine phases make up the overture above - dial tone, DTMF, ringback, the ANSam answer tone and more - each rendered live by the same code that runs the connection, not a recording.