a
    dg                     @   s   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 deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG d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                   @   s(   e Zd ZdddZdddZd	d
 ZdS )SignalGeneratorD     c                 C   s   || _ || _d S N)sample_rate	bit_depth)selfr   r    r   N/var/www/html/texto_audio/venv/lib/python3.9/site-packages/pydub/generators.py__init__   s    zSignalGenerator.__init__     @@        c           	         s   t | j\}t| j}t| j}t| t| j|d  } fdd|  D }t	|d|}t

||}z| }W n   | }Y n0 t|d|| j|d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   s   | ]}t |   V  qd S r   )int).0valZgainmaxvalr   r   	<genexpr>+       z3SignalGenerator.to_audio_segment.<locals>.<genexpr>r   r   )Zchannelssample_widthZ
frame_rateZframe_width)datametadata)r   r   r   r   r   r   r   generate	itertoolsislicearraytobytestostringr   )	r   durationvolumeminvalr   Z
array_typeZsample_countZsample_datar   r   r   r   to_audio_segment   s$    

z SignalGenerator.to_audio_segmentc                 C   s   t dd S )NzuSignalGenerator subclasses must implement the generate() method, and *should not* call the superclass implementation.)NotImplementedErrorr   r   r   r   r   <   s    zSignalGenerator.generateN)r	   r
   )r   r   )__name__
__module____qualname__r   r'   r   r   r   r   r   r      s   

r   c                       s$   e Zd Z fddZdd Z  ZS )Sinec                    s    t t| jf i | || _d S r   )superr-   r   freqr   r/   kwargs	__class__r   r   r   B   s    zSine.__init__c                 c   s8   | j d tj | j }d}t|| V  |d7 }qd S )N   r   r   )r/   mathpir   sin)r   Zsine_ofsample_nr   r   r   r   F   s    zSine.generater*   r+   r,   r   r   __classcell__r   r   r2   r   r-   A   s   r-   c                       s&   e Zd Zd fdd	Zdd Z  ZS )Pulse      ?c                    s&   t t| jf i | || _|| _d S r   )r.   r;   r   r/   
duty_cycler   r/   r=   r1   r2   r   r   r   P   s    zPulse.__init__c                 c   sF   d}| j t| j }|| j }|| |k r2dV  ndV  |d7 }qd S )Nr         ?g      r   r   floatr/   r=   )r   r8   cycle_lengthZpulse_lengthr   r   r   r   U   s    
zPulse.generate)r<   r9   r   r   r2   r   r;   O   s   r;   c                       s   e Zd Z fddZ  ZS )Squarec                    s$   d|d< t t| j|fi | d S Nr<   r=   )r.   rC   r   r0   r2   r   r   r   f   s    zSquare.__init__r*   r+   r,   r   r:   r   r   r2   r   rC   e   s   rC   c                       s&   e Zd Zd fdd	Zdd Z  ZS )Sawtoothr?   c                    s&   t t| jf i | || _|| _d S r   )r.   rF   r   r/   r=   r>   r2   r   r   r   m   s    zSawtooth.__init__c                 c   sr   d}| j t| j }|| j }|}|| }|| }||k rNd| | d V  ndd||  |  V  |d7 }q*d S )Nr   r4   r?   r   r@   )r   r8   rB   ZmidpointZascend_lengthZdescend_lengthZcycle_positionr   r   r   r   r   s    
zSawtooth.generate)r?   r9   r   r   r2   r   rF   l   s   rF   c                       s   e Zd Z fddZ  ZS )Trianglec                    s$   d|d< t t| j|fi | d S rD   )r.   rG   r   r0   r2   r   r   r      s    zTriangle.__init__rE   r   r   r2   r   rG      s   rG   c                   @   s   e Zd Zdd ZdS )
WhiteNoisec                 c   s   t   d d V  q d S )Nr4   r?   )randomr)   r   r   r   r      s    zWhiteNoise.generateN)r*   r+   r,   r   r   r   r   r   rH      s   rH   )__doc__r5   r!   r   rI   Zaudio_segmentr   utilsr   r   r   r   objectr   r-   r;   rC   rF   rG   rH   r   r   r   r   <module>   s   		)