U Ad0@s<ddlZddlZddlZGdddZd ddZdd ZdS) Nc@s6eZdZd eeeeeedddZdd Zd d Zd S)SlicerD,)sr threshold min_length min_intervalhop_size max_sil_keptcCs||kr|ksntd||ks.td||d}d|d|_t||d|_tt|d|j|_t||d|j|_t||j|_t||d|j|_dS)NzQThe following condition must be satisfied: min_length >= min_interval >= hop_sizezCThe following condition must be satisfied: max_sil_kept >= hop_sizei g4@) ValueErrorrroundr minwin_sizer r r )selfrrr r r r rBC:\Green_Program_Files\So-VITS-SVC-Shengshuyan\inference\slicer.py__init__s zSlicer.__init__cCsbt|jdkr:|dd||jt|jd||jfS|||jt|jd||jSdS)Nr)lenshaper r)rwaveformbeginendrrr _apply_slices,zSlicer._apply_slicec CsTt|jdkrt|}n|}|jd|jkrFdddt|diStjj||j|jd d}g}d}d}t |D]\}}||j kr|dkrv|}qv|dkrqv|dko||j k} |||j ko|||jk} | s| sd}qv|||j kr6|||d|} |dkr |d| fn|| | f| }n6|||j dkr|||j ||j d} | ||j 7} ||||j d|} |||j |d||j } |dkr|d| f| }n$|t| | t| | ft| | }nn||||j d|} |||j |d||j } |dkrZ|d| fn|| | f| }d}qv|jd}|dk r|||j krt|||j }|||d|} || |dft|dkrdddt|diSg}|ddr8|ddt|jd|dd|jdtdt|D]}|r|d||dd|jd t|jd||d|jd|d ||d|jd t|jd||d|jdqF|d d|jt|kr$|d|d d|jd t|di}tt|D]}|||t|<q4|SdS) Nrr0Fz0,)slice split_time)y frame_length hop_length,T)rrlibrosato_monor featurermsrr squeeze enumeraterr r argminappendrmaxrangestr)rrsamplesrms_listsil_tags silence_start clip_startir*is_leading_silenceneed_slice_middlepospos_lpos_r total_frames silence_endchunksZ chunk_dictrrrr!s    $  $  (84 ,z Slicer.sliceN)rrrrr)__name__ __module__ __qualname__intfloatrrrrrrrrs rrcCs.tj|dd\}}t|||d}||}|S)N)r)rrr )r'loadrr) audio_path db_threshmin_lenaudiorslicerr?rrrcutxs rLc Cst|}t|\}}t|jdkrF|jddkrFtj|ddd}| d}g}| D]P\}}|d d}|d|dkrb| |d|t |dt |dfqb||fS)Nr$rr)dimr r%r)dict torchaudiorFrrtorchmean unsqueezecpunumpyitemssplitr.rC)rGr?rJrresultkvtagrrr chunks2audios,r[)rEr)r'rPrOrrLr[rrrrs r