Voice Anti-Spoofing & Audio Watermarking — ASVspoof 5, AudioSeal, WaveVerify
Voice cloning shipped years before anyone built defenses for it. A production voice system in 2026 needs two things: a detector (AASIST, RawNet2) that tells real speech from fake, and a watermark (AudioSeal) that survives compression and editing. Ship both, or don't ship voice cloning at all.
Learning Objectives
- Name the three defenses a production voice system needs in 2026 (anti-spoofing detection, audio watermarking, and authenticated provenance) and explain which threat each one covers.
- Read an ASVspoof 5 EER number and explain what changed in the benchmark's data, speaker count, and attack coverage versus earlier editions.
- Embed and detect an AudioSeal watermark in code, and explain why a watermark with no detector running, or a C2PA manifest with no watermark, each fail on their own.
- Match a detection model, watermark, and provenance approach to a specific voice-system use case: shipping TTS, biometric unlock, fraud detection, or provenance signing.
The Problem
Voice cloning shipped years ahead of any way to catch it, so a production voice system now needs three separate defenses layered together.
- Anti-spoofing / deepfake detection. Given an audio clip, is it synthetic or real? The ASVspoof benchmarks (2019, then 2021, now ASVspoof 5) are still the reference point.
- Audio watermarking. Embed a signal in generated audio that's inaudible to a listener but recoverable by a detector later. AudioSeal (Meta) and WavMark are the open options.
- Authenticated provenance. Cryptographically sign the audio file and its metadata, in the C2PA / Content Authenticity Initiative format.
Detection is for the adversary who won't cooperate. Watermarking is for the honest case, marking AI-generated audio as AI-generated for compliance. Both are required in 2026.
The Concept
ASVspoof 5: the 2024-2025 benchmark
Here's what changed from prior editions:
- Crowdsourced data, not studio-clean recordings, so conditions match what a detector actually sees in production.
- ~2000 speakers, up from ~100 in earlier editions.
- 32 attack algorithms, spanning TTS, voice conversion, and adversarial perturbation.
- Two tracks: Countermeasure (CM) for standalone detection, and Spoofing-robust ASV (SASV) for biometric systems.
State of the art on ASVspoof 5 sits around 7.23% EER (equal error rate: the point where a detector's false-accept rate and false-reject rate cross, so lower is better). On the older ASVspoof 2019 LA set it's 0.42% EER. In the wild, on real deployment traffic, expect 5-10% EER instead.
AASIST and RawNet2: the detection model families
AASIST (2021, updated through 2026) runs graph attention over spectral features and is the current SOTA on the ASVspoof 5 countermeasure task.
RawNet2 pairs a convolutional front-end over the raw waveform with a TDNN backbone. It's the simpler baseline, and still competitive once you fine-tune it.
NeXt-TDNN plus SSL features, a 2025 variant, combines an ECAPA-style architecture with WavLM features and focal loss. That combination is what reaches the 0.42% EER figure on ASVspoof 2019 LA quoted above.
AudioSeal: the 2024 watermark default
Meta shipped AudioSeal in January 2024, with v0.2 following in December 2024. Five choices define the design:
- Localized. It detects the watermark per frame, at 16 kHz sample resolution (1/16000 s).
- Generator and detector jointly trained. The generator learns to embed an inaudible signal; the detector learns to find it by training through augmentations.
- Robust. It survives MP3/AAC compression, EQ, speed-shift of ±10%, and a noise mix at +10 dB SNR.
- Fast. The detector runs at 485× realtime, about 1000× faster than WavMark.
- High capacity. A 16-bit payload, enough to encode a model ID, generation timestamp, and user ID, embeds in every utterance.
WavMark
WavMark was the open baseline before AudioSeal: an invertible neural network carrying 32 bits/sec. It has real problems, though:
- Synchronization relies on brute force, and that's slow.
- Gaussian noise or MP3 compression can strip it out.
- It isn't real-time friendly.
WaveVerify (July 2025)
WaveVerify targets exactly what AudioSeal struggles with: temporal manipulation, meaning reversal and speed changes. It pairs a FiLM-based generator with a Mixture-of-Experts detector, and is competitive with AudioSeal on standard attacks while also holding up under temporal edits.
The gap adversaries exploit
AudioMarkBench found the gap all of these share: "under pitch shift, all watermarks show Bit Recovery Accuracy below 0.6, indicating near-complete removal." Pitch-shift is the universal attack. No 2026 watermark fully resists aggressive pitch modification, which is exactly why you pair watermarking with detection like AASIST rather than relying on either alone.
C2PA / Content Authenticity Initiative
C2PA isn't an ML technique. It's a manifest format: audio files carry cryptographically signed metadata about the creation tool, author, and date. Meta's own Audiobox and Seamless demos ship AudioSeal watermarks, not C2PA manifests, which is a sign of how far behind images audio-side C2PA adoption still is. It's good for provenance, but it does nothing once a bad actor re-encodes the file and strips the metadata.
Build It
Step 1: a simple spectral-feature detector (toy)
Synthetic speech tends to have unusually flat high-frequency energy compared to a real recording, and that's the intuition a cheap spectral-rolloff check can lean on:
def spectral_rolloff(spec, percentile=0.85):
cum = 0
total = sum(spec)
if total == 0:
return 0
threshold = total * percentile
for k, v in enumerate(spec):
cum += v
if cum >= threshold:
return k
return len(spec) - 1
def is_suspicious(audio):
spec = magnitude_spectrum(audio)
rolloff = spectral_rolloff(spec)
return rolloff / len(spec) > 0.92Production systems use AASIST instead, which works from a much richer set of spectro-temporal features rather than one rolloff heuristic. The basic intuition still holds, though: synthesis leaves a spectral fingerprint, and a detector's job is to find it.
Step 2: AudioSeal embed + detect
from audioseal import AudioSeal
import torch
generator = AudioSeal.load_generator("audioseal_wm_16bits")
detector = AudioSeal.load_detector("audioseal_detector_16bits")
audio = load_wav("generated.wav", sr=16000)[None, None, :]
payload = torch.tensor([[1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0]])
watermark = generator.get_watermark(audio, sample_rate=16000, message=payload)
watermarked = audio + watermark
result, decoded_payload = detector.detect_watermark(watermarked, sample_rate=16000)
# result: float in [0, 1] — probability of watermark presence
# decoded_payload: 16 bits; match against embedded payloadStep 3: measuring detector quality with EER
def eer(real_scores, fake_scores):
thresholds = sorted(set(real_scores + fake_scores))
best = (float("inf"), 0.0)
for t in thresholds:
far = sum(1 for s in fake_scores if s >= t) / len(fake_scores)
frr = sum(1 for s in real_scores if s < t) / len(real_scores)
if abs(far - frr) < best[0]:
best = (abs(far - frr), (far + frr) / 2)
return best[1]Step 4: the production integration
def safe_tts(text, voice, clone_reference=None):
if clone_reference is not None:
verify_consent(user_id, clone_reference)
audio = tts_model.synthesize(text, voice)
audio_with_wm = audioseal_embed(audio, payload=build_payload(user_id, model_id))
manifest = c2pa_sign(audio_with_wm, user_id, timestamp=now())
return audio_with_wm, manifestEvery generation that leaves this pipeline ships with three things: (1) a watermark, (2) a signed manifest, (3) a retention-policy-compliant audit log.
Use It
| Use case | Defense |
|---|---|
| Shipping TTS / voice cloning | AudioSeal embed on every output (non-negotiable) |
| Biometric voice unlock | AASIST + ECAPA ensemble; liveness challenge |
| Call-center fraud detection | AASIST on 20% sample of incoming calls |
| Podcast authenticity | C2PA signing on upload, AudioSeal if AI-generated |
| Research / training detectors | ASVspoof 5 train/dev/eval sets |
Pitfalls
- Watermark without detector ever running. A watermark nobody checks is pointless. Ship the detector in your CI, not just the generator.
- Detection without calibration. AASIST trained on ASVspoof LA overfits, so real-world accuracy drops once you leave the benchmark. Calibrate on your own domain.
- Pitch-shift gap. Aggressive pitch shift removes most watermarks outright. Always have a detection fallback.
- Metadata strip-and-rehost. C2PA is trivially bypassable by re-encoding the file. Pair cryptographic and perceptual (watermark) defenses together, always.
- Liveness as detection. Asking the user to say a random phrase stops replay attacks. It does nothing against real-time cloning.
Ship It
Save this as outputs/skill-spoof-defender.md. It picks a detection model, a watermark, a provenance manifest, and an operational playbook for a voice-generation deployment.
Exercises
- Easy. Run
code/main.py. It runs the toy detector and the toy watermark embed/detect on synthetic audio. - Medium. Install
audioseal, embed a 16-bit payload in a TTS output, and re-decode it. Corrupt the audio with noise and measure Bit Recovery Accuracy. - Hard. Fine-tune a RawNet2 or AASIST on ASVspoof 2019 LA and measure EER. Then test it on a held-out set of F5-TTS-generated clips and see how much the out-of-distribution detection degrades.
Key Terms
| Term | What people say | What it actually means |
|---|---|---|
| ASVspoof | The benchmark | Biennial challenge; 2024 = ASVspoof 5. |
| EER | Error rate | Equal Error Rate: where false-accept and false-reject rates cross. Lower is better. |
| CM (countermeasure) | Detector | Classifier: real speech vs synthetic / converted. |
| SASV | Speaker verif + CM | Integrated biometric + spoof detection. |
| AudioSeal | Meta watermark | Localized, 16-bit payload, 485× faster than WavMark. |
| Bit Recovery Accuracy | Watermark survival | Fraction of payload bits recovered after attack. |
| C2PA | Provenance manifest | Cryptographic metadata about creation / authorship. |
| AASIST | Detector family | Graph-attention-based anti-spoofing SOTA. |
Further Reading
- Todisco et al. (2024). ASVspoof 5: the current benchmark.
- Defossez et al. (2024). AudioSeal: the watermark default.
- Chen et al. (2025). WaveVerify: the MoE detector built for temporal attacks.
- Jung et al. (2022). AASIST: the SOTA detection backbone.
- AudioMarkBench (2024): the robustness evaluation cited above.
- C2PA specification: the provenance manifest format.
Code
- main.py (python, 140 lines)