
    9i.                        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J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  \" 5       rSrS	r " S
 S\5      r " S S\5      r\4S jrS rS\\/4S jrS\S\4S jrS rS r S\!S\
RD                  S\4S jr#S\S\\\4   4S jr$S$S\S\4S jjr%S\4S jr&S$S\S\4S jjr'S \\(\)4   4S! jr*S \\(\)4   4S" jr+S# r,g)%    N)Union)urlparse)HTTPStorage)get_model_cache_root)snapshot_download)
get_loggeri>  )z.flacz.mp3z.oggz.opusz.wavz.pcmc                        \ rS rSrSrSrSrSrg)TtsTrainType   ztrain-type-sambertztrain-type-bertztrain-type-voc N)__name__
__module____qualname____firstlineno__TRAIN_TYPE_SAMBERTTRAIN_TYPE_BERTTRAIN_TYPE_VOC__static_attributes__r       b/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/utils/audio/audio_utils.pyr
   r
      s    -'O%Nr   r
   c                   8    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrg)TtsCustomParams   
voice_nameam_ckptvoc_ckpt	am_config
voc_configaudio_configse_filese_modelmvn_filer   N)r   r   r   r   
VOICE_NAMEAM_CKPTVOC_CKPT	AM_CONFIG
VOC_CONFIGAUIDO_CONFIGSE_FILESE_MODELMVN_FILEr   r   r   r   r   r      s/    JGHIJ!LGHHr   r   c                 (   / n/ n[        U S   U S   5       Hu  u  pE[        [        US   5      [        US   5      5      nUS   nUS   n[        XS-   U5       H/  n	UR	                  XyU-
  U	 5        UR	                  XU-
  U	 5        M1     Mw     X#S.$ )zY
Dataset mapping function to split one audio into segments.
It only works in batch mode.
noisycleanarray   )r-   r.   )zipminlenrangeappend)
batchsegment_lengthnoisy_arraysclean_arraysxylengthr-   r.   offsets
             r   
to_segmentr>   )   s    
 LLE'NE'N3S7_c!G*o6'
'
NQJGF~&=f EF~&=f EF H	 4 "99r   c                     U S-  R                  5       S-  nSU-  nX-  n U S-  nUR                  5       nX3U:     R                  5       S-  nSU-  nX-  n U $ )N   g      ?g&-`ʬ?)mean)r:   rmsscalarpow_x	avg_pow_xrmsxscalarxs          r   
audio_normrH   :   sl    a4++-
Cc!F	
AqDE

I"#((*C/Dt#G	AHr   	conf_itemc                 (  ^ U4S jn[        U SS9 nUR                  5       nS S S 5        [        US5       nW H+  n[        R                  " SX65      nUR	                  U5        M-     S S S 5        g ! , (       d  f       NU= f! , (       d  f       g = f)Nc                    > U R                  S5      nUT;   a'  TU   n[        U[        5      (       d  [        U5      nU$ g )Nr0   )group
isinstancestr)matchedkeyvaluerI   s      r   replupdate_conf.<locals>.replH   s@    mmA)cNEeS))E
Lr   zutf-8)encodingwz
\$\{(.*)\})open	readlinesresubwrite)origin_config_filenew_config_filerI   rR   flineslines     `    r   update_confr`   F   sp     
 7	3q 
4	os	#qD66-4DGGDM  
$	# 
4	3	#	#s   A22B2
B 
Bwavreturnc                    U nS n[        U5      S:  a  Sn[        U5      n 0 n[        USS S5      US'   [        USS S5      US'   [        USS	 S5      US
'   US   S:X  av  US   S:X  am  US
   S:X  ad  [        R                  " SUS	S 5      S   US'   [        R                  " SUSS 5      S   US'   US   nUS   S	:X  a  SnOUS   S:X  a  SnOX4$ XU nX4$ X4$ ! [         a     X4$ f = f)N,   r      zUTF-8ChunkID      Format   Subchunk1IDRIFFWAVEzfmt <I   SubChunk1Size      
SampleRate   .   )r3   rN   structunpack	Exception)ra   datasample_rate	frame_lenfile_lenheader_fieldss         r   extract_pcm_from_wavr~   Z   se   DK
4y2~	t9	M'*4!9g'>M)$&)$q*g&>M(#+.tBr{G+DM-(Y'61m7!'7(,9%-'*0-117$r"+2''(2*o..4mmD<@BK/IIJ/Ll++L9 1R7 "I"?3r9 "I,,X.
 4	  			s   B2C C 
C.-C.c                     [         R                  " SU-   U 5      nUc  g XR                  5       S  n [         R                  " SU 5      nUc  g XR                  5       S  UR                  5       S   4$ )Nz^\s*z^\s*(-?\d+\.?\d*e?-?\d*?)r   )rX   matchendgroups)instrtokenfirst_tokenlrs       r   expect_token_numberr   }   sj    ((7U?E2K//#$%E	.	6B	zRYY[^++r   c                 P   U R                  SS5      nU R                  SU5      n/ nXS-   U R                  S5       HJ  n[        R                  " U[        R                  SS9nUR
                  S:  d  M9  UR                  U5        ML     XS-   S  [        R                  " U5      4$ )N[r   ]r0   
 )dtypesep)findsplitnp
fromstringfloat32sizer5   r/   )r   pos2pos3matstttmp_mats         r   expect_kaldi_matrixr      s    ::c1D::c4 D
CAXd#))$/--2::3?<<!JJw 0 RXXc]**r   fsry   c           	         UR                   R                  nUS:X  d>  US:X  d8  US:X  a  UR                   R                  S:X  d  [        SUR                    35      e[	        5       nUS-  nUS-  nUS-  nUS	-  nUS:X  a  S
nOSnUR
                  S:X  a  SnOUR                  S   nUR                   R                  S-  nXS-  -  U-  nXVS-  -  n[        R                  " SXEU XxU5      n	US:X  d  US:X  d  U	S-  n	U[        R                  " S[        U	5      5      -  nX9-  nUS:X  d3  US:X  d-  US-  nU[        R                  " SSUR                  S   5      -  n[        U5      S-
  SUR                  -   -   S:  a  [        S5      eUS-  nU[        R                  " SUR                  5      -  nUR                   R                  S:X  d.  UR                   R                  S:X  a$  [        R                  S:X  a  UR                  5       nX1R                  5       R                  S5      R                   -  n[        U5      n
[        R                  " SU
S-
  5      USS& [#        U5      $ )Nir]   ur0   zUnsupported data type s   RIFFs       s   WAVEs   fmt    rg   z<HHIIHHs     rn   s   factz<IIre   r   l    z!Data exceeds wave file size limits   data>=bigb)r   kinditemsize
ValueError	bytearrayndimshaperv   packr3   nbytes	byteordersysbyteswapravelviewry   bytes)r   ry   dkindheader_data
format_tagchannels	bit_depthbytes_per_secondblock_alignfmt_chunk_datar   s              r   ndarray_pcm_to_wavr      s;   JJOOESLESLc\djj11Q61$**>??+K7K&&K7K7K|

yyA~::a=

##a'I!^,x71n-K[[J"!1	KNSLESL+%6;;tS%899K!KSLESLwv{{5!TZZ];;	[	A	!dkk/2j@<==7K6;;tT[[11Kzzs"tzz';';s'B+.==E+A}}::<$$S)...K{D{{42K!r   urlc                     S n[        U 5      nUR                  bD  [        UR                  5      S:  a+  [        5       nUR	                  U 5      n[        U5      u  pAXA4$ U nXA4$ )Nr   )r   schemer3   r   readr~   )r   rz   resultstoragery   s        r   load_bytes_from_urlr      sg    Kc]F}} S%7!%;-||C 06  r   rP   c                    S nS n[         R                  R                  U 5      (       a  U nX#4$ U R                  S5      (       Ga  [	        U 5      nUR
                  b  [        UR
                  5      S:  a  [        5       nUR                  U 5      n[        R                  " 5       R                  n[         R                  R                  U5      (       d  [         R                  " U5        [         R                  R                  U[         R                  R                  U 5      5      n[        US5       n	U	R!                  U5        S S S 5        X4$ X#4$ ! , (       d  f       X4$ = f)Nhttpr   wb)ospathexists
startswithr   r   r3   r   r   tempfileTemporaryDirectorynamemakedirsjoinbasenamerV   rZ   )
r   rP   wav_scp_path
raw_inputsr   r   ry   work_dirwav_pathfbs
             r   generate_scp_from_urlr      s
   LJ	ww~~c''
~~f#==$V]]);a)?!mG<<$D22499H77>>(++H%ww||Hbgg.>.>s.CDHh% &''##	 &%''s   3E
E#c                    S nS n[         R                  R                  U 5      (       d  U R                  S5      (       d  U nX4$ [         R                  R                  U 5      (       aM  U R	                  5       R                  S5      (       d$  U R	                  5       R                  S5      (       a  U nX4$ [        U 5      nUR                  b  [        UR                  5      S:  a  [        5       nUR                  U 5      n[        R                  " 5       R                  n[         R                  R                  U5      (       d  [         R                  " U5        [         R                  R                  U[         R                  R!                  U 5      5      n[#        US5       nUR%                  U5        S S S 5        X4$ X4$ ! , (       d  f       X4$ = f)Nr   z.txt.scpr   r   )r   r   r   r   lowerendswithr   r   r3   r   r   r   r   r   r   r   r   rV   rZ   )r   text_file_pathr   r   r   ry   r   fps           r   generate_text_from_urlr      sY   NJ77>>#s~~f'='=
)) 
ww~~c		 4 4V < <#&99;#7#7#?#?))c]F}} S%7!%;-||C ..055ww~~h''KK!h0@0@0EF.$'2HHTN ())%%	 ('))s   #G
Gc                    S nUb  UO[         R                  R                  U 5      n[         R                  R                  U 5      (       a(  U R	                  5       R                  S5      (       a  U nU$ [         R                  R                  U 5      (       a  U R	                  5       R                  [        5      (       a  U n[        R                  " 5       R                  n[         R                  R                  U5      (       d  [         R                  " U5        [         R                  R                  US5      n[        US5       nSR                  X4/5      S-   nUR                  U5        S S S 5        U$ [        U 5      nUR                  b6  [!        UR                  5      S:  a  [#        5       n	U	R%                  U 5      nU$ U$ ! , (       d  f       U$ = f)Nr   zwav.scprU   	r   r   )r   r   r   r   r   r   SUPPORT_AUDIO_TYPE_SETSr   r   r   r   r   rV   
writelinesr   r   r3   r   r   )
r   rP   r   wav_namer   r   ftscp_contentr   r   s
             r   generate_scp_for_svr   	  s[   Los277+;+;C+@H	ww~~csyy{33F;;	ww~~c		 4 45L M M..055ww~~h''KK!ww||Hi8,$))X$89D@KMM+& % c]F}} S%7!%;-||C( %$ s   'G
Gurlsc                 R    / nU  H  n[        USS9nUR                  U5        M      U$ )zC
generate audio_scp files from url input for speaker verification.
test1)rP   )r   r5   )r   
audio_scpsr   	audio_scps       r   generate_sv_scp_from_urlr   %  s5     J'9	)$  r   c                    / nU  H  n[         R                  R                  U5      (       a+  UR                  5       R	                  [
        5      (       a  UnOi[        U5      nUR                  b7  [        UR                  5      S:  a  [        5       nUR                  U5      nUnO[        SR                  U5      5      eUR                  U5        M     U$ )zB
generate audio_scp files from url input for speaker diarization.
r   zCan't download from {}.)r   r   r   r   r   r   r   r   r3   r   r   r   formatr5   )r   r   r   r   r   r   	wav_bytess          r   generate_sd_scp_from_urlr   0  s     J77>>#		$$%<==Ic]F}}(S-?!-C%-#LL-	%	 !:!A!A#!FGG)$  r   c                 T   SU;   a  US   (       d  g S nSU;   a  US   S:X  a  S nOUS   nU R                  S5      (       Ga  U S   n[        5       n[        U[        5      (       a  [        R
                  R                  U5      (       a  UR                  U5      (       d   [        R
                  R                  USU-   5      n[        R
                  R                  U5      n[        R                  " USS9  [        R
                  R                  U5      (       d4  [        R                  " [        R
                  R                  U5      U5        [        UUUS9  g g g g [        R!                  S5        g ! [         a(  n[        R!                  [        U5      5         S nAg S nAff = f)	Nupdate_modellatestmodelz.cache/T)exist_ok)	cache_dirrevisionz(Can not find model name in configuration)__contains__r   rM   rN   r   r   r   r   r   dirnamer   symlinkabspathr   rx   loggerwarning)	model_config
model_path
extra_argsmodel_revision
model_namedst_dir_rootdstdst_dires	            r   update_local_modelr  E  sT   #J~,FN#n%1!N'7N  ))!'*
+-j#&&277>>, ,$.$9$9,$G$G'ggll<Z1GH''//#.Gd3ww~~c**JJrwwz:C@!*+- %H,&  	AB  's1v&&'s   !B:E5 5
F'?F""F')N)-r   rX   rv   r   r   typingr   urllib.parser   numpyr   modelscope.fileio.filer   modelscope.utils.file_utilsr   modelscope.utils.hubr   modelscope.utils.loggerr   r   SEGMENT_LENGTH_TRAINr   objectr
   r   r>   rH   rN   r`   r   r~   r   r   intndarrayr   r   r   r   r   tuplelistr   r   r  r   r   r   <module>r     s.   	 	  
   !  . < 2 .	 L &6 &	f 	 &: :"	c
 ( e    F,+-3 -bjj -U -`
S 
U5#:%6 
$s $ $2& &:S s 85#5 5#5 *Cr   