code: def mel_spectrogram(
      y,
      n_fft,
      num_mels,
      sampling_rate,
      hop_size,
      win_size,
      fmin,
      fmax,
      center=False,
  ):
      if torch.min(y) < -1.0:
          print("min value is ", torch.min(y))
      if torch.max(y) > 1.0:
          print("max value is ", torch.max(y))
  
      global mel_basis, hann_window
      if fmax not in mel_basis:
          mel = librosa_mel_fn(
              sr=sampling_rate,
              n_fft=n_fft,
              n_mels=num_mels,
              fmin=fmin,
              fmax=fmax,
          )
          mel_basis[str(fmax) + "_" + str(y.device)] = (
              torch.from_numpy(mel).float().to(y.device)
          )
          hann_window[str(y.device)] = torch.hann_window(win_size).to(
              y.device
          )
  
      y = torch.nn.functional.pad(
          y.unsqueeze(1),
          (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)),
          mode="reflect",
      )
      y = y.squeeze(1)
  
      spec = torch.stft(
          y,
          n_fft,
          hop_length=hop_size,
          win_length=win_size,
          window=hann_window[str(y.device)],
          center=center,
          pad_mode="reflect",
          normalized=False,
          onesided=True,
          return_complex=False,
      )
  
      spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))
  
      spec = torch.matmul(
          mel_basis[str(fmax) + "_" + str(y.device)], spec
      )
      spec = spectral_normalize_torch(spec)
  
      return spec
  
imports: import torch
  import torch.utils.data
  from librosa.filters import mel
label_desc: Use image node_id 3 for calling a global function with example usage: mel_spectrogram(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center) and returns: spec