Transferring data over sound with QAM / QPSK Been working on a FSK Modem in the last few weeks and have gotten it to work with 400bps, very reliable, atleast over a virtual audio cable, but it also works when playing a sound directly into a microphone.
Now I've shifted my focus to other Modulation techniques that could be used, such as M-QAM (16, 64, 256) and was wondering if anyone has any experience in that direction.
Would QAM be viable for the transfer of data over audio? What concerns me is the complexity of the signal detection when it comes to QAM, or even QPSK. I am trying to do this, same as the FSK, in purely Python, with .wav files as the intermediate medium of storing and playing the signals.
Would appreciate any kind of information or tips.
The problem with transmitting data over an acoustic link is the variability of the channel. Things you need to take into account are

Bandwidth, quality &amp; directionality of the microphone
Bandwidth, quality &amp; directionality of the loudspeaker
Specifically the distortion properties of the loudspeaker
Relative placement and distance of speaker and microphone
Acoustic environment: reverb time as a function of frequency, distinct reflections, absorption properties, sympathetic buzzing and rattling, etc.
Background &amp; competing noises: number of sources, spatial distribution, temporal &amp; spectral properties, energy,
All of the above can be stationary or time variant.

As a result the amount of data you can reliably transmit varies by several orders of magnitude with the channel properties alone. In a clean &amp; stable environment with good speaker close to a microphone QAM is definitely possible. In a busy restaurant with a laptop speaker: not so much.