o
    'Wg&3                     @   s  zd dl mZ d dl mZ W n ey#   d dlmZ d dlmZ Y nw d dlZd dlZzd dl	m
Z
 W n eyC   d dlm
Z
 Y nw d dlmZ G dd deZdd	 Zd
d Zdd ZdTddZdd ZdTddZdTddZdTddZdTddZdTddZdTddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Z d/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dUdFdGZ,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dS )V    )max)minN)gcd)create_string_bufferc                   @   s   e Zd ZdS )errorN)__name__
__module____qualname__ r
   r
   N/var/www/html/audio_editor/env/lib/python3.10/site-packages/pydub/pyaudioop.pyr      s    r   c                 C   s,   | dkr| dkr| dkrt dd S d S d S )N         zSize should be 1, 2 or 4)r   )sizer
   r
   r   _check_size   s   r   c                 C   s    t | | | dkrtdd S )Nr   not a whole number of frames)r   r   )lengthr   r
   r
   r   _check_params   s   r   c                 C   s   t | | S N)lencpr   r
   r
   r   _sample_count   s   r   Tc                 c   s*    t t| |D ]
}t| |||V  qd S r   )ranger   _get_sample)r   r   signedir
   r
   r   _get_samples#   s   r   c                 C   s@   | dkr
|rdS dS | dkr|rdS dS | dkr|rdS d	S d S )
Nr   bBr   hHr   r   Ir
   r   r   r
   r
   r   _struct_format(   s   r$   c                 C   s6   t ||}|| }|| }t|t| || d S Nr   )r$   structunpack_frombuffer)r   r   r   r   fmtstartendr
   r
   r   r   1   s   
r   c                 C   s"   t ||}t|| || | d S r   )r$   r&   	pack_into)r   r   r   valr   r)   r
   r
   r   _put_sample8   s   
r.   c                 C   sX   |r| dkrdS | dkrdS |r| dkrdS | dkrdS |r$| dkr$dS | dkr*d	S d S )
Nr         r   i  i  r   il    r
   r#   r
   r
   r   _get_maxval=   s   r1   c                 C   s0   |sdS | dkr
dS | dkrdS | dkrdS d S )Nr   r   ir   i r   i   r
   r#   r
   r
   r   _get_minvalL   s   r2   c                    s"   t | | t| | fddS )Nc                    s   t t|  S r   )builtin_maxr   )r-   maxvalminvalr
   r   <lambda>Z   s    z_get_clipfn.<locals>.<lambda>)r1   r2   r#   r
   r4   r   _get_clipfnW   s   

r8   c                 C   sd   t ||}t||}||   kr|kr| S  |d }|r,d|d  }| | d|  | S | d|  S )N   r   r   )r2   r1   )r-   r   r   r6   r5   bitsoffsetr
   r
   r   	_overflow]   s   

r<   c                 C   sF   t t| | d|  krt| | k std tdt| ||S )Nr   zIndex out of range)r   r   r   r   )r   r   r   r
   r
   r   	getsamplek   s   r=   c                 C   s6   t t| | t| dkrdS tdd t| |D S )Nr   c                 s   s    | ]}t |V  qd S r   )abs.0sampler
   r
   r   	<genexpr>x       zmax.<locals>.<genexpr>)r   r   r3   r   r   r
   r
   r   r   r   s   r   c                 C   sB   t t| | d\}}t| |D ]}t||}t||}q||fS )N)r   r   )r   r   r   r3   builtin_min)r   r   
max_sample
min_samplerA   r
   r
   r   minmax{   s   
rG   c                 C   s6   t t| | t| |}|dkrdS tt| || S r%   )r   r   r   sumr   )r   r   sample_countr
   r
   r   avg   s
   
rJ   c                 C   sN   t t| | t| |}|dkrdS tdd t| |D }tt|| S )Nr   c                 s   s    | ]}|d  V  qdS )r   Nr
   r?   r
   r
   r   rB      rC   zrms.<locals>.<genexpr>)r   r   r   rH   r   intmathsqrt)r   r   rI   sum_squaresr
   r
   r   rms   s   
rO   c                 C   s6   d}d}t |D ]}|t| ||t||| 7 }q|S )Nr   r   )r   r=   )cp1cp2r   r   totalr   r
   r
   r   _sum2   s
   rS   c                 C   sP  d}t | d dkst |d dkrtdt | t |k r"tdt| |}t||}t|||}t| | |}t| ||}|| ||  | }|}	d}
td|| d D ]>}t| ||d }t| ||| d }||d |d  7 }tt| || d  ||}|| ||  | }||	k r|}	|}
qUtt| |
| d  ||| }|
|fS )Nr   r   Strings should be even-sizedzFirst sample should be longerr   )r   r   r   rS   r   r   r(   )rP   rQ   r   len1len2sum_ri_2	sum_aij_2
sum_aij_riresultbest_resultbest_ir   aj_m1aj_lm1factorr
   r
   r   findfit   s2    

 r`   c                 C   s^   d}t | d dkrtdt | t |krtdt| |}t|||}t| ||}|| S )Nr   r   rT   zSamples should be same size)r   r   r   rS   )rP   rQ   r   rI   rW   rY   r
   r
   r   
findfactor   s   
ra   c           
      C   s   d}t | |}t| d dkrtd|dk s||k rtd|dkr%dS t| | |}|}d}td|| d D ](}t| ||d }t| ||| d }	||d 8 }||	d 7 }||kr`|}|}q8|S )Nr   r   rT   zInput sample should be longerr   )r   r   r   rS   r   r=   )
r   rV   r   rI   rZ   r[   r\   r   sample_leaving_windowsample_entering_windowr
   r
   r   findmax   s*   
rd   c                 C   s   t t| | t| |}d}d }d}d}t| |d}t| |d}|| }	td|D ],}
t| ||
}|| }||	 dk rM|rI|t|| 7 }|d7 }d}|}|}|dkrU|}	q)|dkr\dS || S NFr   r   Tr   r   r   r=   r   r>   )r   r   rI   prevextremevalidprevextremerJ   nextremeprevvalr-   prevdiffr   diffr
   r
   r   avgpp   s2   
rm   c                 C   s   t t| | t| |}d}d }d}t| |d}t| |d}|| }td|D ],}	t| ||	}|| }
|
| dk rK|rGt|| }||krG|}d}|}|}|
dkrS|
}q'|S re   rf   )r   r   rI   rg   rh   r   rj   r-   rk   r   rl   extremediffr
   r
   r   maxpp  s.   
ro   c                 C   sd   t t| | d}d}t| |D ]}|d  kr|k s)n |d  kr'|kr-n n|d7 }|}q|S )Nr   r   )r   r   r   )r   r   	crossingslast_samplerA   r
   r
   r   cross<  s   .rr   c                 C   s^   t t| | t|}tt| }tt| |D ]\}}|t|| }t|||| q|jS r   )	r   r   r8   r   	enumerater   rK   r.   raw)r   r   r_   cliprZ   r   rA   r
   r
   r   mulI  s   rv   c                 C   s   t t| | t|}t| |}tt| d }td|dD ]%}t| ||}t| ||d }	|| |	|  }
||
}
t|||d |
 q|jS )Nr   r   r   )	r   r   r8   r   r   r   r=   r.   rt   )r   r   fac1fac2ru   rI   rZ   r   l_sampler_samplerA   r
   r
   r   tomonoV  s   
r{   c                 C   s   t t| | t| |}tt| d }t|}t|D ](}t| ||}||| }	||| }
t|||d |	 t|||d d |
 q|jS )Nr   r   )	r   r   r   r   r8   r   r   r.   rt   )r   r   rw   rx   rI   rZ   ru   r   rA   ry   rz   r
   r
   r   tostereoj  s   
r|   c           
      C   s   t t| | t| t|krtdt|}t| |}tt| }t|D ]}t| ||}t|||}||| }	t||||	 q&|j	S )NzLengths should be the same)
r   r   r   r8   r   r   r   r=   r.   rt   )
rP   rQ   r   ru   rI   rZ   r   sample1sample2rA   r
   r
   r   add~  s   
r   c                 C   sT   t t| | tt| }tt| |D ]\}}t|| |}t|||| q|jS r   )r   r   r   rs   r   r<   r.   rt   )r   r   biasrZ   r   rA   r
   r
   r   r     s   r   c                 C   sX   t t| | t| |}tt| }tt| |D ]\}}t|||| d | q|jS )Nr   )r   r   r   r   rs   r   r.   rt   )r   r   rI   rZ   r   rA   r
   r
   r   reverse  s   
r   c                 C   s   t t| | t| ||kr| S t| | | }t|}tt| |D ]-}t| ||}||k r9|d| | > }n||krE|d| | ? }t||}t|||| q$|j	S )Nr   )
r   r   r   r   r   r   r   r<   r.   rt   )r   r   size2new_lenrZ   r   rA   r
   r
   r   lin2lin  s   
r   r   c                 C   sR  t t| | |dk rtd|| }t| | }	|| |kr#td|dk s+|dk r/tdt| | dkr;td|dksC|dkrGtdt||}
||
 }||
 }dg| }dg| }|d u rf| }
n|\}
}t||krttdt| \}}t|t|}}|	| }|d | }|| }t|}t| |}d}	 |
dk r|	dkrt||}|j	}|| t| }t
|d | }||
t|ffS t|D ] }|| ||< | ||< |||  |||   ||  ||< q|	d8 }	|
|7 }
|
dk s|
dkr(t|D ] }|| |
 || ||
   | }t|||t|| |d7 }q|
|8 }
|
dksq)	Nr   z# of channels should be >= 1z%width * nchannels too big for a C intr   z.weightA should be >= 1, weightB should be >= 0r   zsampling rate not > 0zillegal state argument)r   r   r   OverflowErrorr   ziplistr   r   rt   r(   tupler   nextr.   r<   )r   r   	nchannelsinrateoutratestateweightAweightBbytes_per_frameframe_countdprev_icur_isampsqceilingnbytesrZ   samplesout_iretval
trim_indexchancur_or
   r
   r   ratecv  sx   






r   c                 C      t  r   NotImplementedErrorr   r
   r
   r   lin2ulaw     r   c                 C   r   r   r   r   r
   r
   r   ulaw2lin  r   r   c                 C   r   r   r   r   r
   r
   r   lin2alaw  r   r   c                 C   r   r   r   r   r
   r
   r   alaw2lin   r   r   c                 C   r   r   r   r   r   r   r
   r
   r   	lin2adpcm$  r   r   c                 C   r   r   r   r   r
   r
   r   	adpcm2lin(  r   r   )T)r   r   )3__builtin__r   r3   r   rD   ImportErrorbuiltinsrL   r&   	fractionsr   ctypesr   	Exceptionr   r   r   r   r   r$   r   r.   r1   r2   r8   r<   r=   rG   rJ   rO   rS   r`   ra   rd   rm   ro   rr   rv   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r
   r
   r
   r   <module>   sj    

	




	'$ 
Q