Collect labelled audio
Assemble clips with speech/silence labels across microphones and environments; include short silences and overlapping sounds.
Detect voice activity. Judge whether audio contains speech.
Voice activity detection (VAD) locates segments that contain human speech inside an audio stream. Practical issues include background noise, music, transient sounds, varying microphone characteristics, and latency requirements for real-time systems.
Learning concept · Not a validated service
Voice activity detection (VAD) locates segments that contain human speech inside an audio stream. Practical issues include background noise, music, transient sounds, varying microphone characteristics, and latency requirements for real-time systems.
A proposed extension: enable a teleconferencing client to mute non-speech segments and reduce bandwidth use while leaving a human reviewer in control for any flagged low-confidence decisions.
Assemble clips with speech/silence labels across microphones and environments; include short silences and overlapping sounds.
Compute frame-level features such as log-Mel spectrograms, energy, and spectral flux with appropriate windowing and normalisation.
Train a lightweight classifier or neural model on frame labels and evaluate frame F1, precision at fixed recall and latency on a held-out test set.
Define runtime latency and false-speech costs, add monitoring for drift and SNR changes, and require a human review path for low-confidence outputs.
The supplied starter synthesises two classes of pure-tone audio clips (≈440 Hz and ≈880 Hz) with Gaussian noise, computes simple FFT-based summary features, fits a scikit-learn RandomForestClassifier on those features, and prints a classification report.
rows = [synth_clip(440 + rng.normal(0, 20), 0) for _ in range(80)]
rows += [synth_clip(880 + rng.normal(0, 20), 1) for _ in range(80)]
X = np.array([row[0] for row in rows])
y = np.array([row[1] for row in rows])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42, stratify=y)
model = RandomForestClassifier(n_estimators=200, random_state=42)
model.fit(X_train, y_train)The starter does not use real speech or speech-derived features and therefore does not implement voice activity detection. It classifies synthetic sine-wave tones by frequency using four global FFT summary statistics on 1-second clips and a RandomForest; results do not validate VAD performance on speech, noise or overlapping sources.
A proposed extension is to replace the synthetic data with labelled speech/non-speech frames (for example from Common Voice or a small collected corpus), extract frame-level log-Mel features, train a lightweight neural VAD, and surface low-confidence segments for human review.
This is a potential application pathway, not a delivered product. The supplied starter does not implement this service or validate it with real users.
Networkers Home runs this topic inside its AI Engineer Course, with placement support and hands-on labs.