Skip to content

beeping-io/beeping-core

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

beeping-core

C++20 library for encoding and decoding data over sound (Data Over Sound).

License status platform conventional commits

C++ CMake Conan

Build & Test ThreadSanitizer Static Analysis Docs

macOS Linux Windows x64 Windows ARM64 WASM Raspberry Pi iOS Android

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.

Requirements

  • C++20 compiler (Apple Clang 15+, GCC 13+, Clang 16+)
  • CMake 3.25+
  • Conan 2.x (pipx install conan)

Build

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 default

For a Release build:

./scripts/conan-install.sh Release
cmake --preset release
cmake --build --preset release

Presets

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.

Conan profiles

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 by uname -s.
  • On Windows use scripts/conan-install.ps1 (PowerShell), which picks windows-x64 or windows-arm64 based on $env:PROCESSOR_ARCHITECTURE.

Pinning the profiles in-repo keeps CI and local builds bit-for-bit reproducible regardless of the host default profile.

CLI — decode a WAV

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.

Releases & verification

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.

Using beeping-core in your project

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.

License

Apache-2.0

About

C++20 library for encoding and decoding data over sound (Data Over Sound)

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors