Ggwave: Tiny Data-over-Sound Library
github.com
github.com
My next goals for ggwave is to improve the mobile SDKs and provide more examples. If you want to help out - check out this issue [1].
I am also planning to add some even lower bit-rate protocols, but make them more robust and hopefully remove the sound markers.
https://en.wikipedia.org/wiki/Spread_spectrum
This would potentially give many nice features including superimposing multiple signals, so you can have full-duplex and more people can use the audio channel at the same time.
There are other data-over-sound libs listed here too https://github.com/ganny26/awesome-audioqr
I've been using WebJack (https://github.com/publiclab/webjack) wrapped with a better coding scheme for some similar work, I'm curious why ggwave is intended to use such a low bitrate - I'm able to get pretty good free-air reliability at 1200baud.
About why use such a low bitrate - I believe ggwave is a bit more pleasant to the human ear, although this can be subjective I guess. I also think the transmission is quite reliable - at least this is true for the few devices that I am using. But I guess the main reason is when I started coding this, I had basically 0 knowledge about existing audio modulation schemes and today this hasn't changed much :-) I find it more fun to experiment this way, even though I am probably rediscovering basic knowledge or missing some well-known approaches or techniques in this field.
It would be nice if ggwave made a apk available or published on f-droid.
https://quiet.github.io/quiet-js/fsk (fsk demo) https://quiet.github.io/quiet-js (standard modem demo)
> Sorry, it looks like there was a problem with this profile. Revert to your last working settings or load a preset, and then try again.
and in console
> error: fskmod_create(), samples/symbol must be in [2^_m, 2048]
Edit: fix typo
Have you done much testing with long range and non line-of-sight transmission? The acoustic echoes present some interesting challenges.
edit: Oh also it'd be nice to compare notes about mobile devices sometimes. At least for Quiet I've found the transmission quality is very dependent on specifically how the mic/speakers are set up and it can be tricky to avoid hidden resamplers and noise cancelation.
Not much. I tested this today at home and ggwave does not perform too bad. Even without direct line-of-sight it is still able to pick up the data. Hard to give quantitative description of the performance - it's good enough to make me satisfied :)
> Oh also it'd be nice to compare notes about mobile devices sometimes. At least for Quiet I've found the transmission quality is very dependent on specifically how the mic/speakers are set up and it can be tricky to avoid hidden resamplers and noise cancelation.
True. I am still not sure if noise cancellation helps or not. I guess it also depends on the noise cancellation implementation. When running in a browser, I usually disable it.
This makes me wonder - what's the ideal channel capacity for in-room audio with cell phone mic and speakers? And what are the limiting factors? If you had some really sophisticated channel coding, how good could the throughput ever get?
In the 90s we could do 56ish kilobits/sec over PSTN. What's state of the art now? Unchanged because of a lack of a market?
I'm also already thinking about how to implement a batch sending mesh protocol like uucp for bots to have sessionless interconnect.
It seems so simple and obvious, but we didn't have robots the way we do now when 300baud was around. Cool project!
It would be pretty easy to use this a for malicious reasons, such as device tracking
Tho true I heard the Waymo guy took 10GB or something. Lots of pdf schematics
Photographing the screen like Snowden is probably still the preferred method.