
    h                        S SK Jr  S SKrS SKrS SK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Jr  \(       a  S SKJr  S	r " S
 S5      rg)    )annotationsN)AnyUnionCallableAsyncGeneratorcast)TYPE_CHECKING   )_legacy_response)numpysounddevice)StreamedBinaryAPIResponseAsyncStreamedBinaryAPIResponsei]  c                  \    \ rS rSr S S	S jjr    S
S jr    SS jr    SS jrSrg)LocalAudioPlayer   Nc                H    SU l         [        R                  U l        Xl        g )N   )channelsnpfloat32dtypeshould_stop)selfr   s     S/var/www/html/env/lib/python3.13/site-packages/openai/helpers/local_audio_player.py__init__LocalAudioPlayer.__init__   s     ZZ
&    c                  #    / n[        U[        R                  5      (       d  [        U[        5      (       a1  UR	                  SS9 H  nU(       d  M  UR                  U5        M     O4UR	                  SS9  S h  vN nU(       d  M  UR                  U5        M%  SR                  U5      n[        R                  " U[        R                  S9R                  [        R                  5      S-  nUR                  SS5      nU$  N
 Nl7f)Ni   )
chunk_sizer   )r       @r   )
isinstancer   HttpxBinaryResponseContentr   
iter_bytesappendjoinr   
frombufferint16astyper   reshape)r   responsechunkschunkaudio_bytesaudio_nps         r   _tts_response_to_buffer(LocalAudioPlayer._tts_response_to_buffer   s      !h 0 K KLLPZ/Q
 Q
 ",,,=5MM%( >  (22d2C )e5MM%(hhv&==BHH=DDRZZPSZZ##B*)Cs7   AD
%D
9D=D>DD
A;D
DD
c                R  ^ ^^^^#    [        U[        R                  5      (       a  UR                  [        R                  :X  a[  T R                  [        R
                  :X  a=  UR                  [        R
                  5      S-  R                  ST R                  5      mO\UR                  [        R
                  :X  a  [        SU5      mO1[        SUR                   35      eT R                  U5      I S h  vN m[        R                  " 5       m[        R                  " 5       mSm        S	UUUUU 4S jjn[        R                   " ["        UTR                  TR$                  S   S9nU   TR'                  5       I S h  vN   S S S 5        g  N N! , (       d  f       g = f7f)
Nr!   r"   npt.NDArray[np.float32]zUnsupported dtype: r   c                  > [        T5      T-
  nUS:X  d/  [        T
R                  5      (       a@  T
R                  5       (       a+  T	R                  TR                  5        [
        R                  eXA:  a  UOUnTTTU-    U S U& SXS & TU-  mg )Nr   )lencallabler   call_soon_threadsafesetsdCallbackStop)outdataframe_count
_time_info_status	remaindervalid_framesaudio_contenteventidxloopr   s         r   callback'LocalAudioPlayer.play.<locals>.callbackN   s     M*S0IA~(4+;+;"<"<AQAQASAS))%))4oo%*3*B;	L%23|9K%LGM\"%&GM"<Cr   r   )
sampleraterF   r   r   r<   r4   r=   intr>   r   r?   r   )r#   r   ndarrayr   r)   r   r*   r+   r   r   
ValueErrorr1   asyncioget_event_loopEventr:   OutputStreamSAMPLE_RATEshapewait)r   inputrF   streamrB   rC   rD   rE   s   `   @@@@r   playLocalAudioPlayer.play5   sP     eRZZ(({{bhh&4::+C!&bjj!9G!C L LRQUQ^Q^ _

* $%> F #6u{{m!DEE"&">">u"EEM%%'	 ,	 	  	  		  	 " "%%"((+	
 **, V; F<  Vs=   C0F'7F8A8F'0FFF	
F'F
F$ F'c                  ^ ^^^^^^	#    [         R                  " 5       m	[         R                  " 5       m[        R                  " SS9mUUU	4S jn        SUUUUU	U 4S jjnS mSm[         R
                  " U" 5       5      n[        R                  " [        T R                  T R                  US9   TR                  5       I S h  vN   S S S 5        UI S h  vN   g  N! , (       d  f       N= f N7f)N2   )maxsizec                    >#    T  S h  vN n U c    O'TR                  S TR                  U 5      I S h  vN   M5  TR                  S TR                  S 5      I S h  vN   g  NV N.
 N, N7fN)run_in_executorput)bufferbuffer_queuebuffer_streamrE   s    r   buffer_producer5LocalAudioPlayer.play_stream.<locals>.buffer_producerp   sl      - Kf>**41A1A6JJJ&&t\-=-=tDDD	K K !. EsG   A)A%A!A%&A)A#&A)A'A)!A%#A)%A)'A)c                Z  > SnXA:  Ga  T	b  T[        T	5      :  a   TR                  SS9m	T	c+  TR                  T
R                  5        [        R
                  eSmT	R                  [        R                  :X  aZ  TR                  [        R                  :X  a<  T	R                  [        R                  5      S-  R                  STR                  5      m	[        T	5      T-
  n[        X-
  U5      nT	TTU-    XXF-   & TU-  mXF-  nXA:  a  GM  g g ! [        R                   a    SXS &  g f = f)Nr   g?)timeoutr!   r"   )r6   getr8   r9   r:   r;   r   r   r)   r   r*   r+   r   queueEmptymin)r<   r=   r>   r?   frames_writtenremaining_framesframes_to_write
buffer_posr`   current_bufferrC   rE   r   s          r   rF   .LocalAudioPlayer.play_stream.<locals>.callbackw   s1    N .!)Z3~;N-N)5)9)9#)9)F)1 55eii@"$//1%&
)//288;

bjj@X.<.C.CBJJ.ORY.Y-b-bcegkgtgt-uN $'~#6#C "%k&BDT"UM[o!=N)IJ o-
1- !.. !;; 340s   B7D D*)D*r   )rH   r   r   rF   rI   )rM   rN   rO   rg   Queuecreate_taskr:   rP   rQ   r   r   rS   )
r   ra   rb   rF   producer_taskrm   r`   rn   rC   rE   s
   ``   @@@@@r   play_streamLocalAudioPlayer.play_streamh   s      %%'afalaluwax	E	2,	2	2 	2 		2 	2B 
++O,=>__"]]**	
 **,
  
 
 	s<   B*C43C!CC!C4C2C4C!!
C/+C4)r   r   r   r\   )r   zUnion[Callable[[], bool], None])r,   zmUnion[_legacy_response.HttpxBinaryResponseContent, AsyncStreamedBinaryAPIResponse, StreamedBinaryAPIResponse]returnr4   )rT   zUnion[npt.NDArray[np.int16], npt.NDArray[np.float32], _legacy_response.HttpxBinaryResponseContent, AsyncStreamedBinaryAPIResponse, StreamedBinaryAPIResponse]ru   None)ra   zQAsyncGenerator[Union[npt.NDArray[np.float32], npt.NDArray[np.int16], None], None]ru   rv   )	__name__
__module____qualname____firstlineno__r   r1   rV   rs   __static_attributes__ r   r   r   r      s^     8<'4'
 
!21
1 
1f=h= 
=r   r   )
__future__r   rg   rM   typingr   r   r   r   r   typing_extensionsr	    r   _extrasr   r   r   r:   	_responser   r   numpy.typingnptrQ   r   r|   r   r   <module>r      s7    "   = = +  4 QR Rr   