U ØA¿d4ã@s€ddlZddlZddlZddlmZddlZddlmZddl m Z ddl m Z Gdd„de ƒZd d d „ZGd d „d ejƒZdS)éNé)ÚGaussianDiffusion)ÚVocoder)ÚWaveNetc@s eZdZdd„ZejZejZdS)ÚDotDictcGs"tj|Ž}t|ƒtkrt|ƒS|S)N)ÚdictÚgetÚtyper)ÚargsÚval©r úDC:\Green_Program_Files\So-VITS-SVC-Shengshuyan\diffusion\unit2mel.pyÚ __getattr__s zDotDict.__getattr__N) Ú__name__Ú __module__Ú __qualname__rrÚ __setitem__Ú __setattr__Ú __delitem__Ú __delattr__r r r r r srÚcpuc Cs|dkr$tj tj |¡dd¡}n|}t|dƒ}t |¡}W5QRXt|ƒ}t|j j |j j |d}t |j j|jj|jj|j|jj|jj|jj|jj|jjƒ }td|ƒtj|t |¡d}| |¡| |d¡| ¡td|jj ›d |jj!›d ƒ|||fS) Nrz config.yamlÚr)Údevicez [Loading] )Ú map_locationÚmodelz#Loaded diffusion model, sampler is z , speedup: ú )"ÚosÚpathÚjoinÚsplitÚopenÚyamlÚ safe_loadrrÚvocoderr ÚckptÚUnit2MelÚdataÚencoder_out_channelsrÚn_spkÚ use_pitch_augÚ dimensionÚn_layersÚn_chansÚn_hiddenÚ timestepsÚ k_step_maxÚprintÚtorchÚloadrÚtoÚload_state_dictÚevalÚinferÚmethodÚspeedup) Ú model_pathrÚ config_pathÚ config_fileÚconfigr r#rr$r r r Úload_model_vocoders2 ÷  r=c s:eZdZd‡fdd„ Zddd„Zdd„Zddd„Z‡ZS)r%Fé€éé€ééèc sÞtƒ ¡t ||¡|_t d|¡|_t d|¡|_|rLtjd|dd|_nd|_||_|dk rv|dkrvt  ||¡|_ |dk r‚|nd|_ | dk r¦| dkr¦| |j kr¦| n|j |_ ||_ tt||||ƒ|j |j |d|_||_dS)NrF)ÚbiasrBr)r.Úk_stepÚout_dims)ÚsuperÚ__init__ÚnnÚLinearÚ unit_embedÚf0_embedÚ volume_embedÚaug_shift_embedr(Ú EmbeddingÚ spk_embedr.r/r-rrÚdecoderÚ input_channel) ÚselfrQr(r)rEr+r,r-r.r/©Ú __class__r r rG>s & zUnit2Mel.__init__NTé ú dpm-solveré,c Csè| |¡| d|d ¡¡| |¡} |jdk rÂ|jdkrÂ|dk r°t dd|jf¡}| ¡D]D\}}t  t   |gg¡¡  |j ¡}| |¡}||j|<|||}q`| |} n| | |d¡} |j d¡|_|j ¡|_|  dd¡S)út input: B x n_frames x n_unit return: dict of B x n_frames x feat ré¼Nré)rJrKÚlogrLr(r1ÚzerosÚ hidden_sizeÚitemsÚ LongTensorÚnpÚarrayr3rrOÚ speaker_mapÚ unsqueezeÚdetachÚ transpose)rRÚunitsÚf0ÚvolumeÚspk_idÚ spk_mix_dictÚ aug_shiftÚgt_specr6Ú infer_speedupr7rDÚuse_tqdmÚxZ spk_embed_mixÚkÚvÚ spk_id_torchZ spk_embedddr r r Ú init_spkembed^s *    zUnit2Mel.init_spkembedc Cs˜t |dd|jf¡|_|j}d}t d||f¡}t d|f¡}t d|f¡}i}t|ƒD]}| |dt|j ƒi¡qX|j ||  d¡|  d¡|ddS)NrrUgð?éÿÿÿÿ)rj) r1r\r-rbrQÚrandnÚrangeÚupdateÚfloatr(rsrc) rRr(Zhubert_hidden_sizeÚn_framesZhubertrgrhZspksÚir r r Ú init_spkmixws zUnit2Mel.init_spkmixc  CsŒ|js |dk r | |jkr tdƒ‚|jsB|dkrB|j|jkrBtdƒ‚| |¡| d|d ¡¡| |¡} |jdk rH|jdkrH|dk rÎ|  ¡D]6\}}t   t   |gg¡¡ |j¡}| || |¡} q”nz|jddkr:| |jd|jddddf¡}||j}t j|dd}| dd¡ dd ¡ d¡}| |} n| | |¡} |jdk rp|dk rp| | |d ¡} |j| ||| | | | d } | S) rXNzVThe shallow diffusion k_step is greater than the maximum diffusion k_step(k_step_max)!zJThis model can only be used for shallow diffusion and can not infer alone!rrYr)Údimrtéþÿÿÿé)rlr6rmr7rDrn)Útrainingr/Ú Exceptionr.rJrKr[rLr(r^r1r_r`rar3rrOÚshapeÚreshaperbÚsumreÚsqueezerMrP)rRrfrgrhrirjrkrlr6rmr7rDrnrorprqrrÚgr r r Úforwardƒs* *   zUnit2Mel.forward)Fr>r?r@rArBrB) NNNNTrUrVrWT) NNNNTrUrVrWT)rrrrGrsr{r†Ú __classcell__r r rSr r%=s2ö ÿ  ÿr%)rN)rÚnumpyr`r1Útorch.nnrHr!Ú diffusionrr#rZwavenetrrrr=ÚModuler%r r r r Ús     ý '