
    v;3h                         d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZ  G d de      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)aO  
Each generator will return float samples from -1.0 to 1.0, which can be 
converted to actual audio with 8, 16, 24, or 32 bit depth using the
SiganlGenerator.to_audio_segment() method (on any of it's subclasses).

See Wikipedia's "waveform" page for info on some of the generators included 
here: http://en.wikipedia.org/wiki/Waveform
    N   )AudioSegment)db_to_floatget_frame_widthget_array_typeget_min_max_valuec                   "    e Zd ZddZddZd Zy)SignalGeneratorc                      || _         || _        y N)sample_rate	bit_depth)selfr   r   s      P/var/www/html/audio-gradio/venv/lib/python3.12/site-packages/pydub/generators.py__init__zSignalGenerator.__init__   s    &"    c                   	
 t        | j                        \  }
t        | j                        }t        | j                        }t	        |      	t        | j                  |dz  z        }	
fd| j                         D        }t        j                  |d|      }t        j                  ||      }	 |j                         }t        |d|| j                  |d      S #  |j                         }Y 0xY w)z
        Duration in milliseconds
            (default: 1 second)
        Volume in DB relative to maximum amplitude
            (default 0.0 dBFS, which is the maximum value)
             @@c              3   @   K   | ]  }t        |z  z          y wr   )int).0valgainmaxvals     r   	<genexpr>z3SignalGenerator.to_audio_segment.<locals>.<genexpr>+   s     KCs3<$./Ks   r   r   )channelssample_width
frame_rateframe_width)datametadata)r   r   r   r   r   r   r   generate	itertoolsislicearraytobytestostringr   )r   durationvolumeminvalr   
array_typesample_countsample_datar    r   r   s            @@r   to_audio_segmentz SignalGenerator.to_audio_segment   s     +4>>:&t~~6#DNN3
6"4++x&/@ABK4==?K&&{A|D{{:{3	#<<>D (**'	1
  		#==?Ds   3C C3c                     t        d      )NzuSignalGenerator subclasses must implement the generate() method, and *should not* call the superclass implementation.)NotImplementedErrorr   s    r   r"   zSignalGenerator.generate<   s    !  #Z  [  	[r   N)iD     )r   g        )__name__
__module____qualname__r   r.   r"    r   r   r
   r
      s    #>[r   r
   c                   $     e Zd Z fdZd Z xZS )Sinec                 :    t        t        | 
  di | || _        y Nr6   )superr8   r   freqr   r<   kwargs	__class__s      r   r   zSine.__init__B   s    dD",V,	r   c              #      K   | j                   dz  t        j                  z  | j                  z  }d}	 t        j                  ||z         |dz  } w)N   r   r   )r<   mathpir   sin)r   sine_ofsample_ns      r   r"   zSine.generateF   sQ     99q=477*d.>.>>((7X-..MH s   AAr3   r4   r5   r   r"   __classcell__r?   s   @r   r8   r8   A   s    r   r8   c                   &     e Zd Zd fd	Zd Z xZS )Pulsec                 H    t        t        | 
  di | || _        || _        y r:   )r;   rK   r   r<   
duty_cycler   r<   rM   r>   r?   s       r   r   zPulse.__init__P   s#    eT#-f-	$r   c              #      K   d}| j                   t        | j                        z  }|| j                  z  }	 ||z  |k  rd nd |dz  }w)Nr         ?g      r   r   floatr<   rM   )r   rF   cycle_lengthpulse_lengths       r   r"   zPulse.generateU   s\      ''%		*::#doo5<'<7	
MH s   AA)      ?rG   rI   s   @r   rK   rK   O   s    %
r   rK   c                        e Zd Z fdZ xZS )Squarec                 8    d|d<   t        t        | 
  |fi | y NrU   rM   )r;   rW   r   r=   s      r   r   zSquare.__init__f   s!    "|fd$T4V4r   r3   r4   r5   r   rH   rI   s   @r   rW   rW   e   s    5 5r   rW   c                   &     e Zd Zd fd	Zd Z xZS )Sawtoothc                 H    t        t        | 
  di | || _        || _        y r:   )r;   r\   r   r<   rM   rN   s       r   r   zSawtooth.__init__m   s#    h&00	$r   c              #      K   d}| j                   t        | j                        z  }|| j                  z  }|}||z
  }	 ||z  }||k  rd|z  |z  dz
   ndd||z
  z  |z  z
   |dz  }.w)Nr   rA   rP   r   rQ   )r   rF   rS   midpointascend_lengthdescend_lengthcycle_positions          r   r"   zSawtooth.generater   s      ''%		*::$//1 %5%4N(>)M9S@@Q.8";<~MNNMH s   A*A,)rP   rG   rI   s   @r   r\   r\   l   s    %
r   r\   c                        e Zd Z fdZ xZS )Trianglec                 8    d|d<   t        t        | 
  |fi | y rY   )r;   rd   r   r=   s      r   r   zTriangle.__init__   s!    "|h&t6v6r   rZ   rI   s   @r   rd   rd      s    7 7r   rd   c                       e Zd Zd Zy)
WhiteNoisec              #   F   K   	 t        j                          dz  dz
   w)NrA   rP   )randomr1   s    r   r"   zWhiteNoise.generate   s$     ==?Q&#-- s   !N)r3   r4   r5   r"   r6   r   r   rg   rg      s    .r   rg   )__doc__rB   r%   r#   ri   audio_segmentr   utilsr   r   r   r   objectr
   r8   rK   rW   r\   rd   rg   r6   r   r   <module>rn      s|        ' %[f %[R
? 
O ,5U 5 27x 7. .r   