o
    c                     @   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 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h2h1_shapeh2_shapes_timee_time r   3/var/www/html/docker_usevoice/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rt | rt | }n| }t |d d }n|dkr,t | r*t | }n| }|| 8 }|d|  9 }t |}|jdkrZ|	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(   



r0   c                 C   sX   | | }t |}t |}||k}t ||| |  dt j}|t dt |  S )Nr   y              ?)r   r%   clipinfexpr'   )Xr   softmaskv	y_mag_tmp	v_mag_tmpv_masky_magr   r   r   reduce_vocal_aggressively<   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|dkr	|| }|| }d }	t	||D ]\}
}|	d ur{|
|	 |k r{|	|d  }
|
dkrt
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  < |}	qg| 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refthres	min_range	fade_sizeidxstartsendsuninformativeold_eseweightr   r   r   mask_silenceF   s2   .(FFHrW   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 }| |fS | d d d |j
d f } | |fS )N   r   r#   r   full)r   effectstrimsumrB   rF   r   argmax	correlater%   rI   )absr_a_monob_monooffsetdelayr   r   r   align_wave_head_and_taili   s      rg   c                 C   sj  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|
rot j|rot	
|
}t	
|}||fS t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   float32rg   r   save)mix_path	inst_pathra   r   r   mix_basenameinst_basename	cache_dirmix_cache_dirinst_cache_dirmix_cache_pathinst_cache_pathr4   r   rb   extr   r   r   cache_or_load   s4   



r      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   r   __main__r   iD  Fri   rj   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>   )r   )$rm   r   numpyr   	soundfilesfr   r   r0   r;   rW   rg   r   r   __name__cv2sysrv   argvrw   r4   rb   r   X_specy_specv_specr%   X_magr:   v_magX_imagey_imagev_imageimwritewriteTr   r   r   r   <module>   sN    



#
!





