Searching led me to a Wikipedia article about the Commodore Datassette. It was a tape format used by the Commodore personal computer. It used two different frequencies to encode ones and zeros, and they were read back by simply detecting zero-crossings. I exploited this invention and modified it a bit by adding start and stop bits and a 50-byte lead-in tone:
The resulting program is on GitHub.
Compact Cassettes sell for 20 cents at flea markets. They come in many colors and capacities. Using the data rate I chose about 1.2 MB fits on a single cassette.
Video proof below!
By the way, I only used text for demonstrational effect. All kinds of data can be saved onto the cassette. A nice way to do this is to use .tar files (which, incindentally, stands for "Tape Archive"!).
Edit: Here's some PNG data:
Update 2/2013: I've improved the modulation scheme since. I added a slight inter-channel delay that alleviates short losses of signal on the tape. There's also a calibration header to account for polarity or stereo reversal.
