code: def extract_labels(
      self,
      source: torch.Tensor,
      padding_mask: Optional[torch.Tensor] = None,
      fbank_mean: float = 15.41663,
      fbank_std: float = 6.55582,
  ):
      fbank = self.preprocess(
          source, fbank_mean=fbank_mean, fbank_std=fbank_std
      )
  
      if padding_mask is not None:
          padding_mask = self.forward_padding_mask(fbank, padding_mask)
  
      fbank = fbank.unsqueeze(1)
      features = self.patch_embedding(fbank)
      features = features.reshape(
          features.shape[0], features.shape[1], -1
      )
      features = features.transpose(1, 2)
      features = self.layer_norm(features)
  
      if padding_mask is not None:
          padding_mask = self.forward_padding_mask(
              features, padding_mask
          )
  
      if self.post_extract_proj is not None:
          features = self.post_extract_proj(features)
  
      x = self.dropout_input(features)
  
      x, layer_results = self.encoder(
          x,
          padding_mask=padding_mask,
      )
  
      quantize_input = self.quantize_layer(x)
      quantize_feature, embed_loss, embed_ind = self.quantize(
          quantize_input
      )
  
      return embed_ind
  
file_path: lavis/lavis/models/beats/Tokenizers.py
imports: import torch
  import torch.nn
  from torch.nn import LayerNorm
  import torchaudio.compliance.kaldi
  from lavis.models.beats.backbone import TransformerEncoder
  from lavis.models.beats.quantizer import NormEMAVectorQuantizer
  import logging
  from typing import Optional
label_desc: Use image node_id 4 for calling the Tokenizers obj's underlying member method code with example usage: obj.extract_labels(source, padding_mask, fbank_mean, fbank_std) and returns: embed_ind