
    :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y)u   音频与时间戳辅助工具。

职责概览：
- 将音频文件按秒切分为临时 wav 切片。
- 把标点注入 token 级时间戳序列。
- 将 token 级时间戳按句末标点合并为句子级时间戳。
    N)List)AudioSegment	file_pathchunk_secondsreturnc                 `   t        j                  |       }t        d|      dz  }g }t        dt	        |      |      D ]b  }||||z    }t        j                  dd      5 }|j                  |j                  d       |j                  |j                         d d d        d |S # 1 sw Y   pxY w)	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           /app/gzzm/utils/audio_utils.pysplit_audio_to_chunksr      s    ""9-E1m$t+HFq#e*h/ 01((fENN388EN2MM#((# FE 0
 M FEs   9B$$B-	segments	full_textc                    |s| S t        t        d            }g }d}d}d}t        |      }||k  r||   }|j                         r|dz  }!||v r/|j	                  t        |d      t        |d      |d       |dz  }T|t        |       k  r| |   }	|	j                  dd      }
|
r|j                  |
|      }n|}|d	k(  r.|j	                  |	       |	j                  d
|      }|dz  }|dz  }n||k  rI||   }|j                         s)|j	                  t        |d      t        |d      |d       |dz  }||k  rI|j	                  |	       |	j                  d
|      }|dz  }|t        dt        |
            z   }n>|j                         s)|j	                  t        |d      t        |d      |d       |dz  }||k  rt        |t        |             D ]  }|j	                  | |           |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:II	AHIA
a%q\::<FA##uXq'9%RSBT^`abFAs8}$9%C,JNN:q1Bw  %775(3Q	Q!e#A,C;;=!((513EeT\^_N`jm)noFA	 !e
   %775(3Q	As://::<  51+=eHVWFXbd!efFAK a%N 9c(m,!% -     tokensc           
      x   t        t        d            }g }g }d }d }| D ]  }|j                  dd      }|st        |      dk(  rt||v rp|j	                  |       |V|j	                  t        |d      t        |j                  d|      d      dj                  |      j                         d       g }d }d }||j                  d      }|j                  d      }|j	                  |        |H|rF|j	                  t        |d      t        |d      dj                  |      j                         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   sR   T.12F "NIGeeFBs8q=S$66!!#&$i(;E!%%PUW^J_abDcmomtmt  vD  nE  nK  nK  nM  N  ONIGgI%%,c"! $ i 3E'1<MWYW^W^_mWnWtWtWvwxMr;   )__doc__r   typingr   pydubr   strintr   dictr:   rF    r;   r   <module>rN      sr      	S 	 	c 	4T
 4s 4tTXz 4nT
 tDz r;   