First 12 slaney-normalized triangles of filters.mel_filterbank(22050, 2048, 40)
(re-exported from scripts/xa-mel.js) plotted over a Hz axis — the mel-filterbank classic.
Proofs: the Slaney boundary identities hz_to_mel(1000)=15 and mel_to_hz(15)=1000 (float-exact:
≤1e-9; the raw float64 value is 15 − 1.8e-15 from 200/3 roundoff),
filterbank shape 40 × 1025, every filter elementwise-matches an independent Slaney-formula
reconstruction (mel grid rebuilt via xa-convert's separate hz_to_mel/mel_to_hz implementation)
within 1e-6, and each triangle's peak equals the Slaney area norm 2/(mel_f[i+2]−mel_f[i]):
never above it, and within the provable half-FFT-bin sampling bound below it (the continuous
apex falls between FFT bins, so a "peak == enorm within 1e-6" literal read is impossible on the
sampled grid — measured misses run up to 6%, exactly the bin-quantization bound predicts).