C++20 library for encoding and decoding data over sound (Data Over Sound).
Cross-platform strategy: each OS is validated end-to-end (download tarball → run CLI → round-trip test) before being promoted to the release. "Validated" = we've actually used it on that platform and it works. See docs/INSTALL.md for installation per platform.
- C++20 compiler (Apple Clang 15+, GCC 13+, Clang 16+)
- CMake 3.25+
- Conan 2.x (
pipx install conan)
Dependencies are managed by Conan 2.x in manifest mode with a committed
conan.lock for fully deterministic builds.
./scripts/conan-install.sh # installs deps for Debug (default)
cmake --preset default
cmake --build --preset default
ctest --preset defaultFor a Release build:
./scripts/conan-install.sh Release
cmake --preset release
cmake --build --preset release| Preset | Description |
|---|---|
default |
Debug build with tests |
ci |
CI build (Debug + tests + compile_commands.json) |
release |
Release build, no tests |
Each preset wires the Conan-generated toolchain at
build/<BuildType>/generators/conan_toolchain.cmake, so conan install must
be run before cmake --preset for the matching build type.
Project-managed profiles live in profiles/:
macos, linux, windows-x64, windows-arm64.
- On macOS/Linux the install script (
scripts/conan-install.sh) picks the profile byuname -s. - On Windows use
scripts/conan-install.ps1(PowerShell), which pickswindows-x64orwindows-arm64based on$env:PROCESSOR_ARCHITECTURE.
Pinning the profiles in-repo keeps CI and local builds bit-for-bit reproducible regardless of the host default profile.
The build produces a beeping-core binary (at
build/Debug/cli/beeping-core) that can decode a WAV file produced by
the Beeping platform:
./build/Debug/cli/beeping-core version
# BeepingCoreLib version 1.0.0 [...]
./build/Debug/cli/beeping-core decode audio.wav
# payload-string
./build/Debug/cli/beeping-core decode -m 2 audio.wav # force audible
./build/Debug/cli/beeping-core decode -m 3 audio.wav # force inaudible
# default is -m 5 (try both)Exit codes: 0 = decoded (payload on stdout), 1 = no beep found,
2 = bad input (missing file, unreadable WAV, etc.).
Supports WAV PCM int16 (format 1) and IEEE float 32-bit (format 3), mono or stereo (downmixed to mono).
Full docs: docs/cli.md.
Pre-built binaries for macOS, Linux, Android, iOS and WASM are published on GitHub Releases with full supply-chain security:
- Cosign keyless signatures (no long-lived keys)
- CycloneDX SBOM (dependency inventory)
- SLSA L3 provenance (build attestation)
See docs/verifying-releases.md for full
verification instructions.
Two supported consumption paths via Conan 2.x:
- ConanCenter (recipe pending approval) —
conan install beeping-core/0.0.0 - GitHub Release fallback (available now) — pre-built binaries or local recipe export from a git tag
Full guide with copy-paste examples: docs/conan.md.