Skip to content

Latest commit

 

History

History
69 lines (58 loc) · 3.65 KB

File metadata and controls

69 lines (58 loc) · 3.65 KB

Changelog

All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Fixed

  • Browser demo: pressing Stop (or a transfer completing) could let a queued audio/BroadcastChannel callback run after the AudioContext was closed and the WASM decoder freed, crashing the module. The receive path now tracks an active flag, guards its callbacks, and tears down cleanly.
  • Browser demo: encrypted file send/receive failed and left the Stop button looking frozen, because the device-mode decode loop kept pushing into a decoder that completion had already freed. The loop now stops feeding the instant the decoder is torn down (extracted into a tested feedStreamBuffer helper).

Added

  • Over-the-air fieldtest harness (sonance fieldtest): single-machine acoustic loopback that plays a seeded corpus out the speaker, records it back on the mic, decodes, and reports PER / sync rate / goodput / estimated SNR per payload size. JSON output matches the xtask sweep convention; honest results template and caveats in docs/field-results.md.
  • Fieldtest TDD hardening: extracted the scorer / metrics / report core into the sonance_cli::fieldtest library module so it is unit- and property- testable without a sound card; added a hardware-free --simulate[=ideal|awgn:SNR[,SEED]] mode that runs the full encode -> channel -> capture -> score -> report pipeline through sonance-sim via one shared simulated_capture seam; and added sonance-cli/tests/fieldtest_proptest.rs proving the scorer's integrity contract (never reports wrong bytes as a success) across arbitrary payloads, seeds, and channels, plus SNR-monotonicity and zero-trials boundary tests.
  • Demo JS test + lint tooling: node:test regression coverage for the decode loop (sonance-wasm/demo/decode-loop.test.js), plus ESLint + Prettier config.
  • Repo hygiene: CONTRIBUTING.md, this changelog, .editorconfig, and a deny.toml for cargo-deny.

Initial implementation, built test-first milestone by milestone.

Added

  • PHY (sonance-dsp): no_std adaptive OFDM/QAM (BPSK..1024-QAM) with per-subcarrier water-filled bit-loading, MFSK/CSS modes, FFT front-end, chirp matched-filter + Schmidl-Cox synchronization, coherent channel estimation and per-subcarrier equalization with pilot CFO/SFO tracking.
  • Link (sonance-link): framing, CRC, soft-decision LDPC FEC, frequency/ time interleaving, and the adaptive rate ladder.
  • Transport (sonance-transport): RaptorQ (RFC 6330) fountain coding, chunking, self-describing packets, BLAKE3 integrity, multi-source demux.
  • API (sonance): sans-IO Encoder/Decoder, Modem/Sender/Receiver, streaming, and the Auto adaptive rate path.
  • Crypto (sonance-crypt, optional encryption feature): XChaCha20-Poly1305 AEAD, ephemeral X25519 handshake with 6-digit SAS, BLAKE3 KDF, passphrase fallback; byte-identical wire format when disabled.
  • Audio (sonance-audio): AudioSink/AudioSource traits with mock, WAV, and cpal backends, resampling, and a lock-free ring buffer.
  • Bindings: C ABI (sonance-ffi, cbindgen) and WebAssembly (sonance-wasm, Web Audio) with a browser send/receive demo.
  • Tooling: deterministic channel simulator (sonance-sim), xtask sweeps/ benchmarks, criterion benches, and cargo-fuzz targets.