Show HN: Libquiet – transmit data using sound
brian-armstrong.github.io
brian-armstrong.github.io
You can broadcast data without a network.
Edit: I actually prefer this to the clumsy QR code scanning, maybe I'll use it for device pairing. Would also be a great tool to pair devices which don't have a display.
But the sounds produced remind me of the background noise in a forest.
Which makes me think that maybe if you used this lib to listen to the noises in a forest and then try and look for interesting patterns in that data..
Anyway, cool lib, will bookmark it.
Thanks for the kind words :)
Edit: ah, another commenter had already confirmed this. That's what you get for not reading all the way through :)
Is there a more detailed write up of the inner workings floating around?
Quiet's design is typical for what you'd find in a textbook diagram of a modem. It uses liquid SDR to generate the modulated symbols, and then it runs them through an interpolation filter and mixes them up to some carrier frequency.
Q2: For ultrasonic: Most cheap ultrasonic transducers are very narrow band around 40KHz. Are there barriers to moving the carrier frequency up to that range?
Q3: After a very quick look at the doc, I didn't see what kind of encoding scheme you are using?
I suppose I should really call it nearly ultrasonic. Since I've only been able to play with standard sound hardware, and this hardware always has a low-pass filter that cuts off around 20kHz, that's the absolute highest frequency I've been able to test. When I say 44.1kHz I just mean the sampling frequency -- perhaps I should have been clearer about that, sorry :)
The modulation scheme for the air path is GMSK. For cable transmission, it's OFDM + QAM1024.
i'm not a fan of this kind of covert ad tech but i feel that this trend won't be slowing down any time soon...
Made me think about Google Tone : http://googleresearch.blogspot.fr/2015/05/tone-experimental-...
Also made me think about the iPod nano, it only had a single jack port. It was used to charge it and also to transmit data.
It looks like there may also be a bug with the receivers being garbage collected in Firefox in the JS text demo. I'm looking at that now.
Audible transmission worked successfully for me in Chrome but inaudible didn't. Inaudible can get pretty complicated to do robustly because of compression and filtering, as you've mentioned in other comments.
My startup (LISNR) is a content and engagement platform entirely on top of "ultrasonic" audio tones. We started in 2012 and still feel audio transmission tech doesn't get as much attention as it deserves. Especially in use cases where bluetooth beacons have failed to catch on.
I don't know that I really plan to do much beyond working on the library. When I started out, I was actually just interested in seeing what sort of bitrate I could achieve on an audio cable but decided to also support air transmission when I realized how similar it would be. I would definitely love to see it get embedded into iOS and Android apps though.
Good luck with your endeavor! Audio data transmission might be "budget tech" but I think it certainly gets the job done.
As for the advantages, of course traditional radio-based transmissions have many advantages. Quiet has a few though -- for example, with its javascript bindings, you can use quiet to share data between native apps and the browser. You might do this to share what's in your clipboard, share contact info with someone, pair devices etc. Additionally, you can get quiet up and running very quickly, without the need to join any networks.
Here's a youtube that runs 20Hz-20kHz if you'd like to check for yourself https://www.youtube.com/watch?v=qNf9nzvnd1k
I haven't really found much data about the distribution of hearing capacities, so it's hard to tune this to be truly ultrasonic. The average sound equipment starts getting really distorted at around 19kHz, which doesn't leave much space above 17,5, unfortunately.
Thanks for trying my demo!
Note: It's at some random value that isn't exactly 17kHz, I think it's 17.6kHz? So it no longer making sound for you at 17.5kHz could be because of that, not because of your hearing.
Through an accident with way too many fireworks, or not enough fireworks depending on how you look at the situation, I hear a random high C noise when it's completely quiet. My hearing in my right ear cuts out at around 15kHz.
But on average. anything under 17kHz is audible to the average teen-young adult.
The narrowband profile also works, but I needed to create a new Quiet profile with a center frequency of 2200Hz.
Compression is going to mess with the signal somewhat, and encoded data is not particularly alike to the human speech that most psychoacoustic models are aiming for. But you can get modems to work across some quite poor connections if you keep the bitrate low.
If you don't need to send a bit-accurate binary blob across the network then it's much faster to use such analog modes and accept some corruption. If you wanted to send a picture across a noisy radio network (as emergency-service operation tends to be) I would actually suggest sending a radiofax or a slow-scan TV signal. Lossy compression would distort the picture but the human brain is quite good at dealing with this kind of distortion. This is particularly true of faces - the brain is wired to match faces quickly, which is how we get pareidolia.
https://en.wikipedia.org/wiki/Slow-scan_television
https://en.wikipedia.org/wiki/Radiofax
During WWII the Germans actually used a mode called Hellschreiber that basically sent text as a B+W fax picture, with each line sent twice for resilience. It's not the fastest but it was quite resistant to interference. It's interesting to think of modern improvements we could make nowadays.
Perhaps using the same encodings as modems do would increase effective bandwidth?
Edit: never mind, looks like it already kinda does.