U
    -Z$d&3                     @   s  zd dl mZ d dl mZ W n, ek
rH   d dlmZ d dlmZ Y nX d dlZd dlZzd dl	m
Z
 W n  ek
r   d dlm
Z
 Y nX 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dUddZdVddZdWddZdXddZdYddZdZd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+d[dFdGZ,dHdI Z-dJdK Z.dLdM Z/dNdO Z0dPdQ Z1dRdS Z2dS )\    )max)minN)gcd)create_string_bufferc                   @   s   e Zd ZdS )errorN)__name__
__module____qualname__ r
   r
   3/tmp/pip-unpacked-wheel-94qg_ebr/pydub/pyaudioop.pyr      s   r   c                 C   s$   | dkr | dkr | dkr t d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<|r8d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r8dS |rH| dkrHdS | dkrTd	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       z_get_clipfn.<locals>.<lambda>)r1   r2   r#   r
   r4   r   _get_clipfnW   s    

r9   c                 C   sl   t ||}t||}||   kr(|kr0n n| S |d }|r\d|d  }| | d|  | S | d|  S d S )N   r   r   )r2   r1   )r-   r   r   r6   r5   bitsoffsetr
   r
   r   	_overflow]   s    

r=   c                 C   s@   t t| | d|  kr*t| | k s4n 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   s     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_samplerB   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   rC      s     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 rDtdt| |}t||}t|||}t| | |}t| ||}|| ||  | }|}	d}
td|| d D ]|}t| ||d }t| ||| d }||d |d  7 }tt| || d  ||}|| ||  | }||	k r|}	|}
qt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   s0     

 rY   c                 C   s^   d}t | d dkrtdt | t |kr4t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 s6||k r>td|dkrJdS t| | |}|}d}td|| d D ]P}t| ||d }t| ||| d }	||d 8 }||	d 7 }||krp|}|}qp|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 ]X}
t| ||
}|| }||	 dk r|r|t|| 7 }|d7 }d}|}|}|dkrR|}	qR|dkrdS || S NFr   r   Tr   r   r   r>   r   r?   )r   r   rG   prevextremevalidprevextremerH   Znextremeprevvalr-   prevdiffr   diffr
   r
   r   avgpp   s0    
rc   c                 C   s   t t| | t| |}d}d }d}t| |d}t| |d}|| }td|D ]X}	t| ||	}|| }
|
| dk r|rt|| }||kr|}d}|}|}|
dkrN|
}qN|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r8|k sRn |d  krN|krZn n|d7 }|}q |S )Nr   r   )r   r   r   )r   r   Z	crossingsZlast_samplerB   r
   r
   r   cross<  s    .re   c                 C   s^   t t| | t|}tt| }tt| |D ]&\}}|t|| }t|||| q0|jS r   )	r   r   r9   r   	enumerater   rI   r.   raw)r   r   rX   cliprU   r   rB   r
   r
   r   mulI  s    ri   c                 C   s   t t| | t|}t| |}tt| d }td|dD ]J}t| ||}t| ||d }	|| |	|  }
||
}
t|||d |
 q<|jS )Nr   r   r   )	r   r   r9   r   r   r   r>   r.   rg   )r   r   fac1fac2rh   rG   rU   r   l_sampler_samplerB   r
   r
   r   tomonoV  s    
rn   c                 C   s   t t| | t| |}tt| d }t|}t|D ]P}t| ||}||| }	||| }
t|||d |	 t|||d d |
 q8|jS )Nr   r   )	r   r   r   r   r9   r   r   r.   rg   )r   r   rj   rk   rG   rU   rh   r   rB   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 ]6}t| ||}t|||}||| }	t||||	 qL|j	S )NzLengths should be the same)
r   r   r   r9   r   r   r   r>   r.   rg   )
rM   rN   r   rh   rG   rU   r   Zsample1Zsample2rB   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   rB   r
   r
   r   rq     s    rq   c                 C   sX   t t| | t| |}tt| }tt| |D ]\}}t|||| d | q2|jS )Nr   )r   r   r   r   rf   r   r.   rg   )r   r   rG   rU   r   rB   r
   r
   r   reverse  s    
rr   c                 C   s   t t| | t| ||kr"| S t| | | }t|}tt| |D ]Z}t| ||}||k rr|d| | > }n||kr|d| | ? }t||}t|||| qH|j	S )Nr   )
r   r   r   r   r   r   r   r=   r.   rg   )r   r   Zsize2Znew_lenrU   r   rB   r
   r
   r   lin2lin  s    
rs   r   c                 C   sV  t t| | |dk rtd|| }t| | }	|| |krFtd|dk sV|dk r^tdt| | dkrvtd|dks|dkrtdt||}
||
 }||
 }dg| }dg| }|d kr| }
n:|\}
}t||krtdt| \}}t|t| }}|	| }|d | }|| }t|}t| |}d}|
dk r|	dkrt||}|j	}|| t| }t
|d | }||
t|ffS t|D ]B}|| ||< | ||< |||  |||   ||  ||< q|	d8 }	|
|7 }
q8|
dkr8t|D ]B}|| |
 || ||
   | }t|||t|| |d7 }q|
|8 }
qq8d S )	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  sp    








r~   c                 C   s
   t  d S r   NotImplementedErrorr   r
   r
   r   lin2ulaw  s    r   c                 C   s
   t  d S r   r   r   r
   r
   r   ulaw2lin  s    r   c                 C   s
   t  d S r   r   r   r
   r
   r   lin2alaw  s    r   c                 C   s
   t  d S r   r   r   r
   r
   r   alaw2lin   s    r   c                 C   s
   t  d S r   r   r   r   ry   r
   r
   r   	lin2adpcm$  s    r   c                 C   s
   t  d S r   r   r   r
   r
   r   	adpcm2lin(  s    r   )T)T)T)T)T)T)T)r   r   )3__builtin__r   r3   r   rD   ImportErrorbuiltinsrJ   r&   Z	fractionsr   ctypesr   	Exceptionr   r   r   r   r   r$   r   r.   r1   r2   r9   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>   sd   
	





	'$ 
Q