
    9i$                         S SK r S SKrS SKrS SKrS SKJs  Jr  S SKJ	r	  S r
S rS r " S S\R                  R                  5      rSS jr " S	 S
5      rg)    N)pad_sequencec                 0   [        U SSS9 nUR                  5       nS S S 5        / n/ n[        [        W5      5       H  nX%   R	                  5       nUS   S:X  a>  X%S-      R	                  5       nUS   S:X  a  US[        U5      S-
   n[        U5      nMZ  M\  US   S	:X  d  Mg  X%S-      R	                  5       nUS   S:X  d  M  US[        U5      S-
   n[        U5      nM     [        R                  " U5      R                  [        R                  5      n	[        R                  " U5      R                  [        R                  5      n
[        R                  " X/5      n[        R                  " U[        R                  S
9nU$ ! , (       d  f       GNp= f)Nrzutf-8)encodingr   z
<AddShift>   z<LearnRateCoef>   z	<Rescale>dtype)open	readlinesrangelensplitlistnparrayastypefloat32torch	as_tensor)	cmvn_fileflines
means_list	vars_listi	line_itemadd_shift_linerescale_linemeansvarscmvns               f/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/audio/vc/src/encoder.py	load_cmvnr$   	   s^   	iw	/1 
0JI3u:HNN$	Q<<'!e**,I|00!*1c)nq.@!B!.1
 1 q\[(!e**,I|00(C	NQ,>@ .	  HHZ ''

3E88I%%bjj1D88UM"D??4u}}5DK- 
0	/s   F
Fc                     U R                   nU R                  u  p4USS2SU24   nUSS2SU24   nXR                  U5      -  n XR                  U5      -  n U R                  [        R
                  5      $ )z
Apply CMVN with mvn data
r   r   N   )deviceshapetotyper   r   )inputsr"   r'   framedimr    r!   s          r#   
apply_cmvnr.   #   sv    
 ]]FJE1dsdOE!TcT	?D
hhvF
ggfoF;;u}}%%    c                    / nU R                   S   n[        [        R                  " XB-  5      5      nU S   R	                  US-
  S-  S5      n[
        R                  " X`45      n XAS-
  S-  -   n[        U5       H  nXXr-  -
  ::  a-  UR                  XU-  Xr-  U-    R                  SS5      5        M:  XXr-  -
  -
  nXU-  S  R                  S5      n	[        U5       H  n
[
        R                  " XS   45      n	M     UR                  U	5        M     [
        R                  " U5      nUR                  [
        R                  5      $ )Nr   r   r&   )r(   intr   ceilrepeatr   vstackr   appendviewhstackr*   r   )r+   lfr_mlfr_n
LFR_inputsTT_lfrleft_paddingr   num_paddingr,   _LFR_outputss               r#   	apply_lfrrB   4   s3   JQA	"#E!9##UQY1$4a8L\\<01F	QY1A5\	M!E	!)e"34::1bAC  qy=1KIJ'--b1E;'eBZ%89 (e$  ,,z*KEMM**r/   c                   "  ^  \ rS rSr             SS\S\S\S\S\S\S\S	\S
\S\S\S\S\4U 4S jjjrS\4S jr	S\
R                  4S jrS\
R                  S\
R                  4S jrS\
R                  S\
R                  4S jrSrU =r$ )WavFrontendI   r   fswindown_melsframe_lengthframe_shiftfilter_length_minfilter_length_maxr9   r:   dither
snip_edgesupsacle_samplesc                   > [         TU ]  5         X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl	        Xl
        Xl        Xl        Xl        Xl        U R                  c  S U l        g [        U R                  5      U l        g N)super__init__rF   rG   rH   rI   rJ   rK   rL   r9   r:   r   rM   rN   rO   r$   r"   )selfr   rF   rG   rH   rI   rJ   rK   rL   r9   r:   rM   rN   rO   kwargs	__class__s                  r#   rS   WavFrontend.__init__K   sx    " 	(&!2!2

"$. NN2D		NN9	r/   returnc                 4    U R                   U R                  -  $ rQ   )rH   r9   )rT   s    r#   output_sizeWavFrontend.output_sizem   s    {{TZZ''r/   inputc                    UR                  S5      n/ n/ n[        U5       GH-  nX'   nX   S U n	U R                  (       a  U	S-  n	U	R                  S5      n	[        R
                  " U	U R                  U R                  U R                  U R                  SU R                  U R                  U R                  S9	n
U R                  S:w  d  U R                  S:w  a   [        XR                  U R                  5      n
U R                   b  [#        XR                   5      n
U
R                  S5      nUR%                  U
5        UR%                  U5        GM0     [&        R(                  " U5      nUS:X  a  US   S S S 2S S 24   nX4$ [+        USSS9nX4$ )Nr              )num_mel_binsrI   rJ   rM   energy_floorwindow_typesample_frequencyrN   r   Tbatch_firstpadding_value)sizer   rO   	unsqueezekaldifbankrH   rI   rJ   rM   rG   rF   rN   r9   r:   rB   r"   r.   r6   r   r   r   )rT   r\   input_lengthsrU   
batch_sizefeats
feats_lensr   waveform_lengthwaveformmatfeat_length	feats_pads                r#   forwardWavFrontend.forwardp   sk    ZZ]

z"A+.Ox 01H###w/))!,H++![[!.. ,,{{  KK!%??
C zzQ$**/ZZ<yy$ ii0((1+KLLk*7 #: __Z0
?aq!,I
 $$ %4s<I $$r/   rk   c                    UR                  S5      n/ n/ n[        U5       H  nX&   nX   S U nU R                  (       a  US-  nUR                  S5      n[        R
                  " UU R                  U R                  U R                  U R                  SU R                  U R                  S9n	U	R                  S5      n
UR                  U	5        UR                  U
5        M     [        R                  " U5      n[        USSS9nX4$ )Nr   r^   r_   )r`   rI   rJ   rM   ra   rb   rc   Trd   )rg   r   rO   rh   ri   rj   rH   rI   rJ   rM   rG   rF   r6   r   r   r   )rT   r\   rk   rl   rm   rn   r   ro   rp   rq   rr   rs   s               r#   forward_fbankWavFrontend.forward_fbank   s    ZZ]

z"A+.Ox 01H###w/))!,H++![[!.. ,,{{  KK!%	C ((1+KLLk*' #* __Z0
 DL	$$r/   c                    UR                  S5      n/ n/ n[        U5       H  nXS X&   2S S 24   nU R                  S:w  d  U R                  S:w  a   [	        XpR                  U R                  5      nU R
                  b  [        XpR
                  5      nUR                  S5      nUR                  U5        UR                  U5        M     [        R                  " U5      n[        USSS9n	X4$ )Nr   r   Tr_   rd   )rg   r   r9   r:   rB   r"   r.   r6   r   r   r   )
rT   r\   rk   rl   rm   rn   r   rq   rr   rs   s
             r#   forward_lfr_cmvnWavFrontend.forward_lfr_cmvn   s    ZZ]

z"A,M,,a/0CzzQ$**/ZZ<yy$ ii0((1+KLLk* # __Z0
 DL	$$r/   )r"   r   rM   rL   rK   rI   rJ   rF   r9   r:   rH   rN   rO   rG   )N>  hammingP      
   r1   r1   r   r   g      ?TF)__name__
__module____qualname____firstlineno__strr2   floatboolrS   rZ   r   Tensorrt   rw   rz   __static_attributes____classcell__)rV   s   @r#   rD   rD   I   s    !#!# %     	 
                      D(S (-%||-%^%5<< % %:%ell %(-% %r/   rD   c                 d  ^ TS:X  a  [        SR                  T5      5      e[        U [        5      (       d  U R	                  5       n [        [        U 5      5      nUc*  Uc  [        [        U 5      5      nO1UR                  T5      nOUb   eU[        [        U 5      5      :  d   e[        R                  " SU[        R                  S9nUR                  S5      R                  XC5      nUR                  U 5      R                  S5      nXg:  nUb  UR                  S5      U:X  d   UR                  S5      U45       eTS:  a  UR                  5       T-   m[!        U4S j[#        UR                  5       5       5       5      n	X   R%                  U5      R'                  UR(                  5      nU$ )Nr   zlength_dim cannot be 0: {}r	   r1   c              3   N   >#    U  H  nUS T4;   a  [        S5      OSv   M     g7f)r   N)slice).0r   
length_dims     r#   	<genexpr> make_pad_mask.<locals>.<genexpr>   s,      &$ J/E$KT9$s   "%)
ValueErrorformat
isinstancer   tolistr2   r   maxrg   r   arangeint64rh   expandnewr-   tupler   	expand_asr)   r'   )
lengthsxsr   maxlenbs	seq_rangeseq_range_expandseq_length_expandmaskinds
     `       r#   make_pad_maskr      sr   Q5<<ZHIIgt$$.."	S\	B~:W&FWWZ(FzzS\****Qekk:I **1-44R@(,,W5??C0D	~wwqzR1"''!*b!11>J.J &2668_& & y""2&))"))4Kr/   c                   &    \ rS rSrS rS rS rSrg)Encoder   c                     [        USSSS9U l        [        R                  " U[        R                  " 5       S9U l        g )N      r_   )r9   r:   rM   )provider_options)rD   frontonnxruntimeInferenceSessionget_available_providersasr_session)rT   encoder_front_pathencoder_onnx_paths      r#   rS   Encoder.__init__   s:     aq>
&77(@@BDr/   c                 |   [         R                  " USS9S   n[        U5      nUR                  SS/5      n[        R
                  " U5      n[        R                  " [        R                  " U/5      5      nU R                  X#5      u  pEUR                  5       R                  5       R                  5       n[        U5      S S 2S S S 24   ) nU R                  R                  SS/UUR                  5       R                  5       R                  5       R!                  S5      S	.S
9n[        R
                  " US   5      $ )Nr|   srr   r   r1   ys_padolensr   )xs_padmasks)
input_feed)librosaloadr   reshaper   FloatTensor	IntTensorr   r   r   detachcpunumpyr   r   runr   )rT   wav_pathwavwav_lenrm   	feats_lenr   outss           r#   	inferenceEncoder.inference   s	   ll8.q1c(kk1b'"$//"((G9"56::c3""$**,y)!T1*55##w++-335<<YG $    a))r/   c                    [         R                  " USS9S   n[        U5      nUR                  SS/5      n[        R
                  " U5      n[        R                  " [        R                  " U/5      5      nU R                  X#5      u  pEU$ )Nr|   r   r   r   r1   )
r   r   r   r   r   r   r   r   r   r   )rT   r   r   r   rm   r   s         r#   	get_featsEncoder.get_feats  sq    ll8.q1c(kk1b'"$//"((G9"56::c3r/   )r   r   N)r   r   r   r   rS   r   r   r    r/   r#   r   r      s    D*(r/   r   )Nr1   N)r   r   r   r   r   torchaudio.compliance.kaldi
complianceri   torch.nn.utils.rnnr   r$   r.   rB   nnModulerD   r   r   r   r/   r#   <module>r      sP        + + +4&"+*D%%((// D%N F% %r/   