class_docstr: Definition of sine generator
  SineGen(samp_rate, harmonic_num = 0,
          sine_amp = 0.1, noise_std = 0.003,
          voiced_threshold = 0,
          flag_for_pulse=False)
  
  sample_rate: sampling rate in Hz
  harmonic_num: number of harmonic overtones (default 0)
  sine_amp: amplitude of sine-wavefrom (default 0.1)
  noise_std: std of Gaussian noise (default 0.003)
  voiced_thoreshold: F0 threshold for U/V classification (default 0)
  flag_for_pulse: this SinGen is used inside PulseGen (default False)
  
  Note: when flag_for_pulse is True, the first time step of a voiced
      segment is always sin(np.pi) or cos(0)
code: def __init__(
      self,
      sample_rate,
      harmonic_num=0,
      sine_amp=0.1,
      noise_std=0.003,
      voiced_threshold=0,
      flag_for_pulse=False,
  ):
      super(SineGen, self).__init__()
      self.sine_amp = sine_amp
      self.noise_std = noise_std
      self.harmonic_num = harmonic_num
      self.dim = self.harmonic_num + 1
      self.sampling_rate = sample_rate
      self.voiced_threshold = voiced_threshold
      self.flag_for_pulse = flag_for_pulse
  
imports: import numpy
  import torch
label_desc: Use image node_id 1 to create a new SineGen object from inherited base classes: torch.nn with example: obj = SineGen(sample_rate, harmonic_num, sine_amp, noise_std, voiced_threshold, flag_for_pulse)