{"record":{"id":"75a72c6843672990","repo":"huggingface/transformers","slug":"you-have-provided-mel-filters-but-power-is-no","errorCode":null,"errorMessage":"You have provided `mel_filters` but `power` is `None`. Mel spectrogram computation is not yet supported for complex-valued spectrogram.Specify `power` to fix this issue.","messagePattern":"You have provided `mel_filters` but `power` is `None`\\. Mel spectrogram computation is not yet supported for complex-valued spectrogram\\.Specify `power` to fix this issue\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/transformers/audio_utils.py","lineNumber":948,"sourceCode":"        fft_length = frame_length\n\n    if frame_length > fft_length:\n        raise ValueError(f\"frame_length ({frame_length}) may not be larger than fft_length ({fft_length})\")\n\n    if window_length != frame_length:\n        raise ValueError(f\"Length of the window ({window_length}) must equal frame_length ({frame_length})\")\n\n    if hop_length <= 0:\n        raise ValueError(\"hop_length must be greater than zero\")\n\n    if waveform.ndim != 1:\n        raise ValueError(f\"Input waveform must have only one dimension, shape is {waveform.shape}\")\n\n    if np.iscomplexobj(waveform):\n        raise ValueError(\"Complex-valued input waveforms are not currently supported\")\n\n    if power is None and mel_filters is not None:\n        raise ValueError(\n            \"You have provided `mel_filters` but `power` is `None`. Mel spectrogram computation is not yet supported for complex-valued spectrogram.\"\n            \"Specify `power` to fix this issue.\"\n        )\n\n    # center pad the waveform\n    if center:\n        padding = [(int(frame_length // 2), int(frame_length // 2))]\n        waveform = np.pad(waveform, padding, mode=pad_mode)\n\n    # promote to float64, since np.fft uses float64 internally\n    waveform = waveform.astype(np.float64)\n    window = window.astype(np.float64)\n\n    # split waveform into frames of frame_length size\n    num_frames = int(1 + np.floor((waveform.size - frame_length) / hop_length))\n\n    num_frequency_bins = (fft_length // 2) + 1 if onesided else fft_length\n    spectrogram = np.empty((num_frames, num_frequency_bins), dtype=np.complex64)","sourceCodeStart":930,"sourceCodeEnd":966,"githubUrl":"https://github.com/huggingface/transformers/blob/a597f974857b3d92939971296bc0deb93d33d780/src/transformers/audio_utils.py#L930-L966","documentation":"Thrown by `spectrogram` when `mel_filters` is provided but `power` is None. Mel spectrograms are computed by projecting a power spectrogram onto the mel filter bank; with power=None the function returns a complex-valued STFT, and mel projection of complex values is not implemented, so the combination is rejected. The message is split across two string literals so it reads as one sentence ending '...fix this issue.'.","triggerScenarios":"Calling `spectrogram(waveform, window, frame_length, hop_length, power=None, mel_filters=some_mel_filter_bank(...))`. Common when implementing a complex STFT pipeline and reusing the mel path, or when power was accidentally set to None from a config default.","commonSituations":"Custom feature extractors that pass mel_filters unconditionally but make power configurable; porting code that expects complex spectrograms; configs where 'power': null appears alongside mel settings.","solutions":["Set power to a float (1.0 for magnitude, 2.0 for power spectrogram) when using mel_filters","If you truly need a complex STFT, drop the mel_filters argument","Validate that configs do not combine power=null with mel filter settings"],"exampleFix":"// before\nmel = mel_filter_bank(257, 80, 16000)\nspec = spectrogram(waveform, window, 400, 160, power=None, mel_filters=mel)  # ValueError\n\n// after\nspec = spectrogram(waveform, window, 400, 160, power=2.0, mel_filters=mel)","handlingStrategy":"validation","validationCode":"if mel_filters is not None:\n    power = power if power is not None else 2.0  # mel requires a real-valued (power) spectrogram\nspec = spectrogram(waveform, window, frame_length, hop_length, power=power, mel_filters=mel_filters)","typeGuard":"def mel_config_is_consistent(power, mel_filters) -> bool:\n    return mel_filters is None or power is not None","tryCatchPattern":"try:\n    spec = spectrogram(waveform, window, frame_length, hop_length, power=power, mel_filters=mel_filters)\nexcept ValueError as e:\n    if \"mel_filters\" in str(e) and \"power\" in str(e):\n        spec = spectrogram(waveform, window, frame_length, hop_length, power=2.0, mel_filters=mel_filters)\n    else:\n        raise","preventionTips":["Always pair mel_filters with an explicit power (2.0 is standard)","For complex STFT output, omit mel_filters entirely","Reject configs that combine power=null with mel settings"],"tags":["audio","mel-spectrogram","argument-validation"],"backgroundTag":null,"analyzedSha":"a597f974857b3d92939971296bc0deb93d33d780","analyzedAt":"2026-08-14T18:24:08.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}