code: def griffin_lim(
      spc: np.ndarray,
      n_fft: int,
      n_shift: int,
      win_length: int = None,
      window: Optional[str] = "hann",
      n_iter: Optional[int] = 32,
  ) -> np.ndarray:
      """Convert linear spectrogram into waveform using Griffin-Lim.
  
      Args:
          spc: Linear spectrogram (T, n_fft // 2 + 1).
          n_fft: The number of FFT points.
          n_shift: Shift size in points.
          win_length: Window length in points.
          window: Window function type.
          n_iter: The number of iterations.
  
      Returns:
          Reconstructed waveform (N,).
  
      """
      # assert the size of input linear spectrogram
      assert spc.shape[1] == n_fft // 2 + 1
  
      if V(librosa.__version__) >= V("0.7.0"):
          # use librosa's fast Grriffin-Lim algorithm
          spc = np.abs(spc.T)
          y = librosa.griffinlim(
              S=spc,
              n_iter=n_iter,
              hop_length=n_shift,
              win_length=win_length,
              window=window,
              center=True if spc.shape[1] > 1 else False,
          )
      else:
          # use slower version of Grriffin-Lim algorithm
          logging.warning(
              "librosa version is old. use slow version of Grriffin-Lim algorithm."
              "if you want to use fast Griffin-Lim, please update librosa via "
              "`source ./path.sh && pip install librosa==0.7.0`."
          )
          cspc = np.abs(spc).astype(np.complex).T
          angles = np.exp(2j * np.pi * np.random.rand(*cspc.shape))
          y = librosa.istft(
              cspc * angles, n_shift, win_length, window=window
          )
          for i in range(n_iter):
              angles = np.exp(
                  1j
                  * np.angle(
                      librosa.stft(
                          y, n_fft, n_shift, win_length, window=window
                      )
                  )
              )
              y = librosa.istft(
                  cspc * angles, n_shift, win_length, window=window
              )
  
      return y
  
file_path: espnet/espnet2/utils/griffin_lim.py
imports: import logging
  from functools import partial
  from typing import Optional
  import librosa
  import numpy
  import torch
  from packaging.version import parse
  from typeguard import check_argument_types
label_desc: Use image node_id 2 for calling a global function with example usage: griffin_lim(spc, n_fft, n_shift, win_length, window, n_iter) and returns: y