
    #)di                        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dS )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dS )SignalGeneratorD     c                 "    || _         || _        d S N)sample_rate	bit_depth)selfr   r   s      W/var/www/menimich/repos/protonApp/venv/lib/python3.11/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|                                 D             }t          j	        |d|          }t          j
        ||          }	 |                                }n#  |                                }Y nxY wt          |d|| j        |d          S )z
        Duration in milliseconds
            (default: 1 second)
        Volume in DB relative to maximum amplitude
            (default 0.0 dBFS, which is the maximum value)
        r   c              3   B   K   | ]}t          |z  z            V  d S r   )int).0valgainmaxvals     r   	<genexpr>z3SignalGenerator.to_audio_segment.<locals>.<genexpr>+   s4      KKCs3<$.//KKKKKKr   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6#DN33
6""4+x&/@ABBKKKKK4==??KKK&{A|DD{:{33	#<<>>DD	#==??DDD(*'	1
 1
    	s   8C C%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)r   r   )r   r   )__name__
__module____qualname__r   r1   r%    r   r   r
   r
      sP        # # # #   >[ [ [ [ [r   r
   c                   $     e Zd Z fdZd Z xZS )Sinec                 V     t          t          |           j        di | || _        d S Nr8   )superr:   r   freqr   r>   kwargs	__class__s      r   r   zSine.__init__B   s1    "dD",,V,,,			r   c              #      K   | j         dz  t          j        z  | j        z  }d}	 t          j        ||z            V  |dz  })N   r   Tr   )r>   mathpir   sin)r   sine_ofsample_ns      r   r%   zSine.generateF   sS      9q=47*d.>>	(7X-.....MH	r   r5   r6   r7   r   r%   __classcell__rA   s   @r   r:   r:   A   sG                  r   r:   c                   &     e Zd Zd fd	Zd Z xZS )Pulse      ?c                 d     t          t          |           j        di | || _        || _        d S r<   )r=   rM   r   r>   
duty_cycler   r>   rP   r@   rA   s       r   r   zPulse.__init__P   s8    #eT#--f---	$r   c              #      K   d}| j         t          | j                  z  }|| j        z  }	 ||z  |k     rdV  ndV  |dz  })Nr   T      ?g      r   r   floatr>   rP   )r   rH   cycle_lengthpulse_lengths       r   r%   zPulse.generateU   sg       '%	*:*::#do5	<'<77				


MH	r   )rN   rI   rK   s   @r   rM   rM   O   sL        % % % % % %
      r   rM   c                        e Zd Z fdZ xZS )Squarec                 T    d|d<    t          t          |           j        |fi | d S NrN   rP   )r=   rY   r   r?   s      r   r   zSquare.__init__f   s8    "|$fd$T44V44444r   r5   r6   r7   r   rJ   rK   s   @r   rY   rY   e   s8        5 5 5 5 5 5 5 5 5r   rY   c                   &     e Zd Zd fd	Zd Z xZS )SawtoothrS   c                 d     t          t          |           j        di | || _        || _        d S r<   )r=   r^   r   r>   rP   rQ   s       r   r   zSawtooth.__init__m   s8    &h&00000	$r   c              #      K   d}| j         t          | j                  z  }|| j        z  }|}||z
  }	 ||z  }||k     rd|z  |z  dz
  V  ndd||z
  z  |z  z
  V  |dz  }/)Nr   TrC   rS   r   rT   )r   rH   rV   midpointascend_lengthdescend_lengthcycle_positions          r   r%   zSawtooth.generater   s       '%	*:*::$/1 %5	%4N((>)M9S@@@@@Q.8";<~MNNNNMH	r   )rS   rI   rK   s   @r   r^   r^   l   sL        % % % % % %
      r   r^   c                        e Zd Z fdZ xZS )Trianglec                 T    d|d<    t          t          |           j        |fi | d S r[   )r=   rf   r   r?   s      r   r   zTriangle.__init__   s8    "|&h&t66v66666r   r\   rK   s   @r   rf   rf      s8        7 7 7 7 7 7 7 7 7r   rf   c                       e Zd Zd ZdS )
WhiteNoisec              #   @   K   	 t          j                     dz  dz
  V  )NTrC   rS   )randomr4   s    r   r%   zWhiteNoise.generate   s,      	.=??Q&#----	.r   N)r5   r6   r7   r%   r8   r   r   ri   ri      s#        . . . . .r   ri   )__doc__rD   r(   r&   rk   audio_segmentr   utilsr   r   r   r   objectr
   r:   rM   rY   r^   rf   ri   r8   r   r   <module>rp      s           ' ' ' ' ' '           %[ %[ %[ %[ %[f %[ %[ %[R
 
 
 
 
? 
 
 
    O   ,5 5 5 5 5U 5 5 5       27 7 7 7 7x 7 7 7. . . . . . . . . .r   