
    9i.                     ^   S SK JrJrJrJr  S SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJr  S SKrS SKrS SKJr  S SKJr  S SKJr  S SKJrJrJr  S SKJrJrJrJ r   S SK!J"r"  S S	K#J$r$  S
SK%J&r&  S/r'\$" 5       r(\RR                  " \"RT                  \RV                  S9 " S S\5      5       r,g)    )absolute_importdivisionprint_functionunicode_literalsN)Models)Model)MODELS)TtsCustomParamsTtsTrainTypendarray_pcm_to_wav)$TtsFrontendInitializeFailedException'TtsFrontendLanguageTypeInvalidExceptionTtsModelConfigurationExceptionTtsVoiceNotExistsException)Tasks)
get_logger   )VoiceSambertHifigan)module_namec                      ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
 rS r    SS jrSS\S\4S jjrSrU =r$ )r   #   c                 2  > [         T	U ]  " U/UQ70 UD6  Xl        UR                  SS5      U l        SU l        SU;   a   US   n[        U[        5      (       a  X@l        SU l        SU;   a+  SUS   ;   a"  US   S   R                  SS5      (       + U l        U R                  XR                  S	0 5      5      u  U l
        U l        U l        [        U R                  5      S
:X  d)  [        U R                  R                  S/ 5      5      S
:X  a  [        S5      eU R                  S   (       a  U R                  S   S
   U l        O[        S5      e[         R"                  S:  a  [%        S5      eS
S KnUR)                  5       n[*        R,                  R/                  US5      n[*        R,                  R/                  US5      U l        [2        R4                  " US5       nUR7                  U5        S S S 5        UR9                  U R0                  5      (       d$  [;        SR=                  U R0                  5      5      eUR?                  U R                  5      (       d$  [A        SR=                  U R                  5      5      eX`l!        g ! , (       d  f       N= f)Nsample_ratei>  Fis_trainamlinguistic_unithas_maskTcustom_ckptr   voiceszmodelscope error: voices emptyz0modelscope error: voices is empty in voices.json)      z"Python version needs to be <= 3.10zresource.zipresourcerz&modelscope error: resource invalid: {}z+modelscope error: language type invalid: {})"super__init__	model_dirgetr   r   
isinstanceboolignore_mask
load_voicer    	voice_cfg	lang_typelenr   default_voice_namesysversion_infoImportErrorttsfrdTtsFrontendEngineospathjoinres_pathzipfileZipFile
extractall
initializer   formatset_lang_typer   frontend)
selfr'   argskwargsr   r4   r@   zip_filezip_ref	__class__s
            h/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/audio/tts/sambert_hifi.pyr&   SambertHifigan.__init__'   s-   4T4V4"!::mU;j)H(D)) ( 6> F4L0'-d|4E'F'J'J(& $& 6:oozz-4763T^T^t{{q C(:(:8R(H$IQ$N,-MNN>>(#&*nnX&>q&AD#,BD D w&BCC++-77<<	>:Y
;__Xs+wy) ,""4==1168??NP P%%dnn559=DDNN$% % ! ,+s   J
Jc                 |   [         R                  [         R                  [         R                  [         R                  [         R
                  4n0 n0 nSnU H  nXr;  d  M
  [        SU 35      e   U[         R                     n[        UUUU R                  U R                  S9n	XU'   U/US'   U	R                  nXEU4$ )NPinYinzcustom ckpt must have: )
voice_name
voice_pathr   r+   r   r    )r
   
VOICE_NAMEAM_CKPTVOC_CKPT	AM_CONFIG
VOC_CONFIGTtsModelNotExistsExceptionr   r+   r   r.   )
rA   r'   r   necessary_filesr    
voices_cfgr.   krK   voices
             rG   build_voice_from_custom&SambertHifigan.build_voice_from_customQ   s    *557N7N*33_5N5N*557 
	 A#0-o->?A A ! !!;!;<
! #((]]$ #z *|
8OO	9,,    c                    0 n[         R                  R                  US5      n[         R                  R                  US5      nSn[        U5      S:w  a  U R	                  X5      $ [         R                  R                  U5      (       a$  [         R                  R                  U5      (       d  U0 U4$ [        USSS9 n[        R                  " U5      nS S S 5        SW;  a  U0 U4$ US    Hx  n	[         R                  R                  XI5      n
[         R                  R                  U
5      (       d  MH  [        U	U
U R                  U R                  S9X9'   X9   R                  nMz     X8U4$ ! , (       d  f       N= f)	Nr    voices.jsonrJ   r   r$   utf-8encoding)r+   r   )r6   r7   r8   r/   rW   existsopenjsonloadr   r+   r   r.   )rA   r'   r   r    voices_pathvoices_json_pathr.   fr-   namerL   s              rG   r,   SambertHifigan.load_voiceh   s>   ggll9h777<<]C	{q //	GGww~~k**"''.. 3" 3"2y(("C':a		!I ;9$2y((h'Dk8J77>>*--  ,,	(FL
 ..I ( )++ ;:s   =E,,
E:c                    [         R                  R                  U R                  SS5      n[         R                  R	                  U5      (       a  [         R
                  " U5        0 n/ US'   U R                  R                  5        H  nUS   R                  U5        M     [        USSS9 n[        R                  " X$5        S S S 5        g ! , (       d  f       g = f)Nr    r[   wr\   r]   )r6   r7   r8   r'   r_   remover    keysappendr`   ra   dump)rA   rd   save_voicesrU   re   s        rG   rn   SambertHifigan.save_voices   s    77<<(5777>>*++II&' "H!!#A!((+ $"C':aIIk% ;::s   -C
Cc                 2    U R                   U R                  4$ N)r    r-   )rA   s    rG   
get_voicesSambertHifigan.get_voices   s    {{DNN**rY   c                 j   [         R                  R                  U R                  SU5      n[         R                  R	                  U5      (       a  [
        R                  " U5        [         R                  " USS9  U(       a^  [         R                  R	                  U5      (       a:  [         R                  R                  U5      (       a  [
        R                  " X%5        [         R                  R                  US5      n[         R                  R                  US5      nU(       a  [         R                  R	                  U5      (       a^  [         R                  R                  [        5      (       a6  [         R                  R                  US5      n[
        R                  " X85        U(       a  [         R                  R	                  U5      (       a^  [         R                  R                  [        5      (       a6  [         R                  R                  US5      n	[
        R                  " XI5        [         R                  R                  US5      n
[         R                  R                  US5      n[         R                  " U
SS9  [         R                  " USS9  [        UUSS9U R                  U'   g )	Nr    T)exist_okr   voczconfig.yamlckpt)rK   rL   allow_empty)r6   r7   r8   r'   r_   shutilrmtreemakedirsisfilecopy	am_config
voc_configr   r    )rA   rK   audio_configam_config_pathvoc_config_pathvoice_name_pathvoice_am_pathvoice_voc_patham_config_namevoc_config_nameam_ckpt_pathvoc_ckpt_paths               rG   create_empty_voice!SambertHifigan.create_empty_voice   s   '',,t~~xL77>>/**MM/*
Od3BGGNN<88RWW^^> >KK6_d;ou=bggnn   $&GGNN9$=$=WW\\-GNKK7rww~~ !  !%'WW^^J%?%? ggll=-HOKK9ww||M6:^V<
L40
MD1"'!&#JrY   c                 T    XR                   ;  a  gU R                   U   R                  $ N )r    r   rA   rV   s     rG   get_voice_audio_config_path*SambertHifigan.get_voice_audio_config_path   s$    #{{5!...rY   c                     XR                   ;  a  gU R                   U   R                  (       a  U R                   U   R                  $ gr   )r    	se_enablese_model_pathr   s     rG   get_voice_se_model_path&SambertHifigan.get_voice_se_model_path   s9    #;;u'';;u%333rY   c                 T    XR                   ;  a  gU R                   U   R                  $ r   )r    lang_dirr   s     rG   get_voice_lang_path"SambertHifigan.get_voice_lang_path   s$    #{{5!***rY   c                 z    XR                   ;  a  [        SU S35      eU R                   U   R                  U5      $ )Nmodelscope error: Voice  not exists)r    r   forward)rA   rK   texts      rG   synthesis_one_sentences&SambertHifigan.synthesis_one_sentences   sA    [[(,*:,kBD D{{:&..t44rY   c                 R   [         R                  " S5        US   nUS   n	US   n
US   nS nXR                  ;  a  U(       d  [        S[         S35      eUR                  SS	5      nUR                  S
S5      n[        R                  U;   a  [        (       d  [        S5      e[        R                  U;   a  [        (       d  [        S5      eOU R                  U   nUR                  nUR                  nU(       ab  SU;   a+  US   n[        R                  R!                  U5      (       a  UnS
U;   a+  US
   n[        R                  R!                  U5      (       a  Un["        R%                  S5        [        R                  U;   a  ["        R%                  S5        [&        R&                  R)                  5       nU[        R                     nUR+                  XUXU5        [&        R&                  R)                  5       U-
  n["        R%                  SR-                  UR/                  5       S-  5      5        O["        R%                  S5        [        R                  U;   a  ["        R%                  S5        [&        R&                  R)                  5       nU[        R                     nUR1                  XUXU5        [&        R&                  R)                  5       U-
  n["        R%                  SR-                  UR/                  5       S-  5      5        g ["        R%                  S5        g )Ninfowork_dir
am_tmp_dirvoc_tmp_dirdata_dirr   r   r~   zam_config.yamlr   zvoc_config.yamlz*training new voice am with empty am_configz,training new voice voc with empty voc_configzStart training....zStart SAMBERT training...z%SAMBERT training spent: {:.2f} hours
g      @zskip SAMBERT training...zStart HIFIGAN training...z%HIFIGAN training spent: {:.2f} hours
zskip HIFIGAN training...)pltset_loglevelr    r   rK   r(   r   TRAIN_TYPE_SAMBERTr~    TtsTrainingCfgNotExistsExceptionTRAIN_TYPE_VOCr   r   r   r6   r7   r_   loggerr   datetimenowtrain_sambertr>   total_secondstrain_hifigan)rA   rV   dirs
train_typeconfigs_path_dictignore_pretraincreate_if_not_existshparamr   am_dirvoc_dirr   target_voicer   r   am_overridevoc_override	totaltimehparamss                      rG   trainSambertHifigan.train   s    	 
#l#}%
##'0.zl+FH H.22;3CEN/33L4EGO..*<YY6@B B**j86BD D  ;;u-L)88N*::O "33"3K"@Kww~~k22)4#44#4\#BLww~~l33*6()**j8KK34 ))--/I !@!@AG&&x'5'.0 !))--/);IKK@GG'')F24 5 KK23&&*4KK34 ))--/I !<!<=G&&x('6'.0 !))--/);IKK@GG'')F24 5 KK23rY   r   rK   c                    U R                   nUb  UnU R                  R                  U5      nUR                  5        Vs/ s H  oUS:w  d  M
  UPM     nn[        R
                  " SSS9nU H_  nUR                  5       R                  S5      nU R                  X8S   5      n	SU	-  n	[        R                  " XyR                  S5      SS9nMa     [        U R                  U5      $ s  snf )	Nr   r   int16)dtype	r   g      @)axis)r0   r@   gen_tacotron_symbols
splitlinesnpemptystripsplitr   rl   astyper   r   )
rA   r   rK   rV   resultstextsaudio_totallineaudios
             rG   r   SambertHifigan.forward
  s    ''!E33D9"--/;/q7/;hh'2D::<%%d+D00Q@EeOE))Kg1FQOK	 
 "$"2"2K@@ <s   	C$C$)
r0   r@   r+   r   r.   r'   r9   r   r-   r    )NFFNrq   )__name__
__module____qualname____firstlineno__r&   rW   r,   rn   rr   r   r   r   r   r   r   strr   __static_attributes____classcell__)rF   s   @rG   r   r   #   sg    (!T-.,4
&+8/
+
5 !%##(C4JAC AS A ArY   )-
__future__r   r   r   r   r   r6   ry   r1   waver:   ra   matplotlib.pyplotpyplotr   numpyr   yamlmodelscope.metainfor   modelscope.models.baser   modelscope.models.builderr	   "modelscope.utils.audio.audio_utilsr
   r   r   %modelscope.utils.audio.tts_exceptionsr   r   r   r   modelscope.utils.constantr   modelscope.utils.loggerr   rV   r   __all__r   register_moduletext_to_speechsambert_hifiganr    rY   rG   <module>r      s   * *  	  
       & ( ,D D    , . 
	 	f&<&<>qAU qA>qArY   