Phone banking is still how millions of people in Latin America manage their money — and it's increasingly under attack from synthetic voices that sound human but aren't.
For HackMTY 2026, we built Wave to answer one question on every incoming call: is the caller a real person, or a machine?
The challenge gave us stereo telephony audio — 8 kHz, Mexican Spanish — with the caller on channel 0 and the bank's AI agent on channel 1. Synthetic callers weren't replayed clips; they were full live stacks dialing in and holding a conversation.
We started by measuring everything we could think of — 68 features across acoustic, behavioral, and semantic dimensions. The data told us to go deep, not wide. Two signals dominated:
Acoustic texture — real throats vary in loudness, brightness, and buzziness throughout a call; vocoders stay unnaturally steady. Turn-taking behavior — after the agent stops speaking, humans respond in ~1.2 seconds; synthetic stacks wait ~2.6 seconds because they must detect silence before they can start. We built a tandem pipeline: hybrid voice-activity detection segments both channels, two logistic-regression specialists score acoustic and behavioral features, and a fusion layer combines them. The whole thing runs in 22 ms on CPU and ships as a single JSON model file.
On the labeled validation set — 71 calls, speaker-disjoint from training — Wave scored 97.2% accuracy (69/71). Semantic analysis is wired but held back until transcripts are available at inference time; depth beat breadth.
Built With
- cloudflare
- fastapi
- numpy
- pydantic
- python
- pytorch
- silero
- soundfile
- tunnel
- uvicorn
- vad
Log in or sign up for Devpost to join the conversation.