o ý"Œe×@ã@sddlZddlZddlmZddlmZddlZddlZddlZddlm Z m Z m Z ddl m Z mZmZddlmZmZGdd„dejƒZGd d „d ejƒZGd d „d ejƒZGd d„dejƒZGdd„dejjƒZGdd„dejƒZGdd„dejƒZGdd„dejƒZdS)éN)Únn)Ú functional)ÚConv1dÚConvTranspose1dÚConv2d)Ú weight_normÚremove_weight_normÚ spectral_norm)Ú init_weightsÚ get_paddingcs$eZdZ‡fdd„Zdd„Z‡ZS)Ú TextEncoderc sŽtƒ ¡||_||_||_||_||_||_||_||_ t   ||¡|_ t j  |j jd|d¡t ||||||¡|_t  ||dd¡|_dS)Ngçà¿éé)ÚsuperÚ__init__Ún_vocabÚ out_channelsÚhidden_channelsÚfilter_channelsÚn_headsÚn_layersÚ kernel_sizeÚ p_dropoutrÚ EmbeddingÚembÚinitÚnormal_ÚweightÚ attentionsÚEncoderÚencoderrÚproj) Úselfrrrrrrrr©Ú __class__©ú/workspace/OpenVoice/models.pyrs( úzTextEncoder.__init__cCs†| |¡t |j¡}t |dd¡}t t ||  d¡¡d¡  |j ¡}|  |||¡}|  |¡|}tj||jdd\}}||||fS)Nréÿÿÿÿr©Údim)rÚmathÚsqrtrÚtorchÚ transposeÚ unsqueezeÚcommonsÚ sequence_maskÚsizeÚtoÚdtyper!r"Úsplitr)r#ÚxÚ x_lengthsÚx_maskÚstatsÚmÚlogsr&r&r'Úforward0s" zTextEncoder.forward©Ú__name__Ú __module__Ú __qualname__rr<Ú __classcell__r&r&r$r'r s r cs*eZdZ d‡fdd„ Zddd„Z‡ZS) ÚDurationPredictorrcs¬tƒ ¡||_||_||_||_||_t |¡|_ tj ||||dd|_ t   |¡|_tj ||||dd|_t   |¡|_t  |dd¡|_|dkrTt  ||d¡|_dSdS)Nr©Úpaddingrr)rrÚ in_channelsrrrÚ gin_channelsrÚDropoutÚdroprÚconv_1ÚmodulesÚ LayerNormÚnorm_1Úconv_2Únorm_2r"Úcond)r#rErrrrFr$r&r'r=s&   ÿ  ÿ ÿzDurationPredictor.__init__NcCs˜t |¡}|durt |¡}|| |¡}| ||¡}t |¡}| |¡}| |¡}| ||¡}t |¡}| |¡}| |¡}|  ||¡}||S©N) r-ÚdetachrOrIÚrelurLrHrMrNr")r#r6r8Úgr&r&r'r<Vs        zDurationPredictor.forward©rrPr=r&r&r$r'rB<sÿrBcs(eZdZd ‡fdd„ Zd dd „Z‡ZS) ÚStochasticDurationPredictorérc sltƒ ¡|}||_||_||_||_||_||_t  ¡|_ t   ¡|_ |j  t d¡¡t|ƒD]}|j  tjd||dd¡|j  t ¡¡q0t  d|d¡|_t  ||d¡|_tj||d|d|_t   ¡|_|j t d¡¡tdƒD]}|j tjd||dd¡|j t ¡¡qtt  ||d¡|_t  ||d¡|_tj||d|d|_|dkr´t  ||d¡|_dSdS)Nré)rr)rrrVr)rrrErrrÚn_flowsrFrJÚLogÚlog_flowrÚ ModuleListÚflowsÚappendZElementwiseAffineÚrangeZConvFlowÚFliprÚpost_preÚ post_projZDDSConvÚ post_convsÚ post_flowsÚprer"ÚconvsrO)r#rErrrrXrFÚir$r&r'rgs8      ÿz$StochasticDurationPredictor.__init__NFçð?cCs„t |¡}| |¡}|durt |¡}|| |¡}| ||¡}| |¡|}|sý|j}|dus2J‚d}| |¡} | | |¡} |  | ¡|} t  |  d¡d|  d¡¡j |j |jd|} | } |jD]} | | ||| d\} } || 7}qat | ddgd¡\}}t |¡|}|||}|t t |¡t | ¡|ddg¡7}t dt dtj¡| d|ddg¡|}d}| ||¡\}}||7}t ||gd¡}|D]} | ||||d\}}||}qÐt dt dtj¡|d|ddg¡|}||Stt|jƒƒ}|dd …|d g}t  |  d¡d|  d¡¡j |j |jd|}|D] } | ||||d}q't |ddgd¡\}}|}|S) Nrr)Údevicer4©rSrr ©rSÚreverseçà?éþÿÿÿr()r-rQrdrOrer"r\r`rbraÚrandnr2r3rhr4rcr5ÚsigmoidÚsumÚFÚ logsigmoidr+ÚlogÚpirZÚcatÚlistÚreversed)r#r6r8ÚwrSrkÚ noise_scaler\Z logdet_tot_qZh_wÚe_qZz_qÚflowZlogdet_qZz_uÚz1ÚuÚz0ZlogqZ logdet_totÚlogdetÚzZnllÚlogwr&r&r'r<‡sR       ,   *0 0,z#StochasticDurationPredictor.forward©rVr)NNFrgr=r&r&r$r'rUfs rUcs*eZdZ d‡fdd„ Zd dd„Z‡ZS) ÚPosteriorEncoderrcsrtƒ ¡||_||_||_||_||_||_||_t   ||d¡|_ t j |||||d|_t   ||dd¡|_dS)Nr©rFr)rrrErrrÚ dilation_raterrFrrrdrJÚWNÚencr")r#rErrrr…rrFr$r&r'r·s" ûzPosteriorEncoder.__init__Nrgc Cst t || d¡¡d¡ |j¡}| |¡|}|j|||d}|  |¡|}tj ||j dd\}}|t  |¡|t  |¡|} | |||fS)Nrrrir))r-r/r0r1r2r3r4rdr‡r"r5rÚ randn_likeÚexp) r#r6r7rSÚtaur8r9r:r;r€r&r&r'r<Ôsÿ  zPosteriorEncoder.forwardrT)Nrgr=r&r&r$r'rƒ¶s ørƒcs2eZdZ d ‡fdd„ Zd dd„Zdd„Z‡ZS) Ú Generatorrc  sJtt|ƒ ¡t|ƒ|_t|ƒ|_t||dddd|_|dkr"tj ntj }t   ¡|_ tt||ƒƒD]#\} \} } |j  tt|d| |d| d| | | | ddƒ¡q1t   ¡|_tt|j ƒƒD]"} |d| d} tt||ƒƒD]\} \} }|j || | |ƒ¡qrqat| dddddd|_|j  t¡|d kr£t  ||d¡|_dSdS) NérrWrCÚ1rF)rDÚbiasr)rr‹rÚlenÚ num_kernelsÚ num_upsamplesrÚconv_prerJZ ResBlock1Z ResBlock2rr[ÚupsÚ enumerateÚzipr]rrÚ resblocksr^Ú conv_postÚapplyr rO)r#Zinitial_channelÚresblockÚresblock_kernel_sizesÚresblock_dilation_sizesÚupsample_ratesÚupsample_initial_channelÚupsample_kernel_sizesrFrfr}ÚkÚchÚjÚdr$r&r'rásB   ÿ   ûÿÿ ÿý ÿzGenerator.__init__NcCsÊ| |¡}|dur|| |¡}t|jƒD]>}t |tj¡}|j||ƒ}d}t|j ƒD]!}|dur?|j ||j ||ƒ}q,||j ||j ||ƒ7}q,||j }qt |¡}|  |¡}t   |¡}|SrP)r’rOr^r‘rqÚ leaky_relurJZ LRELU_SLOPEr“rr–r—r-Útanh)r#r6rSrfÚxsr¡r&r&r'r<s     zGenerator.forwardcCs4tdƒ|jD]}t|ƒq|jD]}| ¡qdS)NzRemoving weight norm...)Úprintr“rr–)r#Úlayerr&r&r'r%s     ÿzGenerator.remove_weight_normrTrP)r>r?r@rr<rrAr&r&r$r'r‹às  ÷ /r‹cs4eZdZdZd ‡fdd„ Zd dd„Zd d „Z‡ZS) ÚReferenceEncoderzT inputs --- [N, Ty/r, n_mels*r] mels outputs --- [N, ref_enc_gru_size] rTcs¦tƒ ¡||_gd¢}t|ƒ}dg|‰‡fdd„t|ƒDƒ}t |¡|_| |ddd|¡}tj |d|dd d |_ t  d|¡|_ |rNt  |j¡|_dSd|_dS) N)é r©é@rªé€r«rc s0g|]}ttjˆ|ˆ|dddddƒ‘qS)r)rWrW)rr)rr)rErrÚstriderD)rrr)Ú.0rf©Úfiltersr&r'Ú 9s ÷ ûÿÿz-ReferenceEncoder.__init__..rWrr(r«T)Ú input_sizeÚ hidden_sizeÚ batch_first)rrÚ spec_channelsrr^rr[reÚcalculate_channelsÚGRUÚgruÚLinearr"rKÚ layernorm)r#r´rFr¹Zref_enc_filtersÚKrerr$r®r'r3s&    ö  ý zReferenceEncoder.__init__NcCs¨| d¡}| |dd|j¡}|jdur| |¡}|jD] }||ƒ}t |¡}q| dd¡}| d¡}| d¡}| ¡ ||d¡}|j   ¡|  |¡\}}|  |  d¡¡S)Nrrr(r) r2Úviewr´r¹rerqrRr.Ú contiguousr·Úflatten_parametersr"Úsqueeze)r#ÚinputsÚmaskÚNÚoutÚconvÚTÚmemoryr&r&r'r<Ss         zReferenceEncoder.forwardcCs*t|ƒD]}||d||d}q|S)Nrr)r^)r#ÚLrr¬ÚpadZn_convsrfr&r&r'rµis z#ReferenceEncoder.calculate_channels)rTrP)r>r?r@Ú__doc__rr<rµrAr&r&r$r'r¨-s  r¨cs,eZdZ  d ‡fdd„ Zd dd„Z‡ZS) ÚResidualCouplingBlockrVrc s€tƒ ¡||_||_||_||_||_||_||_t   ¡|_ t |ƒD]}|j   tj||||||dd¡|j   t ¡¡q#dS)NT)rFZ mean_only)rrÚchannelsrrr…rrXrFrr[r\r^r]rJZResidualCouplingLayerr_) r#rÊrrr…rrXrFrfr$r&r'rps    þzResidualCouplingBlock.__init__NFcCsL|s|jD] }|||||d\}}q|St|jƒD] }|||||d}q|S)Nrj)r\rw)r#r6r8rSrkr{Ú_r&r&r'r<†s þzResidualCouplingBlock.forwardr‚)NFr=r&r&r$r'rÉos ùrÉcs:eZdZdZ  d ‡fdd„ Zdd d „Zdd d „Z‡ZS)ÚSynthesizerTrnz" Synthesizer for Training éc sÄtƒ ¡t|| | | | |||d|_t|||ddd|d|_t||ddd|d|_||_|dkr8t ||ƒ|_ dSt |||||||| ƒ|_ t |ddd d|d|_t|d dd |d|_t ||¡|_dS) Nr„érérVréÀrWrlrÍ)rrr‹ÚdecrƒÚenc_qrÉr{Ú n_speakersr¨Úref_encr Úenc_prUÚsdprBÚdprrÚemb_g)r#rr´Zinter_channelsrrrrrrr™ršr›rœrržrÓrFÚkwargsr$r&r'r”sH ø ù ùzSynthesizerTrn.__init__Nrrgçš™™™™™É?c CsŠ| ||¡\}} } } |jdkr| |¡ d¡} nd} |j|| | d|d||j|| | dd|} t | ¡| |}t |¡}t  t  |ddg¡d¡  ¡}t t   |d¡d¡ | j¡}t | d¡t |d¡}t  ||¡}t | d¡|  dd¡¡ dd¡} t | d¡|  dd¡¡ dd¡} | t | ¡t | ¡|}|j||| dd}|j||dd…dd…d|…f| d}|||||| | ffS) Nrr(T)rSrkryrirrrj)rÕrÓrØr/rÖr×r-r‰ÚceilÚ clamp_minrpÚlongr0r1r3r4Ú generate_pathÚmatmulr¾r.rˆr{rÑ)r#r6r7ÚsidryÚ length_scaleÚ noise_scale_wZ sdp_ratioÚmax_lenÚm_pÚlogs_pr8rSrrxZw_ceilÚ y_lengthsÚy_maskÚ attn_maskÚattnÚz_pr€Úor&r&r'ÚinferÑs& ÿ  ""(zSynthesizerTrn.infercCsf|}|}|j||||d\}} } } |j|| |d} |j| | |dd} |j| | |d}|| || | ffS)N)rSrŠriTrj)rÒr{rÑ)r#ÚyræÚsid_srcÚsid_tgtrŠZg_srcZg_tgtr€Úm_qÚlogs_qrçrêZz_hatZo_hatr&r&r'Úvoice_conversionêszSynthesizerTrn.voice_conversion)rÍrÍ)NrrrgrÚN)rg)r>r?r@rÈrrìròrAr&r&r$r'rÌsî =rÌ)r+r-rÚtorch.nnrrqr0rJrrrrZtorch.nn.utilsrrr r r ÚModuler rBrUrƒr‹r¨rÉrÌr&r&r&r'Ús$  ,*P*MB