Repository navigation
Releases: TadB0x/VoiceMesh
Release list
VoiceMesh v1.6.0
VoiceMesh v1.5.1
Fix: app now appears in default dialer list. Uses RoleManager on Android 10+.
VoiceMesh v1.5.0 — InCallService
Set VoiceMesh as default dialer → TTS goes directly into the call to the iPhone user. No speakerphone. No mic. Main screen shows a 'Set as Default Dialer' button.
VoiceMesh v1.4.3
Fix TTS not reaching iPhone user — routes through speakerphone→mic→call uplink. Earpiece restores automatically when message finishes speaking.
VoiceMesh v1.4.2
Fix send/attach buttons not working in TTS mode.
VoiceMesh v1.4.1
TTS fallback triggers after 15s of no response (was 36s).
VoiceMesh v1.4.0 — Quiet + iOS TTS
VoiceMesh v1.4.0
Quiet handshake + volume ducking
The key exchange no longer sounds eerie. Two changes:
8% amplitude for control frames — handshake, ACKs, and baud probe packets are encoded at 8% of max amplitude instead of 65%. The Goertzel decoder detects frequency, not volume, so it still works. In earpiece mode you'd hear a faint blip. In silent/digital mode you hear nothing.
Call volume ducked during transmission — whenever any FSK packet is sent, the call stream volume drops to 25% then restores immediately after. So even data packets (at 65% amplitude) are played at 1/4 of your current call volume.
iOS / no-VoiceMesh TTS fallback
When calling someone without VoiceMesh (iPhone, regular phone, etc.) the handshake times out after ~36 seconds. The app then switches to TTS mode:
- Your typed messages are synthesised by Android TTS and spoken aloud over the call
- The other person hears a clear voice saying "Message: [your text]"
- No VoiceMesh required on their end — works with any phone
- A red banner shows "TTS mode — speaking to non-VoiceMesh user"
- Images are disabled in this mode (can't be spoken)
Decision flow on call connect
Call active → start handshake (quiet FSK tones)
↓ response within 36s?
YES → E2E encrypted VoiceMesh session
NO → TTS fallback (spoken messages, works with iPhone)
VoiceMesh v1.3.0 — No noise, call detection, dial
VoiceMesh v1.3.0
Fixes
Startup noise (was: ear-splitting noise on app open)
The modem now only activates when a phone call is active. Opening the app no longer changes audio routing at all. The speakerphone no longer overrides connected headphones — it checks for wired and Bluetooth headsets before enabling.
Call detection
The chat screen now reads your live call state:
- Green banner: "Call active" — modem auto-starts, handshake begins
- Amber banner: "No active call" — modem stays off, send/attach disabled
- Reacts live as calls start or end while the app is open
Dial from app
Tap Dial in the chat header → enter a number → the call starts. Modem activates automatically when the call connects.
How to use now
- Open VoiceMesh → tap Dial → enter number
- When the call connects, the banner turns green and the modem starts automatically
- Wait for "E2E encrypted" to appear (~10–20 seconds for key exchange)
- Send text or images — fully encrypted, zero noise, works with headphones
VoiceMesh v1.2.0 — Silent Mode
VoiceMesh v1.2.0 — Silent Mode
No noise. No mic. Works with headphones or in complete silence.
What changed
Silent / digital mode (new default)
The app now captures call audio digitally from the phone's audio subsystem instead of acoustically through the microphone. FSK tones are injected directly into the call uplink — the remote party receives them but the local user hears nothing.
| v1.1 | v1.2 | |
|---|---|---|
| RX method | Microphone picks up earpiece | VOICE_CALL digital capture |
| TX method | Speaker plays tones (audible) | Injected into call uplink (silent) |
| Speakerphone | Required | Never needed |
| Headphones | Broke it | Works perfectly |
| Makes noise | Yes | No |
Automatic fallback
If the device denies digital capture (some stock Android 10+ phones), the app silently falls back to speakerphone+mic mode. A small badge in the chat header shows "silent" (green) or "acoustic" (amber) so you know which mode is active.
Install
Download VoiceMesh.apk, enable Unknown Sources, install. Android 8.0+.
VoiceMesh v1.1.0 — E2E Encrypted
VoiceMesh v1.1.0
What's new
End-to-end encryption
- ECDH key exchange (P-256) runs over the FSK channel itself — zero servers, zero internet
- AES-256-GCM encrypts every message (random IV, authentication tag)
- Send/attach locked until handshake completes (~10–20s at 300bps for key exchange)
- Tap the fingerprint in the chat header, read it aloud — if it matches your contact, no MITM
ARQ reliable delivery
- Every message waits for an ACK before sending the next
- Auto-retransmits up to 3× if no ACK in 12 seconds
- Failed messages marked in the UI
Baud rate negotiation
- After handshake, probes at 1200 bps
- Both sides upgrade automatically on VoLTE calls (4× faster image transfer)
- Falls back to 300 bps on poor GSM calls
Install
Download VoiceMesh.apk, enable Unknown Sources, install. Requires Android 8.0+.
Fingerprint verification
After the green "E2E encrypted" badge appears, tap the fingerprint (e.g. A1:B2:C3:D4:E5:F6) and read it to your contact. If it matches theirs — you're secure.