
    Ai<"                         d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ d	d
lmZmZ  e ed                    ZdededefdZdededede
dedefdZdededee         fdZdS )u   统一转写流水线服务。

职责概览：
- 对单个音频 chunk 执行 ASR、说话人匹配和时间偏移叠加。
- 提供 HTTP 文件路径下的分段读取能力，供 /transcribe 顺序消费。
    N)DictList)AudioSegment   )split_audio_to_chunks)SpeakerRegistry)transcribe_audio_file   )audio_segment_to_pcm_bytesidentify_speaker_id_from_pcmu   。.!?！？segmentchunk_secondsreturnc                 |   t          j        dd          5 }|                     |j        d           |j        }d d d            n# 1 swxY w Y   	 t	          ||d          	 dd l}|                    |           S # t          $ r Y S w xY w# 	 dd l}|                    |           w # t          $ r Y w w xY wxY w)NFz.wav)deletesuffixwav)format)fail_on_emptyr   )tempfileNamedTemporaryFileexportnamer	   osremove	Exception)r   r   tmppathr   s        (src\gzzm\services\transcribe_pipeline.pytranscribe_segmentr       s"   		$E&	A	A	A Ssx...x              $T=NNN	IIIIIdOOOO 	 	 	D			IIIIIdOOOO 	 	 	D	sS   $AAAB %A??
BBB;B+*B;+
B85B;7B88B;
offset_secspeaker_registryspeaker_devicec                   )* t          t          | dd          pd          }t          t          | dd          pd          }t          | |          }|                    d          }|                    d          pd                                }	|                    d          pg }
|                    d	          pg }g }t          t          d
                    }|s9t          |           }t          |||||          \  }}|
D ]}	 t          |                    dd          pd          }t          |                    d|          p|          }n# t          $ r d}d}Y nw xY w|                    dd          pd}|                    d          }|t          |o|d         t          v           }|                    t          ||z   d          t          ||z   d          |t          |          ||t          |d          ndd           n2|
D ].}	 t          |                    dd          pd          *t          |                    d*          p*          )n# t          $ r d*d)Y nw xY w|                    dd          pd}|                    d          }|t          |o|d         t          v           })*fd|D             }|st          dt          t          *dz                                }t!          t#          |           t          t          )dz                                }| ||         }t          |          }t          |||||          \  }}|                    t          |*z   d          t          |)z   d          |t          |          ||t          |d          ndd           g }g }|D ]g} |                     d          pdpd}!|                    |            t#          |!          dk    r$|!|v s	|!t          v r|                    |           g }h|r|                    |           t%          |          D ]\  }"}#t          |#d                             dd          pd          }$t          |#d                             d|$          p|$          }%d                    d |#D                                                       }&|"t#          |          dz
  k    }'t          |'o|          }(t          dt          t          |$dz                                }t!          t#          |           t          t          |%dz                                }||k    r3t          d|dz
            }t!          t#          |           |dz             }| ||         }t          |          }t          |||||          \  }}|                    t          ||$z   d          t          ||%z   d          |&t          |(          ||t          |d          ndd           0||	|t          t#          |                     dz  dS )z6Run ASR -> chunk-level speaker matching for one chunk.
frame_ratei>  channelsr
   languagetext time_stampstime_stamps_tokensu   ，,、;；:：-—)	pcm_bytessample_rater&   registrydevicestart        endsentence_endN   )r0   r2   r(   r3   rlsimc                     g | ]\}t          |                    d d          pd          dz
  k    r.t          |                    dd          pd          dz   k    Z|]S )r0   r1   gMbP?r2   )floatget).0ts_ends_starts     r   
<listcomp>z*process_chunk_pipeline.<locals>.<listcomp>p   sz     " " "w,,344$FF!%%s++2s33ut|CC  DCC    r   i  c                 >    g | ]}|                     d d          pdS )r(   r)   )r:   )r;   xs     r   r?   z*process_chunk_pipeline.<locals>.<listcomp>   s+    !G!G!Ga!%%"3"3"9r!G!G!Gr@      (   g     @@)r'   r(   r*   duration_sec)intgetattrr    r:   stripsetlistr   r   r9   r   bool	_SENT_ENDappendroundmaxminlen	enumeratejoin)+r   r!   r   r"   r#   r-   r&   transcribedr'   r(   chunk_tstoken_tsenrichedINTERNAL_SPLIT_PUNCTSchunk_pcm_byteschunk_rl	chunk_simsentence
sent_startsent_end	sent_textr3   sentence_end_flagtokens_in_sentencestart_msend_mssub_segsub_pcmrl_subsim_subgroups	cur_groupr<   txtgigrpg_startg_endg_textis_lastgrp_sentence_endr=   r>   s+                                            @@r   process_chunk_pipelinerr   %   s!    gg|U;;DuEEK77J227a88H$Wm<<Kz**HOOF##)r0022D}--3H 344:HH  %: ; ;<< |4W==:%#%!
 
 
) ! 	 	H"8<<#=#=#DEE
 eZ!@!@!NJOO    
 !VR006BI#<<77L##I$L)B-92LMMOO":
#:A>> h!6::%$($6$6"2;2G5A...T 	 	 	 		0 ! Z	 Z	HWc : : AcBBhll5'::EgFF    !VR006BI (^ < < ($()Qy}	7Q$R$R!" " " " "!" " " & q#eGdN&;&;"<"<==S\\3uUT\/B/B+C+CDD!(6/24W==">% +%-)# # # !&zG';Q!?!?$Z%%7;; )(,->(?(?$4;4GuWa000T 	 	 	  (*F$&I' # #uuV}}*1r  ###s88q==c-B&B&BcYFVFVMM),,, "I )i((($V,, ! !CA

7C 8 8 ?C@@c"gkk%99DWEE!G!G3!G!G!GHHNNPPVq1#'(E4E#F#F q#eGdN&;&;"<"<==S\\3uUT\/B/B+C+CDDX%%"1hm44H Wx"}==F!(6/24W==">% +%-)# # # !&zG';Q!?!?$Z%%7;; &(,-=(>(>$4;4GuWa000T 	 	 	 	1!H c'll++f4	  s&   A
EE('E(A
I**I;:I;	file_pathc                 N   t          | |          }g }	 |D ])}|                    t          j        |                     *	 |D ],}	 dd l}|                    |           # t          $ r Y )w xY wn4# |D ],}	 dd l}|                    |           # t          $ r Y )w xY ww xY w|S )Nr   )r   rM   r   	from_filer   r   r   )rs   r   chunksoutpr   s         r   split_file_to_segmentsry      s   "9m<<F C
 	2 	2AJJ|-a001111	2  	 	A					!   	 	 	A					!   	 JsA   ,A1 A  
A-,A-1B"7BB"
B	B"B	B")__doc__r   typingr   r   pydubr   utils.audio_utilsr   utils.speaker_idr   
transcriber	   speaker_matcherr   r   rI   rJ   rL   rF   r    r9   strrr   ry    r@   r   <module>r      sc                   5 5 5 5 5 5 . . . . . . . . . . . . U U U U U U U UC^$$%%	 S T     ___ _ &	_
 _ 
_ _ _ _Dc # $|BT      r@   