Doppelvoice v0.2.0 — multi-language + Windows binary
First binary release — no Python install needed, just unzip and run.
Download
Doppelvoice-v0.2.0-win64.zip (61 MB)
```
SHA256: 4F5634587E150342F1FCDC0EE0F844D79C37C1D41C974EA7C5B15AA67EE85A28
```
Quick start
- Install VB-Audio Virtual Cable and reboot
- Get Doubao credentials from Volcengine Console
- Unzip → copy `.env.example` to `.env` → fill in `DOUBAO_APP_KEY` / `DOUBAO_ACCESS_KEY`
- Double-click `Doppelvoice.exe`
- In your meeting app, set the microphone to `CABLE Output (VB-Audio Virtual Cable)`
See `README.txt` inside the zip for the full walkthrough.
What's new in v0.2.0
A 24-file overhaul driven by 4 parallel code review agents (architecture / Python / security / performance). Tests grew 3 → 46.
Highlights
- 9 languages per Doubao spec: `zh / en / ja / id / es / pt / de / fr / zhen` (last is bilingual ZH⇄EN auto)
- Voice clone tuning: explicit `denoise=false` in TranslateRequest retains breath / resonance details
- Audio device dedup: one entry per physical device (MME 31-char name truncation handled)
- Subtitle memory cap (MAX_BLOCKS=2000) for long sessions
- Atomic .env write (tempfile + os.replace) — credentials safe on crash
- Log redaction patcher — API keys / Bearer tokens auto-scrubbed
- WebSocket URL allowlist + 4 MB frame guard
- AppConfig snapshot isolation — running session unaffected by mid-run settings changes
- First Windows binary via PyInstaller — no Python install required
Performance
- Mic level meter merged into capture stream (dropped second InputStream)
- TranslateRequest template cached (saves ~12 protobuf alloc/sec)
- silence_rms_threshold 0.010 → 0.0 (was clipping first-syllable consonants, +300-500 ms first-word latency)
- _receiver_loop split into 4 handler functions + _ReceiverContext
Known limits
- Use headphones, not external speakers. With speakers, the meeting audio gets re-captured by your mic and re-translated back to the peer (acoustic feedback loop). Every video conferencing tool hits this — they ship built-in AEC; we don't yet.
- End-to-end latency floor ≈ 2.5 s per the Seed LiveInterpret 2.0 paper.
- Public AST API is below the Volcengine Console demo (separate BFF endpoint with extra prosody).
Full changelog: CHANGELOG.md