code: def __call__(self, sources):
      for i, source in enumerate(sources):
          if np.random.random() > self.rate:
              continue
  
          pri = source.numpy()
  
          if np.random.random() > self.mixing_noise_rate:
              sec = sources[np.random.randint(0, len(sources))].numpy()
              snr = rand_uniform(
                  self.utterance_snr_min, self.utterance_snr_max
              )
          else:
              sec = self.noise_shaper.pick_sample(source.shape)
              snr = rand_uniform(self.noise_snr_min, self.noise_snr_max)
  
          L1 = pri.shape[-1]
          L2 = sec.shape[-1]
          l = np.random.randint(0, min(round(L1 / 2), L2))  # mix len
          s_source = np.random.randint(0, L1 - l)
          s_sec = np.random.randint(0, L2 - l)
  
          get_power = lambda x: np.mean(x**2)
          if get_power(sec) == 0:
              continue
  
          scl = np.sqrt(
              get_power(pri) / (np.power(10, snr / 10) * get_power(sec))
          )
  
          pri[s_source : s_source + l] = np.add(
              pri[s_source : s_source + l],
              np.multiply(scl, sec[s_sec : s_sec + l]),
          )
          sources[i] = torch.from_numpy(pri).float()
  
      return sources
  
file_path: fairseq/fairseq/data/audio/dataset_transforms/noisyoverlapaugment.py
imports: import numpy
  import torch
  from fairseq.data.audio import rand_uniform
  from fairseq.data.audio.dataset_transforms import AudioDatasetTransform, register_audio_dataset_transform
  from fairseq.data.audio.waveform_transforms.noiseaugment import NoiseAugmentTransform
label_desc: Use image node_id 4 for calling the NoisyOverlapAugment obj's underlying member method code with example usage: obj.__call__(sources) and returns: sources