o
    
j                     @   sl   d dl Z d dlZ d dlmZ dZdddZddd	Zd
d Zdd Z	i a
i adddZdd ZdddZdS )    N)melg      @   h㈵>c                 C   s   t t j| |d| S )z5
    PARAMS
    ------
    C: compression factor
    )min)torchlogclamp)xCclip_val r   W/home/kuhnn/.local/lib/python3.10/site-packages/TTS/vc/modules/freevc/mel_processing.pydynamic_range_compression_torch   s   r   c                 C   s   t | | S )zF
    PARAMS
    ------
    C: compression factor used to compress
    )r   exp)r	   r
   r   r   r   !dynamic_range_decompression_torch   s   r   c                 C      t | }|S N)r   
magnitudesoutputr   r   r   spectral_normalize_torch      r   c                 C   r   r   )r   r   r   r   r   spectral_de_normalize_torch   r   r   Fc           	      C   s  t | dk rtdt |  t | dkrtdt |  t| jd t| j }t|d | }|tvrDt |j| j| jdt|< t j	j
j| dt|| d t|| d fd	d
} | d} t j| |||t| |d	dddd
}t |ddd }|S )N      min value is       ?max value is _dtypedevicer      reflectmodeFT
hop_length
win_lengthwindowcenterpad_mode
normalizedonesidedreturn_complexư>)r   r   printmaxstrr   r    hann_windowtonn
functionalpad	unsqueezeintsqueezestftsqrtpowsum)	yn_fftsampling_ratehop_sizewin_sizer)   dtype_devicewnsize_dtype_devicespecr   r   r   spectrogram_torch(   s4   (
rG   c           	      C   sz   t | jd t | j }t |d | }|tvr/t|||||d}t|j| j| jdt|< tt| | } t	| } | S )Nr   srr@   n_melsfminfmaxr   )
r2   r   r    	mel_basislibrosa_mel_fnr   
from_numpyr4   matmulr   )	rF   r@   num_melsrA   rK   rL   rD   fmax_dtype_devicer   r   r   r   spec_to_mel_torchJ   s   rS   c	                 C   sf  t | dk rtdt |  t | dkrtdt |  t| jd t| j }	t|d |	 }
t|d |	 }|
tvrUt|||||d}t 	|j
| j| jdt|
< |tvrgt |j
| j| jdt|< t jjj| dt|| d	 t|| d	 fd
d} | d} t j| |||t| |d
dddd
}t |d	dd }t t|
 |}t|}|S )Nr   r   r   r   r   rH   r   r   r!   r"   r#   FTr%   r.   r/   )r   r   r0   r1   r2   r   r    rM   rN   rO   r4   r3   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   rP   r   )r?   r@   rQ   rA   rB   rC   rK   rL   r)   rD   rR   rE   r   rF   r   r   r   mel_spectrogram_torchV   s@   (
rT   )r   r   )r   )F)r   torch.utils.datalibrosa.filtersr   rN   MAX_WAV_VALUEr   r   r   r   rM   r3   rG   rS   rT   r   r   r   r   <module>   s    

		
"