
    љi                         S SK r S SKrS SKJrJr  S SKJrJr  S SKr	S SK
JrJr  \ " S S5      5       r\ " S S5      5       r " S	 S
5      rg)    N)	dataclassasdict)DictOptional)VoiceEncoderpreprocess_wavc                   @    \ rS rSr% \\S'   \\   \S'   \\S'   S rSr	g)MainSpeakerGateResult   accepted
confidencemain_lockedc                     [        U 5      $ N)r   )selfs    W/home/james-whalen/.local/lib/python3.13/site-packages/aiavatar/sts/stt/speaker_gate.pyto_dictMainSpeakerGateResult.to_dict   s    d|     N)
__name__
__module____qualname____firstlineno__bool__annotations__r   floatr   __static_attributes__r   r   r   r
   r
      s    Nr   r
   c                   p    \ rS rSr% \\S'   Sr\\R                     \S'   Sr
\\R                     \S'   Srg)SessionState   last_called_tsNprev_embmain_embr   )r   r   r   r   r   r   r#   r   npndarrayr$   r   r   r   r   r    r       s.    %)Hhrzz")%)Hhrzz")r   r    c                   "   \ rS rSr  SS\S\4S jjrS\S\S\S\	4S	 jr
S\S\S\R                  4S
 jrS\S\4S jrS\S\4S jr\S\R                  S\R                  4S j5       r\S\R                  S\R                  S\4S j5       rSrg)MainSpeakerGate   accept_thresholdpair_lock_thresholdc                 p    [        U5      U l        [        U5      U l        [        5       U l        0 U l        g r   )r   r*   r+   r   _enc	_sessions)r   r*   r+   s      r   __init__MainSpeakerGate.__init__   s0    
 !&&6 7#()<#=  N	24r   
session_idaudio_bytessample_ratereturnc                   #    [         R                  " U R                  X#5      I S h  vN n[        R                  " 5       nU R                  R                  U5      nUc  [        US9nX`R                  U'   XVl        UR                  b4  U R                  UR                  U5      nXpR                  :  n[        XSS9$ SnS n	Sn
UR                  c  XFl        [        XU
S9$ U R                  UR                  U5      nXR                  :  aJ  U R                  UR                  U-   S-  5      nXl        S Ul        U R                  X5      n[        SUSS9$ XFl        [        XU
S9$  GN>7f)N)r"   T)r   r   r   Fg       @)asyncio	to_thread
_embed_pcmtimer.   getr    r"   r$   _cosiner*   r
   r#   r+   
_normalize)r   r1   r2   r3   embnowstsimr   r   r   sim_prevmainsim_mains                 r   evaluateMainSpeakerGate.evaluate$   sP    %%doo{PP iik^^
+:S1B)+NN:& ;;",,r{{C0C333H((X\]] 
 ;;K((_jkk <<S1///??BKK#$5#<=DKBK||D.H($8Y]^^ K((_jkkO Qs   %E(E%D>E(c                    [         R                  " U[         R                  S9nUR                  [         R                  5      S-  n[        XBS9nU R                  R                  U5      nUR                  [         R                  SS9$ )zQ
Convert RAW PCM (int16, mono) bytes to float32 waveform, preprocess, and embed.
)dtypeg      @)	source_srFcopy)r%   
frombufferint16astypefloat32r   r-   embed_utterance)r   r2   r3   wav_i16wav_f32wav_procr=   s          r   r8   MainSpeakerGate._embed_pcmO   sd     --288<..,w6!'Aii''1zz"**5z11r   c                 >    U R                   R                  US 5      S L$ r   )r.   pop)r   r1   s     r   delete_sessionMainSpeakerGate.delete_sessionY   s    ~~!!*d34??r   max_age_secondsc                    [         R                   " 5       nU R                  R                  5        VVs/ s H  u  p4X$R                  -
  U:  d  M  UPM     nnnU H  nU R                  R	                  US 5        M!     [        U5      $ s  snnf r   )r9   r.   itemsr"   rU   len)r   rX   r>   sidr?   	to_deletes         r   delete_sessionsMainSpeakerGate.delete_sessions\   sz    iik(,(<(<(> C(>WS////A (>	 CCNNsD) 9~	Cs   BBvc                     U R                  [        R                  SS9n U [        R                  R	                  U 5      S-   -  n U $ )NFrI   g&.>)rM   r%   rN   linalgnorm)r`   s    r   r<   MainSpeakerGate._normalized   s9    HHRZZeH,	biinnQ$&'r   abc                     [         R                  U 5      n [         R                  U5      n[        [        R                  " X5      5      $ r   )r(   r<   r   r%   dot)re   rf   s     r   r;   MainSpeakerGate._cosinej   s5    &&q)&&q)RVVA\""r   )r-   r.   r*   r+   N)g?g
ףp=
?)r   r   r   r   r   r/   strbytesintr
   rD   r%   r&   r8   r   rV   r^   staticmethodr<   r;   r   r   r   r   r(   r(      s     #'%)55 #5)l )l5 )ls )lWl )lV2e 2# 2"** 2@ @ @u   bjj RZZ  
 #2:: #"** # # #r   r(   )r9   r6   dataclassesr   r   typingr   r   numpyr%   resemblyzerr   r   r
   r    r(   r   r   r   <module>rr      sS      ) !  4
   * * *U# U#r   