python 41 lines · 5 steps

Reading WAV metadata into a dataclass

Open a WAV file, pull its raw audio parameters, and derive duration and bitrate into a typed record.

Explained by highlit
1import wave
2import os
3from dataclasses import dataclass
4 
5 
6@dataclass
7class WavInfo:
8 path: str
9 channels: int
10 sample_rate: int
11 sample_width_bits: int
12 frame_count: int
13 duration_seconds: float
14 file_size_bytes: int
15 bitrate_kbps: float
16 
17 
18def read_wav_metadata(path: str) -> WavInfo:
19 with wave.open(path, "rb") as wav:
20 channels = wav.getnchannels()
21 sample_rate = wav.getframerate()
22 sample_width = wav.getsampwidth()
23 frame_count = wav.getnframes()
24 
25 if sample_rate == 0:
26 raise ValueError(f"{path}: invalid sample rate of 0")
27 
28 duration = frame_count / sample_rate
29 file_size = os.path.getsize(path)
30 bitrate = sample_rate * sample_width * 8 * channels / 1000
31 
32 return WavInfo(
33 path=path,
34 channels=channels,
35 sample_rate=sample_rate,
36 sample_width_bits=sample_width * 8,
37 frame_count=frame_count,
38 duration_seconds=round(duration, 3),
39 file_size_bytes=file_size,
40 bitrate_kbps=round(bitrate, 1),
41 )
01 / 01
STEP 01

Walkthrough

Space play step click any line
Three takeaways
  1. 1A dataclass gives you a typed, self-documenting container for structured results with almost no boilerplate.
  2. 2Reading with a context manager guarantees the file handle closes even before you compute derived values.
  3. 3Guarding against divide-by-zero inputs turns a cryptic crash into a clear, actionable error.

Related explainers

Share this explainer

Here's the card — post it anywhere.

Reading WAV metadata into a dataclass — share card
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code