code: def forward(self, units: Union[str, torch.Tensor]) -> torch.Tensor:
      if isinstance(units, torch.Tensor):
          units_str = " ".join([str(x) for x in units.cpu().tolist()])
      else:
          units_str = units
      tts_input = self.tts_dataset.get_tensor(units_str)
      tts_input = tts_input.to(self.device)
      _, _, aud_dn, _ = synthesize_audio(
          self.tacotron_model,
          self.waveglow_model,
          self.denoiser_model,
          tts_input.unsqueeze(0),
          strength=self.denoiser_strength,
      )
      out_audio = aud_dn[0]
      return out_audio
  
file_path: textlesslib/textless/vocoders/tacotron2/vocoder.py
imports: import torch.nn
  import torch
  from .tts_data import TacotronInputDataset
  from .model import Tacotron2
  from .glow import WaveGlow
  from .waveglow_denoiser import Denoiser
  from textless.checkpoint_manager import CHECKPOINT_MANAGER
  from typing import Union
label_desc: Use image node_id 2 for calling the TacotronVocoder obj's underlying member method code with example usage: obj.forward(units) and returns: out_audio