
    /j,                        S SK JrJrJrJrJrJrJrJ	r	J
r
  S SKJr  SSKJr  SSKJrJr  SSKJr  SSKr\ " S S	5      5       rS
\S\\R0                  \	4   4S jr Sr " S S\R6                  \R8                     5      rg)   )	EnhancerEnhancerSettingsModelParametersEnhancerModelEnhancerError
StreamInfoCredentialsNativeAudioBufferMutVadSettings)logger    )rtc)DictOptional)	dataclassNc                   D    \ rS rSr% Sr\\   \S'   Sr\\   \S'   S r	Sr
g)r      Nenhancement_levelbypassc                 >    [        U R                  U R                  S9$ )N)r   r   )ModelParametersUniffir   r   selfs    S/app/agent/.venv/lib/python3.13/site-packages/livekit/plugins/ai_coustics/plugin.py
_to_uniffiModelParameters._to_uniffi   s    $"44;;
 	
     )__name__
__module____qualname____firstlineno__r   r   float__annotations__r   r   __static_attributes__r   r   r   r   r      s$    )-x-"FHUO"
r   r   datareturnc                     [         R                  " U [         R                  S9R                  [         R                  SS9S-  nUR
                  R                  n[        U[        U5      S9nX4$ )z
Convert frame.data (int16 memoryview) to NativeAudioBufferMut (f32 pointer).
Returns both the numpy array (to keep it alive) and the NativeAudioBufferMut.
)dtypeT)copyg      @)ptrlen)	np
frombufferint16astypefloat32ctypesr&   r
   r,   )r&   samples	ptr_valuenative_buffers       r   to_native_bufferr6   !   sf     	d"((+222::D2IGS 
 ##I )LM
 !!r   z
lk.aic-vadc            	           \ rS rSrSS.S\S\S\\   SS4S jjr\	S\
4S	 j5       r\R                  S
\
SS4S j5       rS\S\S\4S jrS\S\4S jrS\R"                  S\R"                  4S jrS rSrg)AICousticsAudioEnhancer>   N)model_parametersmodelvad_settingsr:   r'   c                n    Xl         X l        X0l        S U l        S U l        S U l        S U l        SU l        g )NT)_model_vad_settings_model_parameters	_enhancer_info_credentials	_settings_enabled)r   r;   r<   r:   s       r   __init__ AICousticsAudioEnhancer.__init__@   s9     )!1*.(,
0426r   c                     U R                   $ NrE   r   s    r   enabledAICousticsAudioEnhancer.enabledQ   s    }}r   valuec                     Xl         g rI   rJ   )r   rM   s     r   rK   rL   U   s    r   	room_nameparticipant_identitypublication_sidc                    [        SUUSUS9U l        U R                  b&  U R                  R                  U R                  5        g g )N )room_idrO   rP   participant_idtrack_id)r   rB   rA   update_stream_info)r   rO   rP   rQ   s       r   _on_stream_info_updated/AICousticsAudioEnhancer._on_stream_info_updatedY   sF      !5$

 >>%NN--djj9 &r   tokenurlc                    [        XS9U l        U R                  b&  U R                  R                  U R                  5        g g )N)rZ   r[   )r	   rC   rA   update_credentials)r   rZ   r[   s      r   _on_credentials_updated/AICousticsAudioEnhancer._on_credentials_updatedf   s6    'e=>>%NN--d.?.?@ &r   framec                    U R                   (       d  U$ U R                  b  U R                  c  [        R                  " S5        U$ U R
                  bz  U R                  Gb/  U R                  R                  UR                  :w  dH  U R                  R                  UR                  :w  d$  U R                  R                  UR                  :w  a  [        UR                  UR                  UR                  U R                  U R                  U R                  (       a  U R                  R                  5       O	[        SSS9U R                  S9U l         [!        U R                  5      U l        U R
                  R%                  U R                  5        ['        UR(                  5      u  p4 U R
                  R+                  U5      n[,        R.                  " USS5      S	-  R1                  [,        R2                  5      n[4        R6                  " UR9                  5       UR                  UR                  UR                  UR:                  S
9nXWR:                  [<        '   U$ ! ["         a*  n[        R                  " SU5        SU l        Us SnA$ SnAff = f! ["         a#  n[        R                  " SU5        Us SnA$ SnAff = f)z
Processes a single audio frame.

If the frame processor is disabled or processing fails, the original frame is
returned unchanged.
NzMissing configuration)r   r   )sample_ratenum_channelssamples_per_channelcredentialsr;   r:   vadzInit failed: %szProcessing failed: %sg      g      ?g    @)r&   rb   rc   rd   userdata)rK   rC   rB   r   errorrA   rD   rb   rc   rd   r   r>   r@   r   r   r?   r   r   rW   r6   r&   process_with_vadr-   clipr0   r/   r   
AudioFrametobytesrg    FRAME_USERDATA_AIC_VAD_ATTRIBUTE)r   r`   er3   r5   vad_dataprocessed_int16output_frames           r   _process AICousticsAudioEnhancer._processk   s1    ||L$

(:LL01L >>!NN&**e.?.??>>..%2D2DD>>559R9RR .!--"//$)$=$= --kkHLH^H^!7!7!B!B!Ddy  BF  Z^  e_&&DN!)$..!9
 NN--djj9 "2%**!=	~~66}EH 777D#6@HHR~~ ((*))++ % 9 9^^
 CK>?9 ! .2!%  	LL0!4L	s<   I (J 
J'JJJ
KJ<6K<Kc                 .    U R                   b  S U l         g g rI   )rA   r   s    r   _closeAICousticsAudioEnhancer._close   s    >>%!DN &r   )rC   rE   rA   rB   r>   r@   rD   r?   )r   r    r!   r"   r   r   r   r   rF   propertyboolrK   setterstrrX   r^   r   rk   rr   ru   r%   r   r   r   r8   r8   >   s     7;  "	
 #?3 
"    ^^T d  ::7::MP:A A# A
?cnn ? ?B"r   r8   )_ffir   r   r   r   r   r   r   r	   r
   r   logr   livekitr   typingr   r   dataclassesr   numpyr-   
memoryviewtuplendarrayr6   rm   FrameProcessorrk   r8   r   r   r   <module>r      s   
 
 
   ! ! 

 
 
": "%

<P0P*Q ",
 $0  p"c00@ p"r   