U -_dO@sJddlZddlmZddlZddlZddlZddlm Z GdddZ dS)N)final)Slicerc@s,eZdZddZddZddZddZd S) AutoSlicercCs"dddddd|_|jd|_dS)Niii, i) threshold min_length min_intervalhop_size max_sil_keptr) slicer_paramsoriginal_min_interval)selfr"D:\so-vits-svc2.3.2\auto_slicer.py__init__ szAutoSlicer.__init__cCstjtj||ddd\}}tfd|i|j}||}g} t|D]T\} } t | j dkrf| j } tj |dd| } ddd | Dd } tj|| } t | | |tj| ddd\}}tj||d |krސq|jd d |jd <|jd |jdkrtfd|i|j|}t|D]T\}}t |j dkrH|j }tj | dd|d }t tj||||q*| | qqq|j|jd <qH| D]}tj|rt|qdS)NFsrmonorr_css"|]}|s|dkr|VqdS)rN)isascii).0crrr sz(AutoSlicer.auto_slice...wavyrrr )librosaloadospathjoinrr slice enumeratelenshapeTsplitextsfwrite get_durationappendr existsremove)r filename input_dir output_dirmax_secaudiorslicerchunksZfiles_to_deleteichunkoutput_filenameZoutput_filepathZ new_audioZ new_chunksjZ new_chunkZnew_output_filename file_pathrrr auto_slices8  zAutoSlicer.auto_slicecCsg}t|D]V}tj||}|drtj|ddd\}}tj||d} | |kr|||| fq|j ddddg} d } |D]\}}} | | |kr| || | 7} t |q| rt j | d d } t | jd kr| j} d t t|d} ttj|| | ||g} | } t |q| r| |krt j | d d } t | jd krV| j} d t t|d} ttj|| | |dS)NrFrrcSs|dS)Nrr)xrrr=z(AutoSlicer.merge_short..T)keyreverser)axisrZmerged_)r!listdirr"r#endswithrr r,r-sortr/np concatenater&r'r(r*r+)r r2r3min_secZ short_filesr0filepathr4rdurationZ merged_audioZcurrent_durationZ output_audior9rrr merge_short4s>     zAutoSlicer.merge_shortcCsd}}t|D]>}|drtjtj||ddd\}}|tj||d7}qddt|D}t|} d} t d } |D]`}tj||} tj| ddd\} }tj| |d}|t |7}|| krt |} || kr~t |} q~| | | ||fS) NrrFrrcSsg|]}|dr|qS)r)rE)rfilerrr \s z*AutoSlicer.slice_count..rBinf) r!rDrErr r"r#r,r&float)r r1r2 orig_durationfinal_durationrM_audioZ_sr wav_filesZ num_files max_duration min_durationr;r4rrKrrr slice_countVs&   zAutoSlicer.slice_countN)__name__ __module__ __qualname__rr<rLrWrrrrrs !"r) r!typingrnumpyrGr soundfiler*Zmodules.slicer2rrrrrrs