metadata
title: VoxSplit
emoji: 🎙️
colorFrom: purple
colorTo: pink
sdk: docker
app_port: 7860
pinned: false
Audio Transcription & Gender Detection (POC)
Upload a .wav file and get a diarized, timestamped transcript (via the
Sarvam AI saaras:v3 batch API) plus a per-speaker
gender estimate. The transcript is synced to audio playback — the active
segment highlights as it plays, and clicking a segment seeks to it.
How it works
- The WAV is uploaded to a small FastAPI backend.
- The backend runs a Sarvam batch STT job with
with_diarization=True, which returns speaker-labelled segments with start/end timestamps. - For each speaker, the backend pools all of their audio and runs the
prithivMLmods/Common-Voice-Gender-Detectionwav2vec2 classifier, returning softmax female / male probabilities. Below a 0.6 confidence floor (or with too little audio) the speaker is marked uncertain. - The frontend renders the audio player, a speaker legend, and the synced transcript.
The gender model is downloaded from HuggingFace on first run (
360 MB) and cached. It's a trained classifier (98% reported accuracy) but can still err on children, atypical voices, or noisy/short audio.
Setup
cd audio-gender-detection
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # then add your Sarvam API key
.env:
SARVAM_API_KEY=your_sarvam_api_key_here
NUM_SPEAKERS=2
(You can also paste the key directly into the UI instead of using .env.)
Run
uvicorn backend.main:app --reload --port 8000
Notes
- Diarization is only available through Sarvam's Batch API, so processing is asynchronous — longer files take longer.
- Uploaded files land in
uploads/(gitignored). Clean it up periodically. librosa/soundfileneed a working audio backend; on macOS these install cleanly via pip. On Linux you may needlibsndfile1(apt install libsndfile1).