U Ad* @sfddlZddlmZddlmZmZddlmZGdddZGdddej j Z Gd d d e Z dS) N)Resample) load_config load_model)STFTc@s(eZdZd ddZd ddZddZdS) VocoderNcCs|dkrtjrdnd}||_|dkr8t||d|_n&|dkrPt||d|_ntd|i|_|j |_ |j |_ |j |_ dS)Ncudacpuz nsf-hifigandeviceznsf-hifigan-log10z [x] Unknown vocoder: )torchr is_availabler NsfHifiGANvocoderNsfHifiGANLog10 ValueErrorresample_kernel sample_ratevocoder_sample_ratehop_sizeZvocoder_hop_size dimension)selfZ vocoder_typeZ vocoder_ckptr rCC:\Green_Program_Files\So-VITS-SVC-Shengshuyan\diffusion\vocoder.py__init__ s  zVocoder.__init__rcCsb||jkr|}n>t|}||jkr@t||jdd|j|j|<|j||}|jj||d}|S)N)lowpass_filter_widthkeyshift)rstrrrtor rextract)raudiorrZ audio_resZkey_strmelrrrr s  zVocoder.extractcCs,|ddd|ddf}|||}|S)Nr)sizer)rr"f0r!rrrinfer)s z Vocoder.infer)N)r)__name__ __module__ __qualname__rr r&rrrrrs  rcsHeZdZdfdd ZddZddZdd Zdd d Zd dZZ S)r Ncsvt|dkr$tjr dnd}||_||_d|_t||_ t |j j |j j |j j |j j|j j|j j|j j|_dS)Nrr)superrr rr r model_pathmodelrhr sampling_ratenum_melsn_fftwin_sizerfminfmaxstft)rr+r  __class__rrr0s   zNsfHifiGAN.__init__cCs|jjSN)r-r.rrrrrAszNsfHifiGAN.sample_ratecCs|jjSr7)r-rr8rrrrDszNsfHifiGAN.hop_sizecCs|jjSr7)r-r/r8rrrrGszNsfHifiGAN.dimensionrcCs|jj||ddd}|S)Nrr#)r4Zget_mel transpose)rr!rr"rrrr JszNsfHifiGAN.extractc Csj|jdkr.td|jt|j|jd\|_|_t*|dd}|||}|W5QRSQRXdS)N| Load HifiGAN: r r#r9 r,printr+rr r-r no_gradr:rr"r%cr!rrrforwardNs     zNsfHifiGAN.forward)N)r) r'r(r)rrrrr rA __classcell__rrr5rr /s  r c@seZdZddZdS)rc Csn|jdkr.td|jt|j|jd\|_|_t.d|dd}|||}|W5QRSQRXdS)Nr;r giVy?r#r9r<r?rrrrAXs    zNsfHifiGANLog10.forwardN)r'r(r)rArrrrrWsr) r torchaudio.transformsrZvdecoder.nsf_hifigan.modelsrrZvdecoder.nsf_hifigan.nvSTFTrrnnModuler rrrrrs   '(