o
    e&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
   ?D:\Projects\ConvertPro\env\Lib\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   Z
max_sampleZ
min_samplerA   r
   r
   r   minmax{   s   
rE   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
   
rH   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   rF   r   intmathsqrt)r   r   rG   Zsum_squaresr
   r
   r   rms   s   
rL   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
   rP   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   rP   r   r   r(   )rM   rN   r   Zlen1len2sum_ri_2Z	sum_aij_2
sum_aij_riresultbest_resultbest_ir   Zaj_m1Zaj_lm1factorr
   r
   r   findfit   s2    

 rY   c                 C   s^   d}t | d dkrtdt | t |krtdt| |}t|||}t| ||}|| S )Nr   r   rQ   zSamples should be same size)r   r   r   rP   )rM   rN   r   rG   rS   rT   r
   r
   r   
findfactor   s   
rZ   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   rQ   zInput sample should be longerr   )r   r   r   rP   r   r=   )
r   rR   r   rG   rU   rV   rW   r   Zsample_leaving_windowZsample_entering_windowr
   r
   r   findmax   s*   
r[   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   rG   prevextremevalidprevextremerH   Znextremeprevvalr-   prevdiffr   diffr
   r
   r   avgpp   s2   
rc   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 r\   r]   )r   r   rG   r^   r_   r   r`   r-   ra   r   rb   Zextremediffr
   r
   r   maxpp  s.   
rd   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   Z	crossingsZlast_samplerA   r
   r
   r   cross<  s   .re   c                 C   s^   t t| | t|}tt| }tt| |D ]\}}|t|| }t|||| q|jS r   )	r   r   r8   r   	enumerater   rI   r.   raw)r   r   rX   cliprU   r   rA   r
   r
   r   mulI  s   ri   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.   rg   )r   r   fac1fac2rh   rG   rU   r   l_sampler_samplerA   r
   r
   r   tomonoV  s   
rn   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.   rg   )r   r   rj   rk   rG   rU   rh   r   rA   rl   rm   r
   r
   r   tostereoj  s   
ro   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.   rg   )
rM   rN   r   rh   rG   rU   r   Zsample1Zsample2rA   r
   r
   r   add~  s   
rp   c                 C   sT   t t| | tt| }tt| |D ]\}}t|| |}t|||| q|jS r   )r   r   r   rf   r   r<   r.   rg   )r   r   biasrU   r   rA   r
   r
   r   rq     s   rq   c                 C   sX   t t| | t| |}tt| }tt| |D ]\}}t|||| d | q|jS )Nr   )r   r   r   r   rf   r   r.   rg   )r   r   rG   rU   r   rA   r
   r
   r   reverse  s   
rr   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.   rg   )r   r   Zsize2Znew_lenrU   r   rA   r
   r
   r   lin2lin  s   
rs   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   rg   r(   tupler   nextr.   r<   )r   r   Z	nchannelsZinrateZoutratestateZweightAZweightBZbytes_per_frameZframe_countdZprev_iZcur_iZsampsqZceilingnbytesrU   ZsamplesZout_iretvalZ
trim_indexZchanZ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   ry   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builtinsrJ   r&   	fractionsr   ctypesr   	Exceptionr   r   r   r   r   r$   r   r.   r1   r2   r8   r<   r=   rE   rH   rL   rP   rY   rZ   r[   rc   rd   re   ri   rn   ro   rp   rq   rr   rs   r~   r   r   r   r   r   r   r
   r
   r
   r   <module>   sj    

	




	'$ 
Q