I bought the Linux device drivers book and started researching winmodems. I discovered the low level driver interface was built in to the audio chip. I believe the standard was called 'AC97'. Borrowing code from the audio driver, I managed to activate the RJ11 jack, which I hooked a tiny speaker to, and played audio out the phone jack. I got as far as playing DTMF tones before giving up on the project. The details of how modems work at the modulation level was way over my head.
It's kind of annoying to me, but I don't blame the authors. I feel like many Linux users blamed Microsoft for things like this, but honestly - why should anyone go out of their way to support an OS that they don't use?
And then I reboot into linux, and sudo apt-get upgrade, and remember why I use linux all the freakin time.
Tune to any of the FT8 frequencies on http://www.qsl.net/sv1grb/psk31.htm using almost any receiver on http://websdr.org/ - 20m in the daytime, and 40m during evenings is usually full of activity.
There are dozens of other time-asynchronous modulations supported by fldigi, like the 2nd popular PSK31 and RTTY. And morse code too :) http://www.w1hkj.com/
Either way it's pretty cool stuff.
The infrastructure side of APRS is pretty nifty, you have sites like aprs.fi that let you see the current state of the world in near realtime anywhere an I-Gate is present.
I just want to caution folks about visiting this site. You could find yourself getting sucked into a years-long obsession with RF and software defined radios. Pretty soon you'll have dozens of RTL SDRs strewn about your desk, coax tumbleweed snaring your feet and six iterations of a quarter-wave ground plane that still don't work quite as well as the first one you ever built.
Many years ago I've used it successfully for a FAX server made with Asterisk and cheap telephony cards. Since a FAX is just a TIFF file encoded over sound I think this may be useful for someone that wants to transfer a binary blob over sound.
It takes <5 seconds to compile from source. However, I'd recommend you
$ ./configure --without-pulseaudio
From there, it's just a simple case of
$ cat walloftext.doc | ./minimodem --tx --tx-carrier 1200
$ ./minimodem --rx 1200 -q
My (very) old laptop seems to be able to go up to 9600 baud (sans PA); beyond 10000 it completely falls apart, with literal (!) modem line noise in the data (looks hilarious), ALSA underruns on the transmit end and 100% CPU usage between the two processes. (Hardware from != 2006 will probably be able to go much much higher though.)
This is an extremely simple modem implementation: it's just stdio<->DSP, with nothing else on top. And of course it's not bidirectional, so you need one process for input and another for output. You'd need two copies each running on both sides of a link for full duplex. And then you'd need a tunnel interface on top of that to get a PHY, and probably PPP over the top of that for low-level retransmission and flow control. (The major additional missing piece would have to be that real modems "train" to find the best baud rate and audio characteristics to use for the link. This of course has none of that. You have to figure out the best the best link speed yourself.)
Having said all that... I just learned how fast 9600 baud really is. That was absolutely awesome.
I also discovered that 600 baud is kind of hypnotic to listen to and watch. lol
And now I'm wondering about socat...
Your sound card is going to work best in some small band of frequencies (around 3khz if I remember) the mark and space tones have to be pretty far apart and the volume has to be turned up pretty high.
Turning the baud rate up increases your error rate so unless you're including error correction in your transmission that has to be pretty low.
The aggressive compression on the VoIP line and lack of compression does cause problems.
Not as much oriented towards standard modes, but if you are working on custom applications then quiet can be useful
But, then, you'd need speakers that can reproduce it and a microphone that can pick it up, too. Also, reflections are surely a problem at higher rates. The examples shown are well within the range of human hearing (but, old modems had to work within the bandpass range allowed by phone networks, which was rolled off at something like 8 KHz).
I'm trying to think of use cases for ultrasonic data transmission, and they're mostly nefarious. Traversing an air gap, for instance. Higher frequencies are difficult to transmit over distances and through walls, so you'd need to get your receiver into the same room or make it a very high SPL.
I have a wifi camera that uses bleeps and whistles and warbles from a phone or tablet to configure itself before it gets on the network, which is pretty neat but seems weird in a modern world. But, I guess that's something that could be done ultrasonically to make it seem more like magic. But, since it is already pretty error-prone, I would bet pushing tablets and phones (including crappy ones) to accurately produce very high frequencies at a volume sufficient to program a nearby device wouldn't be worth the added magicalness.
In any case, the 96 kHz sampling would yield an additional 3 dB dynamic range vs the 44 kHz sample rate.
The relevance to your question, is hams being hams, they gotta experiment, turn of the century laptop hardware often had codecs that operated up to 96 KHz or whatever, but speakers usually cut off somewhere around the high level of human hearing, so operating at 10 KHz worked and might be silent to old people with partial hearing loss, but you could forget about 25 KHz even if the signal looked great on an oscilloscope because the speakers and mics were not broadband enough. Very few customers care about audio quality in frequency bands they can't hear.
The same hardware hooked up to a simple I/Q software defined radio works fine up to the limits imposed by Nyquist and the claimed hardware sample rate, so its obviously limited by mic/speaker not the A/D converters.
This topic comes up repeatedly on HN. If HN had a wiki this meme would be a strange attractor for the HN community.
Make it sound like birdsong in the presence of other birds, make it sound like fragments of human speech when there are people present, make it sound like fan noise in a DC and so on.
You could start by picking a major key and then dividing up all bytes to be transmitted into groups of three bits (have fun with the shifting...), that way all 8 tones get to be played, and since it will be monotone it should not sound too bad. Major points if you can do this with chords that sound harmonious.
I wanted to add a faxmodem to my Mac a couple of years ago and everything I read on the internet said that telephone modems of any kind are no longer supported on OSX.