Audio Barcode
Send and receive small data packets over sound. The packets have a size of 50 bits and transmitting one packet takes ~1.7 seconds.
Based on the protocol described in "Chirp technology: an introduction". It's not compatible with the Chirp protocol. The parameters for error correction are not published in the article.
Usage
Add this to your Cargo.toml
:
[dependencies]
audio-barcode = { git = "https://github.com/Unrud/audio-barcode" }
Then you can do something like:
use audio_barcode::Transceiver;
// Init
const SAMPLE_RATE: u32 = 44100;
let mut transceiver = Transceiver::new(SAMPLE_RATE);
// Receive
loop {
let sample: f32 = ...;
if let Some(payload) = transceiver.push_sample(sample) {
println!("Received: {:?}", payload);
}
}
// Transmit
let payload = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for &frequency in transceiver.send(&payload).iter() {
for &sample in transceiver.generate_beep(frequency).iter() {
// Play sample
}
}
Examples
A browser based demo is available at https://unrud.github.io/audio-barcode.
The source code can be found in examples/web
.
License
MIT (see LICENSE
)
Thirdparty libraries
- goertzel
- Repository: https://github.com/mcpherrinm/goertzel
- License: MIT
- Patches:
- reed-solomon-rs
- Repository: https://github.com/mersinvald/reed-solomon-rs
- License: MIT
- Patches: