o
    Si                  	   @   s   d Z ddlmZ ddlmZ ddlZddlZddlZdej	ej
 defddZd	ed
efddZdedefddZdej
dededefddZ	ddej
dejeef dedefddZdS )zVarious utilities.    )sha256)PathNframesstridec                 C   s:  t | sJ | d j}| d j}| d jd d }|t | d  | d jd  }| d jd }tjdd|d ||ddd }d|d   }tj|||d}	tjg ||R ||d}
d}| D ]/}|jd }|
d||| f  |d | | 7  < |	|||   |d | 7  < ||7 }qa|	 dksJ |
|	 S )Nr         )devicedtypeg      ?.)	lenr	   r
   shapetorchlinspaceabszerosmin)r   r   r	   r
   r   
total_sizeframe_lengthtweight
sum_weightoutoffsetframe r   A/home/ubuntu/.local/lib/python3.10/site-packages/encodec/utils.py_linear_overlap_add   s$   

 
( 
r   root_url
checkpointc                 C   s   |  ds	| d7 } | | S )N/)endswith)r   r   r   r   r   _get_checkpoint_url;   s   
r!   pathchecksumc                 C   s   t  }t| d}	 |d}|sn|| q
W d    n1 s"w   Y  | d t| }||krBtd|  d| d| d S )NrbTi   zInvalid checksum for file z, expected z	 but got )r   openreadupdate	hexdigestr   RuntimeError)r"   r#   shafilebufactual_checksumr   r   r   _check_checksumA   s$   


r.   wavsr	target_srtarget_channelsc                 C   s   | j d dv sJ d|dkr| jddd} n%|dkr/| j ^ }}}| jg |||R  } n| j d dkr<| |d} tj||| } | S )	Nr   )r   r   zAudio must be mono or stereo.r   T)keepdimr   r   )r   meanexpand
torchaudio
transformsResample)r/   r0   r1   r2   r   _lengthr   r   r   convert_audioO   s   r;   Fsample_raterescalec                 C   sN   d}|    }|r| t|| d } n| | |} tj|| |ddd d S )NgGz?r   PCM_S   )r<   encodingbits_per_sample)r   maxr   clampr6   save)r/   r"   r<   r=   limitmxr   r   r   
save_audio\   s   rG   )F)__doc__hashlibr   pathlibr   typingtpr   r6   ListTensorintr   strr!   r.   r;   UnionboolrG   r   r   r   r   <module>   s    *