
    :i#                         d Z ddlZddlmZ ddlmZ dededee         fdZd	ee	         d
edee	         fdZ
dee	         dee	         fdZdS )u   音频与时间戳辅助工具。

职责概览：
- 将音频文件按秒切分为临时 wav 切片。
- 把标点注入 token 级时间戳序列。
- 将 token 级时间戳按句末标点合并为句子级时间戳。
    N)List)AudioSegment	file_pathchunk_secondsreturnc                 |   t          j        |           }t          d|          dz  }g }t          dt	          |          |          D ]s}||||z            }t          j        dd          5 }|                    |j        d           |	                    |j                   d d d            n# 1 swxY w Y   t|S )	N   i  r   Fz.wav)deletesuffixwav)format)
r   	from_filemaxrangelentempfileNamedTemporaryFileexportnameappend)r   r   audiochunk_mschunksstartsegmenttmps           src\gzzm\utils\audio_utils.pysplit_audio_to_chunksr      s    "9--E1m$$t+HFq#e**h// $ $ 001(fEEE 	$NN38EN222MM#(###	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ Ms   -7B00B4	7B4	segments	full_textc                    |s| S t          t          d                    }g }d}d}d}t          |          }||k     r||         }|                                r|dz  })||v r;|                    t          |d          t          |d          |d           |dz  }h|t          |           k     r)| |         }	|	                    dd          }
|
r|                    |
|          }n|}|d	k    r7|                    |	           |	                    d
|          }|dz  }|dz  }n||k     r\||         }|                                s5|                    t          |d          t          |d          |d           |dz  }||k     \|                    |	           |	                    d
|          }|dz  }|t          dt          |
                    z   }nN|                                s5|                    t          |d          t          |d          |d           |dz  }||k     t          |t          |                     D ]}|                    | |                    |S )Nu   。.!?！？.,，、r   g        r	      r   endtextr%    r$   )
setlistr   isspacer   roundgetfindr   r   )r   r    sentence_end_chars	augmented	token_idxilast_endnchseg
token_textjch2ks                 r   !insert_punctuations_into_segmentsr:      s    T"899::II	AHIA
a%%q\::<< 	FA###uXq'9'9%RSBTBT^`aabbbFAs8}}$$9%C,,J NN:q11Bww  %%%775(33Q	Q!ee#A,C;;== p!((513E3EeT\^_N`N`jm)n)noooFA	 !ee
   %%%775(33Q	As:///::<< g  51+=+=eHVWFXFXbd!e!efffFAK a%%N 9c(mm,, & &!%%%%    tokensc           
         t          t          d                    }g }g }d }d }| D ] }|                    dd          }|st          |          dk    r||v r|                    |           |n|                    t          |d          t          |                    d|          d          d                    |                                          d           g }d }d }||                    d          }|                    d          }|                    |           |\|rZ|                    t          |d          t          |d          d                    |                                          d           |S )	Nu   。.!?！？r%   r&   r	   r"   r$   r#   r   )r(   r)   r,   r   r   r+   joinstrip)r<   r.   mergedcur_text_parts	cur_startcur_endttxts           r   merge_sentences_from_tokensrF   Q   s   T.1122F "NIG # #eeFB 	s88q==S$666!!#&&&$i(;(;E!%%PUW^J_J_abDcDcmomtmt  vD  nE  nE  nK  nK  nM  nM  N  N  O  O  ONIGgI%%,,c""""i 3 3E'1<M<MWYW^W^_mWnWnWtWtWvWvwwxxxMr;   )__doc__r   typingr   pydubr   strintr   dictr:   rF    r;   r   <module>rN      s                 	S 	 	c 	 	 	 	4T
 4s 4tTXz 4 4 4 4nT
 tDz      r;   