modem runs a real Bell 103 connection between two machines over their sound cards. Getting there takes a moment: a faithfully performed dial-up overture goes first - off-hook, dial tone, DTMF, ringback, the ANSam answer tone and its phase reversals - then a real 300 baud connection underneath.
The overture is a reconstruction. The connection 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.
Dial
Press dial and the full overture plays through your speakers, rendered live by the same code that runs the real connection - not a recording. The waterfall draws as it goes and each phase is named as it fires. Nothing is asked of you yet: this button only plays sound.
This tab is now a real endpoint, listening on a raw microphone. Run modem --single --acoustic on a second machine nearby, speakers and microphones facing, and dial or answer from here to meet it.
IDLE
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.
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.
What each part of the handshake was for
The same audio the dial button plays above, broken into its individual stages. Each one can be replayed on its own. Dialling itself is decorative throughout this page - there is no real telephone network behind it, so the far end always answers regardless of what is dialled.
Get modem
Native binaries for Linux, macOS and Windows are built by the project's release workflow.
No release has been tagged yet - the releases page will list binaries once one has.