This library uses liquid SDR to transmit data through sound. This makes it suitable for sending data across a 3.5mm headphone jack or via speaker and mic.
Quiet can build standalone binaries for encoding/decoding data via .wav files or for streaming through your soundcard via PortAudio. It can also be built as a library to be consumed by other C programs.
Dependencies
- Liquid DSP Be sure to work from the devel branch
- libfec (optional but strongly recommended)
- Jansson
- libsndfile (optional)
- PortAudio (optional)
Build
With the dependencies installed, run ./bootstrap
provided by this library, which will create a build
directory and invoke cmake. If you would like to install it after building, do cd build && make install
.
Profiles
The encoding and decoding processes are controlled by the profiles in quiet-profiles.json
. Each profile contains a complete set of parameters such as modem type and error correction.
Cable
For cable transmission, use the cable-
profiles. These will attempt to use nearly the full spectrum provided by your soundcard. As such, they contain many audible frequencies and should not be used on channels that could be heard by people.
Ultrasonic
The ultrasonic-
profiles encode data through a very low bitrate, but the audio content lies above 16kHz, which should pass through audio equipment relatively well while being inaudible to the average person. This is a good option for sending data through a channel where you would prefer not to disrupt human listeners.
Javascript binding for libquiet
Javascript binding for libquiet allows sending and receiving data via sound card from any browser. It can function either via speaker or cable (e.g., 3.5mm). Quiet comes included with a few transmissions profiles which configure quiet’s transmitter and receiver. For speaker transmission, there is a profile which transmits around the 19kHz range, which is essentially imperceptible to people (nearly ultrasonic). For transmission via cable, quiet.js has profiles which offer speeds of at least 40 kbps.
Compatibility
Browser | Transmitter | Receiver |
---|---|---|
Chrome | Supported | Supported |
Chrome (Android) | Supported | Partially Supported |
Edge | Supported | Supported |
Firefox | Supported | Partially Supported |
Firefox (Android) | Supported | Partially Supported |
Internet Explorer | Not Supported | Not Supported |
Safari | Supported | Not Supported |
Safari (iOS) | Supported | Not Supported |
Usage
Quiet-js includes a blob of libquiet compiled by emscripten as well as a javascript binding for ease of use. The bindings must be loaded before the compiled portion. Below is the recommended way to include Quiet in your project.
<script type="text/javascript" src="quiet.js"></script>
<script type="text/javascript" src="your_project.js"></script>
<script async type="text/javascript" src="quiet-emscripten.js"></script>
Additionally, the emscripten compiled portion requires a memory initializer, quiet-emscripten.js.mem
. This is loaded asynchronously by quiet-emscripten.js
.
It is strongly recommended to also include libfec.js. An emscripten-compiled version of libfec may be found here or with npm install libfec
. If libfec is not included, then quiet.js will not be able to use any profiles which use convolutional codes or Reed-Solomon error correction.
Source && Download