U ØA¿dYHã@s2ddlZddlmZddlmZmZddlmZddlmZm Z ddl m Z ddl m Z ddlmZddlZddl mZddlmZGdd „d ejƒZGd d „d ejƒZGd d „d ejƒZGdd„dejjƒZGdd„dejjƒZGdd„dejjƒZGdd„dejjƒZGdd„dejƒZGdd„dejƒZdS)éN)Únn)ÚConv1dÚConv2d)Ú functional)Ú spectral_normÚ weight_norm)Ú get_padding)Ú f0_to_coarsecs(eZdZd ‡fdd„ Zd dd„Z‡ZS) ÚResidualCouplingBlockérFc s¤tƒ ¡||_||_||_||_||_||_||_t   ¡|_ |rXt j ||||d|dnd|_t|ƒD]8} |j  t j||||||d|jd¡|j  t  ¡¡qfdS)Nr)Ú p_dropoutÚ gin_channelsT)r Z mean_onlyZwn_sharing_parameter)ÚsuperÚ__init__ÚchannelsÚhidden_channelsÚ kernel_sizeÚ dilation_rateÚn_layersÚn_flowsr rÚ ModuleListÚflowsÚmodulesÚWNÚwnÚrangeÚappendZResidualCouplingLayerZFlip) Úselfrrrrrrr Úshare_parameterÚi©Ú __class__©ú8C:\Green_Program_Files\So-VITS-SVC-Shengshuyan\models.pyrs&    ÿÿzResidualCouplingBlock.__init__NcCsJ|s&|jD]}|||||d\}}q n t|jƒD]}|||||d}q0|S)N©ÚgÚreverse)rÚreversed)rÚxÚx_maskr%r&ÚflowÚ_r"r"r#Úforward-s  zResidualCouplingBlock.forward)r rF)NF©Ú__name__Ú __module__Ú __qualname__rr,Ú __classcell__r"r"r r#r s ør cs(eZdZd‡fdd„ Zddd„Z‡ZS) ÚEncoderrcsrtƒ ¡||_||_||_||_||_||_||_t   ||d¡|_ t j |||||d|_t   ||dd¡|_dS)Né©r é)rrÚ in_channelsÚ out_channelsrrrrr rrÚprerrÚencÚproj)rr6r7rrrrr r r"r#r8s zEncoder.__init__Nc CsŒt t || d¡¡d¡ |j¡}| |¡|}|j|||d}|  |¡|}tj ||j dd\}}|t  |¡t  |¡|}||||fS)Nr5r3©r%©Údim)ÚtorchÚ unsqueezeÚcommonsÚ sequence_maskÚsizeÚtoÚdtyper8r9r:Úsplitr7Ú randn_likeÚexp) rr(Z x_lengthsr%r)ÚstatsÚmÚlogsÚzr"r"r#r,Ms"zEncoder.forward)r)Nr-r"r"r r#r27sùr2cs(eZdZd‡fdd„ Zd dd„Z‡ZS) Ú TextEncoderrNc sdtƒ ¡||_||_||_||_||_t ||dd¡|_ t  d|¡|_ t   ||||||¡|_dS)Nr5r3é)rrr7rrrr rrr:Ú EmbeddingÚf0_embÚ attentionsr2Úenc_) rr7rrrr Úfilter_channelsÚn_headsr r r"r#rYs úzTextEncoder.__init__r3c Csv|| |¡ dd¡}| |||¡}| |¡|}tj||jdd\}}|t |¡t |¡||}||||fS)Nr3r5r<) rOÚ transposerQr:r>rEr7rFrG) rr(r)Úf0Ú noice_scalerHrIrJrKr"r"r#r,ss  zTextEncoder.forward)rNNN)Nr3r-r"r"r r#rLXs ørLcs&eZdZd‡fdd„ Zdd„Z‡ZS) ÚDiscriminatorPééFcs tt|ƒ ¡||_||_|dkr&tnt}t |t dd|df|dft |dƒdfdƒ|t dd|df|dft |dƒdfdƒ|t dd|df|dft |dƒdfdƒ|t dd|df|dft |dƒdfdƒ|t dd|dfdt |dƒdfdƒg¡|_ |t ddd dd dƒ|_ dS) NFr3é r©Úpaddingé€ié)rYr3)r3r) rrWrÚperiodÚuse_spectral_normrrrrrrÚconvsÚ conv_post)rr_rÚstrider`Únorm_fr r"r#r~s&&&&"ûzDiscriminatorP.__init__cCs¶g}|j\}}}||jdkrH|j||j}t |d|fd¡}||}| ||||j|j¡}|jD]$}||ƒ}t |tj¡}|  |¡qf|  |¡}|  |¡t   |dd¡}||fS)NrÚreflectr3éÿÿÿÿ) Úshaper_ÚFÚpadÚviewraÚ leaky_relurÚ LRELU_SLOPErrbr>Úflatten)rr(ÚfmapÚbÚcÚtZn_padÚlr"r"r#r,Œs     zDiscriminatorP.forward)rXrYFr-r"r"r r#rW}srWcs&eZdZd‡fdd„ Zdd„Z‡ZS)ÚDiscriminatorSFcsÆtt|ƒ ¡|dkrtnt}t |tddddddƒ|tdddd d d d ƒ|tdd dd dd d ƒ|td d dd dd d ƒ|td d dd d d d ƒ|td d ddddƒg¡|_|td dddddƒ|_ dS)NFr3ééér[é@é)r é)Úgroupsr\rMr^rXr5rY) rrsrrrrrrrarb)rr`rdr r"r#r£súzDiscriminatorS.__init__cCsZg}|jD]$}||ƒ}t |tj¡}| |¡q | |¡}| |¡t |dd¡}||fS)Nr3rf) rarhrkrrlrrbr>rm)rr(rnrrr"r"r#r,°s    zDiscriminatorS.forward)Fr-r"r"r r#rs¢s rscs&eZdZd‡fdd„ Zdd„Z‡ZS)ÚMultiPeriodDiscriminatorFcsNtt|ƒ ¡dddddg}tˆdg}|‡fdd„|Dƒ}t |¡|_dS) Nr5rYrXrvé ©r`csg|]}t|ˆd‘qS)r})rW)Ú.0rr}r"r#Ú Äsz5MultiPeriodDiscriminator.__init__..)rr{rrsrrÚdiscriminators)rr`ÚperiodsZdiscsr r}r#r¿s  z!MultiPeriodDiscriminator.__init__c Cspg}g}g}g}t|jƒD]H\}}||ƒ\} } ||ƒ\} } | | ¡| | ¡| | ¡| | ¡q||||fS©N)Ú enumerater€r) rÚyÚy_hatZy_d_rsZy_d_gsZfmap_rsZfmap_gsrÚdZy_d_rZfmap_rZy_d_gZfmap_gr"r"r#r,Çs      z MultiPeriodDiscriminator.forward)Fr-r"r"r r#r{¾sr{cs8eZdZd‡fdd„ Zdd„Zdd „Zdd d „Z‡ZS)ÚSpeakerEncoderéPrYrMcs>tt|ƒ ¡tj|||dd|_t ||¡|_t ¡|_ dS)NT)Ú batch_first) rr‡rrÚLSTMÚlstmÚLinearÚlinearÚReLUÚrelu)rZmel_n_channelsZmodel_num_layersZmodel_hidden_sizeZmodel_embedding_sizer r"r#rØszSpeakerEncoder.__init__cCsD|j ¡| |¡\}\}}| | |d¡¡}|tj|dddS)Nrfr3T)r=Úkeepdim)r‹Úflatten_parametersrrr>Únorm)rÚmelsr+ÚhiddenZ embeds_rawr"r"r#r,Þs zSpeakerEncoder.forwardcCs8g}td|||ƒD]}t |||¡}| |¡q|S)Nr)rr>Úaranger)rÚ total_framesÚpartial_framesÚ partial_hopÚ mel_slicesrZ mel_ranger"r"r#Úcompute_partial_slicesäs  z%SpeakerEncoder.compute_partial_slicesr]rwc s¾ˆ d¡}ˆdd…| d…f}||krž| |||¡}t‡fdd„|Dƒƒ}| |¡t t|ƒd¡ d¡}t ¡||ƒ}W5QRXtj |dd  d¡} nt ¡||ƒ} W5QRX| S)Nr3c3s|]}ˆdd…|fVqdSr‚r")r~Ús©Úmelr"r#Ú òsz1SpeakerEncoder.embed_utterance..r)Úaxis) rBršÚlistrr>ÚstackÚtupleÚsqueezeÚno_gradÚmeanr?) rrr—r˜Zmel_lenZlast_melr™r“Zpartial_embedsÚembedr"rœr#Úembed_utteranceìs    zSpeakerEncoder.embed_utterance)rˆrYrMrM)r]rw)r.r/r0rr,ršr§r1r"r"r r#r‡×sr‡cs(eZdZd‡fdd„ Zddd„Z‡ZS) Ú F0Decoderrc sœtƒ ¡||_||_||_||_||_||_||_||_ t j ||ddd|_ t  ||||||¡|_t   ||d¡|_t j d|ddd|_t   ||d¡|_dS)NrYr3r[)rrr7rrRrSrrr Ú spk_channelsrrÚprenetrPZFFTÚdecoderr:Ú f0_prenetÚcond) rr7rrRrSrrr r©r r"r#rs* úzF0Decoder.__init__NcCs^t |¡}|dk r || |¡}|| |¡7}| |¡|}| |||¡}| |¡|}|Sr‚)r>Údetachr­r¬rªr«r:)rr(Znorm_f0r)Úspk_embr"r"r#r, s zF0Decoder.forward)r)Nr-r"r"r r#r¨s ør¨csFeZdZdZd‡fdd„ Zd d „Zdd d „Ze ¡ddd„ƒZ ‡Z S)ÚSynthesizerTrnz" Synthesizer for Training éD¬Fú nsf-hifiganTr c sÆtƒ ¡||_||_||_||_||_||_||_| |_ | |_ | |_ | |_ | |_ ||_||_||_||_||_||_t ||¡|_||_||_|r¢t d|¡|_tj||ddd|_t||||||| d|_||| | | | ||||dœ }t  |j¡|dkrdd l!m"}||d |_#nD|d krÚzerosr rCÚ speaker_maprrÂÚ LongTensorr?rË)rZn_speakers_mapÚdevicerr"r"r#ÚEnableCharacterMixšs  "z!SynthesizerTrn.EnableCharacterMixNc  Csp| |¡ dd¡}|dk rD|jrD| |dd…dd…df¡ dd¡nd}t t || d¡¡d¡  |j ¡} |  |¡| |  |  ¡¡ dd¡|} |jrÚdt d| d¡d¡d} t | | |¡} |j| | | |d} n d} d} d} |j| | t|ƒd \}}}}|j|||d \}}}}|j|||d }t ||||j¡\}}}|j|||d }|||||||||f| | | fS) Nr3r5rçF¤@çð?çà…@éô©r¯)rUr;©r%rU)rÂrTrÁrÄr>r?r@rArBrCrDr8rÊÚlongrÃÚlog10ÚutilsÚ normalize_f0rÉrÅr rÈr*Zrand_slice_segments_with_pitchr¿rÆ)rrprUÚuvÚspecr%Ú c_lengthsZ spec_lengthsÚvolr)r(Úlf0Únorm_lf0Úpred_lf0Zz_ptempÚm_pÚlogs_pr+rKZm_qZlogs_qZ spec_maskÚz_pZz_sliceZ pitch_sliceZ ids_sliceÚor"r"r#r,¡s"6"( zSynthesizerTrn.forwardçffffffÖ?éôÌc Cs|jt d¡krtj |¡n t |¡t | d¡¡| d¡ |j¡} |jr°t |ƒdkr°|  |j d|j ddddf¡}||j }tj |dd}| dd¡ dd¡ d¡}n(| ¡dkrÆ| d¡}| |¡ dd¡}t t | | d¡¡d¡ |j¡} |dk r0|jr0| |dd…dd…df¡ dd¡nd}| |¡| | | ¡¡ dd¡|} |jrÐ|rÐdt d | d¡d ¡d } tj| | |d d } |j| | | |d}dt  d|d d¡d d¡}|j!| | t"|ƒ|d\}}}}|j#|||dd}|j$||||d}||fS)NÚcudarrfr3r<éþÿÿÿr5rÔrÕrÖr×F)Ú random_scalerØi¼é i# )rUrVTr$rÙ)%rÒr>rëÚmanual_seed_allÚ manual_seedÚonesrBrCrËÚlenÚreshapergrÐÚsumrTr£r=r?rÂr@rArDrÁrÄr8rÊrÚrÃrÛrÜrÝrÉÚpowrÅr r*rÆ)rrprUrÞr%rVÚseedZ predict_f0ráràr)r(rârãrärçråræZc_maskrKrèr"r"r#ÚinferÁs0 "    ":( "zSynthesizerTrn.infer)r±Fr²FTFr )NNNN)NrérêFN) r.r/r0Ú__doc__rrÓr,r>r¤r÷r1r"r"r r#r°+sçj r°)r>rÚtorch.nnrrrrhZtorch.nn.utilsrrZmodules.attentionsrPZmodules.commonsr@Zmodules.modulesrrÜrr ÚModuler r2rLrWrsr{r‡r¨r°r"r"r"r#Ús&       (!%%)+