U
    jg9                     @   sd  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dZ	dd Z
dd Zd%ddZedkr`d 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 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)Zh1Zh2Zh1_shapeZh2_shapeZs_timeZe_time r   ,/home/ubuntu/vocal-remover/lib/spec_utils.pycrop_center   s     r   c                 C   s:   t j| d ||d}t j| d ||d}t||g}|S )Nr   )n_fft
hop_length   )librosastftnpasarray)waver
   r	   Z	spec_leftZ
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   modeyimgr   r   r   spectrogram_to_image"   s*    



 r&   皙?@       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| }t|dkr|| }|| }d }	t	||D ]\}
}|	d k	r|
|	 |k r|	|d  }
|
dkr,t
dd||d d d d |
|
| f< n|
|8 }
|| jd krnt
dd||d d d d || |f< n||7 }d|d d d d |
| || f< |}	qd|  }| || 7 } | S )Nr   z"min_range must be >= fade_size * 2)r   r   r   r   r   )r   r   wherer   insertdiffappend
zeros_likelenziplinspaceshape)Zy_maskZthresZ	min_rangeZ	fade_sizeidx	start_idxend_idxZartifact_idxweightZold_eseZv_maskr   r   r   merge_artifacts<   s2    .(

**"r:   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summeanr0   r   argmax	correlater   r3   )absr_Za_monoZb_monooffsetdelayr   r   r   align_wave_head_and_tail`   s      rI   c                 C   s  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	
|
ddd}t	
|ddd}ntj
| |dt	jd	d
\}}tj
||dt	jd	d
\}}t|||\}}t|||}t|||}t	|
|ddd t	||ddd |j|jkst|||
|fS )Nr   zsr{}_hl{}_nf{}T)exist_okz.npyr   r   Fkaiser_fastrE   monodtyperes_type)ospathsplitextbasenameformatjoindirnamemakedirsexistsr   loadr!   r   float32rI   r   saver3   AssertionError)mix_path	inst_pathrE   r
   r	   mix_basenameZinst_basenameZ	cache_dirZmix_cache_dirZinst_cache_dirZmix_cache_pathZinst_cache_pathXr$   rF   r   r   r   cache_or_loadz   sB        
    
ra      c                 C   sZ   | j dkrtj| |d}n<| j dkrVtj| d |d}tj| d |d}t||g}|S )Nr   )r
   r   r   r   )r    r   istftr   r   )r   r
   r   Z	wave_leftZ
wave_rightr   r   r   spectrogram_to_wave   s    

rd   __main__r   iD  FrK   rL   r   i   z
test_X.jpgz
test_y.jpgz
test_v.jpgz
test_X.wavz
test_y.wavz
test_v.wav)r   )r'   r(   r)   )rb   )rP   r   numpyr   	soundfilesfr   r   r&   r:   rI   ra   rd   __name__Zcv2sysrY   argvrZ   r`   rF   r$   X_specy_specv_specZX_imageZy_imagev_imageimwritewriteTr   r   r   r   <module>   sP   

$#

    
    
