U
    >d                     @   s  d dl Z d dlZd dlZd dlZdd Zdd Zd%ddZd	d
 Z	d&ddZ
dd Zdd Zd'ddZedkrd dlZd dlZejejd ddejdd\ZZejejd ddejdd\ZZeeed\ZZeeddZeeddZe	eedZee ZeeZeeZeeZeeZeeZeeZ e!de e!d e e!d!e  e"d"eej#d e"d#eej#d e"d$eej#d dS )(    Nc                 C   s   |   }|  }|d |d kr$| S |d |d k r<td|d |d  d }||d  }| d d d d d d ||f } | S )N   z,h1_shape[3] must be greater than h2_shape[3]   )size
ValueError)h1h2Zh1_shapeZh2_shapeZs_timeZe_time r   2/var/www/html/UseVoiceDocker/src/lib/spec_utils.pycrop_center   s     r
   c                 C   sN   t | d }t | d }tj|||d}tj|||d}t ||g}|S )Nr      )yn_fft
hop_length)npasfortranarraylibrosastft)waver   r   	wave_left
wave_right	spec_left
spec_rightspecr   r   r	   wave_to_spectrogram   s    r   	magnitudec                 C   s   |dkr6t | rt | }n| }t |d d }n"|dkrXt | rTt | }n| }|| 8 }|d|  9 }t |}|jdkr|	ddd}t j
t j|dd	d
|gdd}|S )Nr   r   g:0yE>phase   r   r   r   T)axiskeepdimsr   )r   iscomplexobjabslog10angleminmaxuint8ndim	transposeconcatenate)r   moder   imgr   r   r	   spectrogram_to_image#   s*    



 r,   c                 C   sX   | | }t |}t |}||k}t ||| |  dt j}|t dt |  S )Nr   y              ?)r   r!   clipinfexpr#   )Xr   softmaskvZ	y_mag_tmpZ	v_mag_tmpZv_masky_magr   r   r	   reduce_vocal_aggressively<   s    

r4   皙?@       c                 C   s  ||d k rt d|  } t|jdd|k d }t|tt|dkd d  d|d }t|tt|dkd  |d }t|| |kd }t|dkr|| }|| }d }	t	||D ]F\}
}|	d k	r|
|	 |k r|	|d  }
|
dkrVt
dd|}| d d d d |
|
| f  ||d d d d |
|
| f  7  < n|
|8 }
|| jd krt
dd|}| d d d d || |f  ||d d d d || |f  7  < n||7 }| d d d d |
| || f  |d d d d |
| || f 7  < |}	q| S )Nr   z"min_range must be >= fade_area * 2)r   r   r   r   r   )r   copyr   wheremeaninsertdiffappendlenziplinspaceshape)magrefZthresZ	min_rangeZ	fade_sizeidxstartsendsZuninformativeZold_eseweightr   r   r	   mask_silenceF   s2    .(
FFHrK   c                 C   s(  t j| \} }t j|\}}| d d d |d f jdd}|d d d |d f jdd}|| 8 }|| 8 }t|d }tt||d| }|dkr| d d |d f } n|d d t	|d f }| j
d |j
d k r|d d d | j
d f }n| d d d |j
d f } | |fS )N   r   r   r   full)r   effectstrimsumr;   r?   r   argmax	correlater!   rB   )absr_Za_monoZb_monooffsetdelayr   r   r	   align_wave_head_and_taili   s      rY   c                 C   sd  t jt j| d }t jt j|d }d|||}t jt j| |}t jt j||}	t j|dd t j|	dd t j||d }
t j|	|d }t j|
rt j|rt	
|
}t	
|}ntj
| |dt	jdd\}}tj
||dt	jdd\}}t|||\}}t|||}t|||}t j| \}}t	|
| t	|| ||fS )	Nr   zsr{}_hl{}_nf{}T)exist_okz.npyFkaiser_fastdtyperes_type)ospathsplitextbasenameformatjoindirnamemakedirsexistsr   loadr   float32rY   r   save)Zmix_pathZ	inst_pathrU   r   r   Zmix_basenameZinst_basename	cache_dirZmix_cache_dirZinst_cache_dirZmix_cache_pathZinst_cache_pathr0   r   rV   extr   r   r	   cache_or_load   sB    
    
    
rm      c                 C   sJ   t | d }t | d }tj||d}tj||d}t ||g}|S )Nr   r   )r   )r   r   r   istft)r   r   r   r   r   r   r   r   r   r	   spectrogram_to_wave   s    rp   __main__r   iD  Fr[   r\   r   i   z
test_X.jpgz
test_y.jpgz
test_v.jpgz
test_X.wavz
test_y.wavz
test_v.wav)r   )r5   r6   r7   )rn   )$r_   r   numpyr   	soundfilesfr
   r   r,   r4   rK   rY   rm   rp   __name__cv2sysrh   argvri   r0   rV   r   X_specy_specv_specr!   X_magr3   Zv_magZX_imageZy_imageZv_imageimwritewriteTr   r   r   r	   <module>   sZ   



#!


    
    



