o
    hc                     @   s   d dl Z d dlZd dlZd dlmZ d dl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ZeeZG dd deZdS )    N)tqdm)dataset)nets)
spec_utilsc                   @   sL   e Zd Z							dddZdd	 Zd
d Zdd Zdd Zdd ZdS )VocalRemover         Fweights/baseline.pthc	           	      C   s   || _ || _|| _|| _|| _t|| _t	dt
j  d t
j r7|dkr7t
d| _| j| nt
d| _| jt
j|| jd | jj| _|| _d S )Nz(Check GPU & CUDA Avialabelity. [ status:z].cudacpu)map_location)n_fft
hop_lengthttapostprocessoutput_imager   CascadedASPPNetmodelloggerinfotorchr   is_availabledevicetoload_state_dictloadoffsetwindow_size)	selfr   r   r   r   r   r   r   model_weights r!   ;/var/www/html/docker_usevoice/src/apps/process/inference.py__init__   s   

zVocalRemover.__init__c           	   	   C   s   | j   t N g }tt|D ]5}|| }|d d d d d ||| j f }t|| j	}| j 
|}|   }||d  qtj|dd}W d    |S 1 sZw   Y  |S )Nr      )axis)r   evalr   no_gradr   ranger   
from_numpyr   r   predictdetachr   numpyappendnpconcatenate)	r   	X_mag_padroi_sizen_windowpredsistartX_mag_windowpredr!   r!   r"   _execute4   s   

"
zVocalRemover._executec                 C   s   t |}t |}||fS )N)r.   absangle)r   X_specX_magX_phaser!   r!   r"   
preprocessF   s   

zVocalRemover.preprocessc                 C   s   |  |\}}| }|| }|jd }t|| j| j\}}}	tt	||	 }
tj
|dd||ffdd}| ||	|
}|d d d d d |f }|| |td| fS )Nr$   r   r   constantmode              ?r>   maxshaper   make_paddingr   r   intr.   ceilpadr8   exp)r   r;   r<   r=   coef	X_mag_pren_framepad_lpad_rr1   r2   r0   r7   r!   r!   r"   	inferenceL   s   


zVocalRemover.inferencec                 C   s4  |  |\}}| }|| }|jd }t|| j| j\}}}	tt	||	 }
tj
|dd||ffdd}| ||	|
}|d d d d d |f }||	d 7 }||	d 7 }|
d7 }
tj
|dd||ffdd}| ||	|
}|d d d d |	d d f }|d d d d d |f }|| d | |td| fS )Nr$   r?   r@   rA      g      ?rC   rD   )r   r;   r<   r=   rL   rM   rN   rO   rP   r1   r2   r0   r7   pred_ttar!   r!   r"   inference_tta_   s&   


 zVocalRemover.inference_ttac                 C   sT  t d t  tj  t d |jdkrt	||g}t d t
|| j| j}t d | jr>| |\}}}n| |\}}}| jrct d t|| dtj}t
||}t d t d t|| dtj| }t
j|| jd}t d t d	 || }t
j|| jd}	t d | jrt
|}
t
|}|j|	jfS )
NzQtrying to fix this strange error: ['RuntimeError: CUDA error: out of memory'] ...zdone.rR   zstft of wave source...zpost processing...r   zinverse stft of vocals...)r   zinverse stft of instruments...)r   r   gccollectr   r   empty_cachendimr.   asarrayr   wave_to_spectrogramr   r   r   rT   rQ   r   clipinfmask_silencespectrogram_to_waver   spectrogram_to_imageT)r   Xr7   r<   r=   pred_invy_specvocalsv_specinstruments
vocals_imginstruments_imgr!   r!   r"   split|   s:   













zVocalRemover.splitN)r   r   r	   FFFr
   )	__name__
__module____qualname__r#   r8   r>   rQ   rT   ri   r!   r!   r!   r"   r      s    
r   )r   loggingr,   r.   r   cv2librosa	soundfilesflibr   r   r   rU   	getLogger__file__r   objectr   r!   r!   r!   r"   <module>   s   
