o
    oi	                     @   sb  d dl Z d dlmZmZmZmZmZ d dlZd dlZ	d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ 		d#d
edee deeef fddZdddejfd
edeeef dedee dee defddZzd dlmZ W n e y   d dl!m"Z Y nw dedeeef fddZ#d$dededefddZd%dedefd!d"Z$dS )&    N)AnyDictOptionalTupleUnion)logger)ndarray)Tensor)AudioMetaData)	warn_once)download_fileget_cache_dirget_git_rootTfilesrreturnc           	      K   s   i }d|v r|d |d< i }d|v r| d|d< tj| fi |}d|v r5|dur5|d  |j| 9  < tj| fi |\}}|dur_||kr_|rUtd| d| d t|||fi |}| |fS )a  Loads an audio file using torchaudio.

    Args:
        file (str): Path to an audio file.
        sr (int): Optionally resample audio to specified target sampling rate.
        **kwargs: Passed to torchaudio.load(). Depends on the backend. The resample method
            may be set via `method` which is passed to `resample()`.

    Returns:
        audio (Tensor): Audio tensor of shape [C, T], if channels_first=True (default).
        info (AudioMetaData): Meta data of the original audio file. Contains the original sr.
    formatmethod
num_framesNz8Audio sampling rate does not match model sampling rate (z, z). Resampling...)poptainfosample_rateloadr   resample
contiguous)	r   r   verbosekwargsikwargsrkwargsr   audioorig_sr r"   C/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/df/io.py
load_audio   s"   r$   Fr    
output_dirsuffixlogc           	      C   s   | }|d urt j| \} }| d|  | }|d ur&t j|t j|}|r1td| d t|}|j	dkr@|
d |tjkrS|jtjkrS|d tj}|tjkrf|jtjkrf|tjd }t||| d S )N_zSaving audio file ''   r   i   )ospathsplitextjoinbasenamer   r   torch	as_tensorndim
unsqueeze_int16dtypetofloat32r   save)	r   r    r   r%   r&   r'   r5   outpathextr"   r"   r#   
save_audio2   s    	


r;   )r   )resample_waveformr   c                 C   sX   dddddddddddddd	d
dd}| |  v s(J dt|   ||  S )Nsinc_interpolation   )resampling_methodlowpass_filter_width@   kaiser_windowg333333?g1k!@)r?   r@   rolloffbetagbR?gQaTi-@)	sinc_fast	sinc_bestkaiser_fastkaiser_bestzmethod must be one of )keyslist)r   paramsr"   r"   r#   get_resample_paramsS   s   "rL   rE   r!   new_src                 C   s   t |}t| ||fi |S )N)rL   ta_resample)r    r!   rM   r   rK   r"   r"   r#   r   h   s   r   逻  c                 C   sX   t  }tjdd}|d u rd| }t }t||}ntj||}t|| d\}}|S )Nassetszclean_freesound_33711.wavz3https://github.com/Rikorose/DeepFilterNet/raw/main/)r   )r   r+   r,   r.   r   r   r$   )r   dir	file_pathurlsave_dirr,   sampler(   r"   r"   r#   get_test_samplem   s   rV   )NT)rE   )rO   )%r+   typingr   r   r   r   r   r0   
torchaudior   logurur   numpyr   r	   torchaudio.backend.commonr
   	df.loggerr   df.utilsr   r   r   strintr$   r4   boolr;   torchaudio.functionalr   rN   ImportErrortorchaudio.compliance.kaldir<   rL   rV   r"   r"   r"   r#   <module>   sV    

'

