AudioEngine::on_capture() was passing miniaudio's hardware callback period (commonly 480 samples / 10 ms on WASAPI shared mode) directly to opus_encode(), which requires exactly frame_samples_ (960 for 20 ms @ 48 kHz). The mismatch returned OPUS_BAD_ARG and silently dropped every real mic frame, while screen share and injected test frames happened to be correctly sized and worked fine. Fix: accumulate PCM in a pre-allocated CaptureAccum buffer (mirroring the existing RemoteStream::ring fix on the playback side) and only call capture_cb_ when a full frame_samples_ chunk is ready. Same pattern applied to on_loopback(). Add test_capture_frame_accumulation() to verify the accumulator fires exactly the right number of callbacks for misaligned chunk sizes (480, 240+720, 1920 samples). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
VoiceCat
Self-hosted, native voice & text chat in the spirit of classic TeamSpeak / Mumble —
channel-based voice, channel + private text, one server you run yourself. Plain TCP
(control) and UDP (media), no WebRTC. Encrypted by default. A shared C++ core
(libvoicecat) drives native clients (Swift on macOS/iOS, C# on Windows) and the server.
Status: pre-implementation. The design is complete in
docs/. The code is an M0 skeleton — it compiles and links, but every subsystem is a stub. SeeAGENTS.mdto start building, anddocs/roadmap.mdfor the milestones.
Read the design first
The docs/ folder is the source of truth. Start at docs/README.md,
then architecture → protocol → voice → security → tech-stack → deployment →
roadmap.
Build the skeleton (no dependencies needed yet)
The M0 skeleton builds with just a C++20 compiler + CMake + Ninja — no vcpkg, no third-party libraries, because every subsystem is currently a stub.
cmake --preset dev
cmake --build --preset dev
ctest --preset dev # runs the smoke test (links the core, calls the C ABI)
Artifacts land in build/dev/bin/ (voicecat-server, vccli).
When you start implementing a subsystem that needs real libraries, build with vcpkg deps:
# one-time: git clone https://github.com/microsoft/vcpkg && ./vcpkg/bootstrap-vcpkg.sh
export VCPKG_ROOT=/path/to/vcpkg # set VCPKG_ROOT (works on Linux/macOS/Windows)
cmake --preset server-release # auto-installs deps from vcpkg.json
cmake --build --preset server-release
Layout
docs/ design spec (read this)
core/ libvoicecat — the shared C++ core
include/ voicecat.h (the C ABI all clients call)
proto/ voicecat.proto (control-plane wire format, source of truth)
src/ net/ crypto/ codec/ protocol/ session/ audio/ (stubs today)
server/ voicecat-server (headless; links the core)
tools/vccli/ headless test client — drives the protocol from M1 on
clients/ apple/ (Swift, M4) windows/ (C#, M4) — placeholders for now
tests/ CTest targets
License
Permissive-only dependencies (no GPL/LGPL) so the project can be redistributed freely,
including closed-source. Project license: TBD (see docs/tech-stack.md §5).