Test files › Audio and video › silence-30s.wav
30-second silent WAV file
30 seconds of digital silence, 16-bit PCM mono.
↓ Download silence-30s.wav| Filename | silence-30s.wav |
| Format | WAV |
| Size | 2.5 MB (2,646,044 bytes) |
| MIME type | audio/wav |
| SHA-256 | 34e20072bd56124004287878b329f8869869aba39273214720521bf7a0a3425f |
What this file catchesTranscription and voice-activity pipelines that hang or return an empty result without distinguishing "no speech" from "processing failed". Also normalisation code that divides by peak amplitude - here, zero.
Handle it in code
Each snippet below was run against this exact file with Python 3.14.4 and Node 24.15.0 when this page was built, and the output shown is what it printed.
Python
Compare what the header declares with what the file holds, and refuse a header that is itself cut short.
import wave
try:
with wave.open("silence-30s.wav") as w:
declared = w.getnframes()
frame_size = w.getsampwidth() * w.getnchannels()
actual = len(w.readframes(declared)) // frame_size
note = "truncated or lying header" if actual < declared else "ok"
print(f"header says {declared} frames, file holds {actual}: {note}")
except (wave.Error, EOFError) as e:
print("rejected:", str(e) or "the header is cut short")Run against this file, it prints: header says 1323000 frames, file holds 1323000: ok
Related guides and tools
Download & verify
curl -fsSL -o "silence-30s.wav" "https://files.hexaqa.com/audio/silence-30s.wav"
curl -fsSL "https://files.hexaqa.com/audio/silence-30s.wav" | sha256sum
# expect: 34e20072bd56124004287878b329f8869869aba39273214720521bf7a0a3425f