Vibecom headset logo mark
Apple client + server signal board

Realtime voice map

HEAD 5651f45 • diagnostics default on

A clickable map of the current iOS/macOS Vibecom path: microphone capture, Swift state, Rust FFI, Opus/RTP transport, server routing, receive jitter/decode, and Apple playback. Pick a flow, then click any block to see ownership, files, inputs, outputs, diagnostics, and current latency-lab notes.

Full speech loop

Pieces on the board

Same client code runs on macOS and iOS where practical; platform audio and app-host behavior split at the edges.

PCM Opus/RTP Control Diagnostics Server / host Current suspect

Latency profile ledger

These are the knobs visible in Settings and applied before connect. Low latency is explicit, not hardwired.

ProfileRust mediaApple capture/playbackWhat to watch
Standard 20ms Opus frames, jitter target 3 packets, playback prime 3 frames. Capture tap 960 frames, input-tap backend, playback threshold 1920 frames, drain 20ms, iOS preferred IO 20ms. Production default. Not the low-latency smoke path.
Low latency smoke 5ms Opus frames, jitter target 1 packet, playback prime 1 frame via env before connect. Capture tap 240 frames, sink-node backend, playback threshold 240 frames, drain 5ms, iOS preferred IO 5ms. Current smoke path. Do not hide failures by inflating jitter/prime.

Current stutter microscope

Network clean-ish

Bad receive cases usually show rustSeqGap=0 and rustSeqOoO=0; Logs/5 had one near-tail gap.

Rust playout

Watch rustUnderflow, rustLatencyDrop, rustCatchUp, and rustQueued.

Apple output

Watch AudioOut underrun, priming, restartPrimed, idle, and depth.

Reverted traps

0fb2ca0 render-quantum priming and 04df469 async sender pacer both made smoke worse.

Logs/1

Low-latency profile active, but Apple tap delivered 4800-frame / ~100ms iOS batches. Burst jitter, not network jitter.

b98c882

Low latency switched to AVAudioSinkNode capture. iOS became clean at 240-frame cadence; macOS hardware callbacks still around 512 frames.

Logs/4

Render-quantum startup threshold made macOS output sit in priming/idle too often. Reverted by 2386c4d.

Logs/5

Sender pacer caused immediate stutter and tape-slow playback. Reverted by d9f3bf2. Next target is receive/playout cadence.