The first phone prototype translated itself
The translation path worked in a browser, but the phone network changed the problem. Web and mobile voice systems can assume wideband audio and client-side acoustic echo cancellation. An ordinary telephone call delivers narrowband G.711 μ-law audio at 8 kHz, variable network delay and no control over the recipient’s device.
Translated speech played to the phone can return through the network, enter recognition again and trigger a self-reinforcing translation loop. In the ungated prototype, eight of ten test calls looped until they were manually interrupted.
The fix started by separating the two directions
Separating the caller and callee directions prevents prompt, context and audio state from contaminating the opposite side of the conversation.
16 kHz browser audio is translated and synthesized, then converted to G.711 for Twilio Media Streams.
Returning synthesized speech is replaced with valid μ-law silence (0xFF) instead of dropping packets.
Weak PSTN noise is rejected before it can become a false speech event.
8 kHz audio is upsampled to 16 kHz and classified with asymmetric onset and offset timing.
Recognized speech is deterministically translated and synthesized back to the browser.


The place left over, once you own neither the handset nor the network
Bidirectional speech translation is not new, and neither is doing it on a phone. The implementations that work well get there by controlling something this project does not have. A device-level implementation cancels echo in hardware because it owns the microphone. A carrier implementation intervenes inside the network itself. Both are correct engineering, and both are closed to a team with neither asset.
What is left is a server relay, which is the awkward middle. It sees the audio only after the network has already degraded it, it cannot touch the recipient's device, and it has to solve echo in software or not at all. It is also the arrangement this project needed, because the constraint that shaped everything was that the person being called installs nothing.
Our cleanest idea did not survive the phone network
A Pearson-correlation detector compared outgoing synthesized audio with incoming PSTN audio. μ-law quantization, variable delay and codec distortion destroyed the stable signal relationship it required.
Correlation reduced looping from 8/10 to 3/10 calls but introduced false positives. The deployed design instead marks the time window in which echo is possible and injects valid silence while maintaining stream continuity.
Echo-control evolution
| Design | Observed loop rate | Decision |
|---|---|---|
| No gate | 8 / 10 calls | Rejected |
| Correlation detector | 3 / 10 calls | Rejected |
| Dual-session echo gating | 0 / 147 completed | Deployed |
Three echo gates failed before the one that shipped
The deployed gate is the fourth design. The three before it each failed in a way that pointed at the same underlying rule.
Correlating outgoing synthesis against incoming line audio. It is the idea the previous section measures: it halved the loop rate and never became reliable, because μ-law is a non-linear quantizer and the correlation it needs does not survive the codec.
Blocking a constant window after every synthesis stopped the loop and broke the conversation: a caller who answered quickly was silenced.
Scaling the window to synthesis length restored the turn-taking, then exposed a noise spike from the line's automatic gain control the moment the gate released.
Replace rather than block, add a settling window scaled to synthesis length, and put an energy gate and a local VAD behind it.
The hosted detector assumed audio the phone network does not carry
Server-side voice activity detection is tuned for clean wideband input. On PSTN, steady background noise sits inside the range it reads as speech, so the end-of-turn event arrived tens of seconds late or never arrived at all. Tuning the energy threshold did not converge: no single value separated speech from line noise across calls.
The detector moved on-device instead, which made the decision inspectable frame by frame and let the gate above it stay authoritative. Onset and offset are deliberately asymmetric, because the cost of the two errors is not symmetric: clipping the start of a sentence is worse than holding the line open a moment too long.
- 01Energy gate first, with a higher threshold inside the echo window than outside it.
- 02A local neural detector second, on 8 kHz audio upsampled to the rate it expects.
- 03Asymmetric hysteresis: a short onset to catch the first syllable, a long offset to survive a pause mid-sentence.
- 04A minimum utterance length and a minimum peak, so a weak fragment is rejected as noise rather than sent for recognition.
Asking one model to hear and to translate produced sentences nobody said
The realtime speech API can transcribe and translate in one pass, and doing that added content the speaker had not produced. Not mishearing: fluent, plausible additions that fit the conversation and were never said.
The two jobs are now separate. Recognition stays inside the realtime session, and translation runs as a discrete text call at temperature zero against the transcript, with the realtime session's own translation path switched off by configuration rather than left unused.
The architecture diagram in Architecture, above, predates that change and still shows the realtime session handling translation on the voice-to-voice path. The deployed arrangement is the one described here.
The recognizer invented a news anchor, and it reached a real phone
Feed line noise to a speech recognizer trained on broadcast and video audio and it does not return nothing. It returns something plausible from that distribution: a station ident, a sign-off, a subscribe prompt. In production, one such phrase passed through translation and was spoken to a recipient. Nothing upstream was wrong; the recognizer had simply been handed noise and answered confidently.
The fix is layered, and the ordering matters. The cheapest layer is not to hand the recognizer noise in the first place, which is what the gates above already do. What survives that is caught by pattern, and what survives pattern matching is caught after translation, where the cost of a false positive is a short delay rather than a wrong sentence in someone's ear.
The echo gate and silence injection mean the recognizer never receives the frames most likely to produce an invention.
A blocklist of broadcast-style phrases in both languages, plus checks on minimum length, silence timeout, repeated phrases and recognizer confidence.
Most turns pass through untouched. A suspect turn is spoken while a correction runs behind it. Only the worst class is held back for a corrected rewrite, which is the one path that adds audible delay.
One relay, three conversations
The echo problem is shared. What differs is who is speaking, and that turned out to be the axis worth building around.
The three share the echo-gating logic through one component rather than reimplementing it, which is what made the second and third modes cheap to add. An earlier single-object router that switched on mode internally was the thing that had to go first.
The text-to-voice path is not a lesser mode. In the field study it was the most used of the three, which was not what the design assumed at the start.
The bidirectional case in the paper: two directional sessions, the gates between them, interrupt handling on both ends.
The caller types and the recipient hears synthesized speech. This is the path for a user who cannot use voice, and it removes the caller-side echo problem entirely.
The relay places and holds the call on the user's behalf, with tool calls for the task it was given.
What the field study cost, and which mode people actually used
USD 0.28 per minute on the evaluated provider stack, over the reported call set. That figure covers one provider configuration and one pricing period, and it is the number the paper reports rather than a current quote.
Cost is not incidental to this design. A relay pays for two directional sessions plus telephony minutes for the whole call, including the stretches where nobody is speaking, which is why the gates that suppress noise before recognition are a cost control as much as a quality one.
Then we took it through 155 Korean-English calls
The evaluation contains 155 calls, 148 instrumented calls and 147 completed calls across voice-to-voice, text-to-voice and full-agent modes.


Latency by direction
| Path | P50 | P95 | Mean | Turns |
|---|---|---|---|---|
| Session A · caller → callee | 555ms | 1,169ms | 619ms | 814 |
| Session B · callee → caller | 2,684ms | 9,963ms | 3,650ms | 744 |
| Session B · STT only | 2,601ms | 9,392ms | 3,544ms | 744 |
- 01STT accounts for 97.1% of mean Session B latency.
- 02The gate activated 1,046 times while preserving 354 callee interruptions.
- 03277 VAD false triggers were observed and 100 hallucinated transcriptions were blocked.
- 04COMET semantic adequacy reached 0.7078 for English→Korean and 0.6242 for Korean→English against offline LLM references.
Questions from ACL and IWSLT
WIGVO was presented at ACL 2026 System Demonstrations in San Diego through a booth focused on the paper, architecture and recorded workflow.
The most useful part of the booth was the technical discussion. Researchers and engineers, including visitors from NVIDIA and Apple, asked about echo control on a real line, end-to-end latency and whether the architecture could run inside their own infrastructure.
We treat those conversations as qualitative feedback, not product adoption or company endorsement. They did, however, show that the difficult parts documented in the paper were the same parts practitioners wanted to examine.
The discussion continued at IWSLT 2026 through an invited oral talk and a poster session. Those sessions gave us more room to explain why the phone-originating path remains ASR-bound and why deterministic echo gating outperformed a more elaborate detector.



Where the claim stops
- L01The field study covers Korean-English calls over PSTN, not wideband app-to-app audio or a broad language matrix.
- L02Session B latency remains ASR-bound and its P95 is not yet acceptable for every conversational setting.
- L03COMET uses offline LLM references rather than human translations, and no formal user study is reported.
- L04Cost reflects one provider configuration and pricing period.
- L05The hallucination blocklist is pattern-based and language-specific, so it generalizes to a new language only after the patterns for it are written.
- L06Mode usage comes from the same field study and reflects who was invited to it, not a representative population.

