CrossComms is a Windows desktop app that listens to your mic, translates what you say, turns it back into speech, and sends that speech into a virtual microphone for Discord, in-game voice chat, or other apps.
- Captures your microphone live
- Transcribes your speech with local
faster-whisper - Translates the text with either
Webmode orLocal OPUSmode - Speaks the translated result with local Piper voices
- Routes the translated voice into a virtual mic such as
VB-CABLE
Before you run CrossComms, make sure you have:
WindowsPython 3.11+installed and available onPATHVB-CABLEinstalled if you want the translated voice to appear as a microphone in Discord or games- a working microphone
- internet access for
Webtranslation and for first-timeLocal OPUSmodel downloads
Important:
- The app setup script installs the Python packages, local OPUS helper package, Piper runtime, and default Piper voices for you
- The app does not install
PythonorVB-CABLEfor you
- Install
Python 3.11+ - Install
VB-CABLE - Open the folder where you cloned or downloaded
CrossComms - Run:
.\setup.ps1Or just double-click:
setup.bat
- Launch the app with:
pythonw CrossComms.pywOr double-click:
CrossComms.pyw
The setup script downloads and installs:
- local Python dependencies into
.packages - local OPUS translation helper dependencies into
.packages-opus - Piper runtime into
.piper-runtime\piper - the default Piper voice set into
.piper-runtime\voices
Default voices included by setup:
- English
- Spanish
- French
- German
- Italian
- Portuguese
- Portuguese (Brazil)
- Russian
- Vietnamese
- Chinese (Simplified)
If you want CrossComms to speak into Discord or a game, use this routing:
- In CrossComms:
Input Microphone= your real mic - In CrossComms:
Virtual Cable Out=CABLE Input (VB-Audio Virtual Cable) - In Discord or your game:
microphone/input device =
CABLE Output (VB-Audio Virtual Cable)
That means:
- your real mic goes into CrossComms
- CrossComms speaks into
CABLE Input - Discord/game listens to
CABLE Output
After launch:
- Pick your
Source Language - Pick your
Target Language - Pick your real mic as
Input Microphone - Pick
CABLE InputasVirtual Cable Out - Click
Start - Say a short phrase
If you just want to test without talking, use the Manual Test section in the app.
CrossComms currently has two translation modes:
WebUses the online translation backend. This is the most broadly compatible mode right now.Local OPUSUses local OPUS/CTranslate2 models first. If a local pair is missing, CrossComms automatically falls back to the web translator instead of echoing your English back.
Current Local OPUS target coverage that I verified:
- local-first working:
es,fr,de,it,ru,vi,zh-CN - web fallback currently used:
pt,pt-BR
So if you want the safest setup today, use:
GPU Only + Local OPUSfor the fastest local-first pathGPU Only + Webif you want the broadest compatibility
Current built-in language list:
enEnglishesSpanishfrFrenchdeGermanitItalianptPortuguesept-BRPortuguese (Brazil)ruRussianviVietnamesezh-CNChinese (Simplified)
These are defined in languages.json.
To add another language:
- Add it to languages.json
- Add the matching Piper
.onnxand.onnx.jsonvoice files to.piper-runtime\voices - If you want public setup to download that voice automatically too, add it to setup.ps1
- Restart the app
Example:
{
"code": "pl",
"name": "Polish",
"voice_family": "pl",
"default_target_voice": "pl_PL-darkman-medium.onnx"
}This build works, but it is still an MVP.
Current limitations:
- some
Local OPUSlanguage pairs still fall back toWeb - first use of a
Local OPUSpair may pause while its model downloads - latency is not fully optimized yet
- it is not fully streaming end-to-end yet
- mic sensitivity is not exposed as a simple UI slider yet
- VB-CABLE routing still depends on correct Windows device selection
Run tests:
python -m unittest discover -s testsCompile check:
python -m compileall src app.py CrossComms.pywLaunch with console hidden:
pythonw CrossComms.pyw