Skip to main content

Function Signature

Computes the log-Mel spectrogram of audio using Short-Time Fourier Transform (STFT) and Mel filterbanks. This is the core preprocessing step that converts raw audio into the format expected by Whisper’s encoder.

Parameters

Union[str, np.ndarray, torch.Tensor]
required
The input audio. Can be:
  • A string path to an audio file (will be loaded using load_audio)
  • A NumPy array containing the audio waveform at 16 kHz
  • A PyTorch Tensor containing the audio waveform at 16 kHz
int
default:"80"
The number of Mel-frequency filters to use. Only 80 and 128 are supported. The default 80 matches Whisper’s standard configuration.
int
default:"0"
Number of zero samples to pad to the right of the audio waveform.
Optional[Union[str, torch.device]]
default:"None"
If specified, the audio tensor is moved to this device before computing the STFT. Use "cuda" for GPU acceleration or "cpu" for CPU processing.

Returns

torch.Tensor
A Tensor containing the log-Mel spectrogram. Values are normalized to approximately the range [0, 1].

Example

Processing Pipeline

The function performs the following steps:
  1. Input Conversion: If the input is a file path, it loads the audio using load_audio(). NumPy arrays are converted to PyTorch tensors.
  2. Device Transfer: If a device is specified, the audio tensor is moved to that device.
  3. Padding: If padding > 0, zero samples are added to the right.
  4. STFT Computation: Applies Short-Time Fourier Transform with:
    • Window: Hann window of size N_FFT (400)
    • Hop length: HOP_LENGTH (160 samples)
    • Returns complex-valued spectrogram
  5. Magnitude Calculation: Computes squared magnitude of the STFT (power spectrum), excluding the last frequency bin.
  6. Mel Filtering: Projects the power spectrum onto Mel scale using pre-computed filterbanks.
  7. Log Scaling and Normalization:
    • Clamps minimum values to 1e-10 to avoid log(0)
    • Converts to log10 scale
    • Applies dynamic range compression (maximum 80 dB range)
    • Normalizes: (log_spec + 4.0) / 4.0

Audio Constants Used

Notes

  • The function uses pre-computed Mel filterbanks stored in mel_filters.npz to avoid dependency on librosa.
  • The STFT uses a Hann window for smooth frequency resolution.
  • The dynamic range is limited to 80 dB by clamping: torch.maximum(log_spec, log_spec.max() - 8.0)
  • The final normalization (log_spec + 4.0) / 4.0 centers the values around a suitable range for the neural network.

Integration with Whisper Model