# ggerganov/ggwave

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/ggerganov-ggwave).**

7,710 stars · 460 forks · C++ · MIT

## Links

- GitHub: https://github.com/ggerganov/ggwave
- Homepage: https://youtu.be/Zcgf77T71QM
- awesome-repositories: https://awesome-repositories.com/repository/ggerganov-ggwave.md

## Topics

`arduino` `data-over-sound` `ecc` `fsk` `internet-of-things` `modem` `pairing` `python` `qrcode` `serverless` `sound-library` `ultrasound`

## Description

ggwave is a data-over-sound communication library and audio data modem used for encoding and decoding binary data transmitted through audio waveforms. It implements an acoustic data transfer protocol that enables the exchange of small amounts of information between devices using speakers and microphones.

The project provides a cross-platform audio waveform generator capable of transforming digital information into sound and converting received audio signals back into data. It supports the creation of raw audio samples and the export of waveform data into uncompressed WAV files.

The system covers capabilities for acoustic data encoding and decoding, air-gapped data transfer, and audio-based device pairing. These functions are supported by digital signal processing, including frequency-shift keying modulation and error correction.

## Tags

### Networking & Communication

- [Data-Over-Sound Transmission](https://awesome-repositories.com/f/networking-communication/data-over-sound-transmission.md) — Sends small amounts of digital data between devices using audio speakers and microphones without a network connection.
- [Acoustic Data Decoding](https://awesome-repositories.com/f/networking-communication/acoustic-data-decoding.md) — Converts incoming audio waveforms back into binary data using frequency analysis and error correction. ([source](https://cdn.jsdelivr.net/gh/ggerganov/ggwave@master/README.md))
- [Acoustic Data Encoding](https://awesome-repositories.com/f/networking-communication/acoustic-data-encoding.md) — Transforms binary data into audio waveforms for transmission between devices via speakers and microphones. ([source](https://cdn.jsdelivr.net/gh/ggerganov/ggwave@master/README.md))
- [Acoustic Data Transfers](https://awesome-repositories.com/f/networking-communication/acoustic-data-transfers.md) — Implements a protocol for encoding and transmitting digital data using audible sound frequencies between devices.
- [Audio Data Modems](https://awesome-repositories.com/f/networking-communication/audio-data-modems.md) — Acts as a software modem transforming digital information into sound and back into data via frequency analysis.
- [Multi-Tone Demodulation](https://awesome-repositories.com/f/networking-communication/multi-tone-demodulation.md) — Extracts binary data streams by simultaneously monitoring multiple frequency bands during the decoding process.
- [Acoustic Air-Gap Transfers](https://awesome-repositories.com/f/networking-communication/binary-data-encoding/qr-code-encoders/acoustic-air-gap-transfers.md) — Moves information between isolated systems by converting data into sound waves and decoding them on the receiving end.

### Part of an Awesome List

- [Audio And Sounds](https://awesome-repositories.com/f/awesome-lists/media/audio-and-sounds.md) — Provides a library for processing and synthesizing the audio waveforms required for data-over-sound communication.

### Graphics & Multimedia

- [Frequency-Shift Keying](https://awesome-repositories.com/f/graphics-multimedia/sound-synthesis/frequency-modulation/frequency-shift-keying.md) — Uses frequency-shift keying modulation to encode binary data into audible sound waves.
- [Raw Audio Streamers](https://awesome-repositories.com/f/graphics-multimedia/audio-music/audio-playback/raw-audio-streamers.md) — Provides low-level interfaces for writing raw PCM samples directly to audio hardware for transmission. ([source](https://cdn.jsdelivr.net/gh/ggerganov/ggwave@master/README.md))
- [Waveform Generation Engines](https://awesome-repositories.com/f/graphics-multimedia/audio-music/audio-streaming-engines/audio-playback-engines/cross-platform-audio-engines/waveform-generation-engines.md) — Provides a cross-platform tool for creating raw audio samples and WAV files for short-range data transmission.
- [Raw Audio Sample Streaming](https://awesome-repositories.com/f/graphics-multimedia/audio-music/audio-streaming-engines/raw-audio-sample-streaming.md) — Generates raw PCM audio samples to be pushed to audio backends for data transmission.

### Scientific & Mathematical Computing

- [Fourier Transforms](https://awesome-repositories.com/f/scientific-mathematical-computing/data-modeling-processing/signal-processing/fourier-transforms.md) — Implements fast Fourier transforms to convert audio signals into frequency components for data decoding.

### Security & Cryptography

- [Error Correction Codes](https://awesome-repositories.com/f/security-cryptography/error-correction-codes.md) — Employs Reed-Solomon error correction codes to detect and fix bit errors in transmitted audio data.
- [Acoustic Pairing](https://awesome-repositories.com/f/security-cryptography/security/infrastructure-and-hardware/embedded-and-hardware/device-pairing-protocols/acoustic-pairing.md) — Links two devices together by playing a unique sound code from one and listening for it with the other.
