class_docstr: Convert STFT to fbank feats
  
  The arguments is same as librosa.filters.mel
  
  Args:
      fs: number > 0 [scalar] sampling rate of the incoming signal
      n_fft: int > 0 [scalar] number of FFT components
      n_mels: int > 0 [scalar] number of Mel bands to generate
      fmin: float >= 0 [scalar] lowest frequency (in Hz)
      fmax: float >= 0 [scalar] highest frequency (in Hz).
          If `None`, use `fmax = fs / 2.0`
      htk: use HTK formula instead of Slaney
code: def forward(
      self,
      feat: torch.Tensor,
      ilens: torch.Tensor = None,
  ) -> Tuple[torch.Tensor, torch.Tensor]:
      # feat: (B, T, D1) x melmat: (D1, D2) -> mel_feat: (B, T, D2)
      mel_feat = torch.matmul(feat, self.melmat)
      mel_feat = torch.clamp(mel_feat, min=1e-10)
  
      if self.log_base is None:
          logmel_feat = mel_feat.log()
      elif self.log_base == 2.0:
          logmel_feat = mel_feat.log2()
      elif self.log_base == 10.0:
          logmel_feat = mel_feat.log10()
      else:
          logmel_feat = mel_feat.log() / torch.log(self.log_base)
  
      # Zero padding
      if ilens is not None:
          logmel_feat = logmel_feat.masked_fill(
              make_pad_mask(ilens, logmel_feat, 1), 0.0
          )
      else:
          ilens = feat.new_full(
              [feat.size(0)], fill_value=feat.size(1), dtype=torch.long
          )
      return logmel_feat, ilens
  
file_path: espnet/espnet2/layers/log_mel.py
imports: from typing import Tuple
  import librosa
  import torch
  from espnet.nets.pytorch_backend.nets_utils import make_pad_mask
label_desc: Use image node_id 3 for calling the LogMel obj's underlying member method code with example usage: obj.forward(feat, ilens) and returns: logmel_feat,  ilens