Live enrollment stalls on sustained speech: recommended causal integration?
We’re testing VoxLock 1.1.0 as a causal streaming ASR frontend, keeping the default three-second enrollment requirement. We found a sustained-speech clip where the energy selector collects only 2.67 seconds from 8.56 seconds of audio and never locks. Its running 10th-percentile energy estimate appears to rise with speech, eventually preventing further accumulation. We have a deterministic selector-only reproduction without private audio.
Is this expected? Would you recommend external speech-VAD selection followed by stream(sample), or a different noise-floor bootstrap? What safeguards should we use to avoid enrolling a background speaker?
Hey Ronan, thanks for the clean repro!
Yes, that was a bug. live() set the noise floor as the 10th percentile of everything it had heard, so if someone talks without pausing, that floor climbs up to their own voice level and nothing counts as speech anymore. It only shows up with continuous speech, but it's real.
Fixed in 1.1.1. The floor is now the quietest frame from the last 2 seconds, so it keeps catching the small gaps between words. On our test calls with all the pauses cut out, it now locks on 96% instead of 8%, and normal calls behave the same as before. I also fixed a related case where digital silence at the start of a call let line noise into the voice sample.
On your questions:
- External VAD + stream(sample) is a great setup for production. Collect about 3s of speech from your VAD and pass it in, and you skip the built-in selector entirely.
- To avoid enrolling a background speaker, take the sample from the start of the call, when the caller is usually the closest and loudest voice. Leave out any audio from while your agent is talking. For extra safety, check that both halves of the sample are the same speaker with a speaker embedding, and re-enroll if they're not.
Would love to hear if your repro passes on 1.1.1!
cool will try