
    U th                        d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ ddlmZ ddlmZmZ ddlmZmZ erd dlmZ d	Z G d
 d          ZdS )    )annotationsN)AnyUnionCallableAsyncGeneratorcast)TYPE_CHECKING   )_legacy_response)numpysounddevice)StreamedBinaryAPIResponseAsyncStreamedBinaryAPIResponsei]  c                  2    e Zd Z	 dddZdd	ZddZddZdS )LocalAudioPlayerNshould_stopUnion[Callable[[], bool], None]c                D    d| _         t          j        | _        || _        d S )N   )channelsnpfloat32dtyper   )selfr   s     u/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/openai/helpers/local_audio_player.py__init__zLocalAudioPlayer.__init__   s"     Z
&    responsemUnion[_legacy_response.HttpxBinaryResponseContent, AsyncStreamedBinaryAPIResponse, StreamedBinaryAPIResponse]returnnpt.NDArray[np.float32]c                  K   g }t          |t          j                  st          |t                    r1|                    d          D ]}|r|                    |           n6|                    d          2 3 d {V }|r|                    |           6 d                    |          }t          j        |t          j	                  
                    t          j                  dz  }|                    dd          }|S )Ni   )
chunk_sizer   )r       @r   )
isinstancer   HttpxBinaryResponseContentr   
iter_bytesappendjoinr   
frombufferint16astyper   reshape)r   r   chunkschunkaudio_bytesaudio_nps         r   _tts_response_to_bufferz(LocalAudioPlayer._tts_response_to_buffer   s4      !h 0 KLL 		)PZ/Q
 Q
 		) ",,,== ) ) )MM%((()  (22d2CC ) ) ) ) ) ) )e )MM%(((  D hhv&&=BH===DDRZPPSZZ##B**s   ;BinputUnion[npt.NDArray[np.int16], npt.NDArray[np.float32], _legacy_response.HttpxBinaryResponseContent, AsyncStreamedBinaryAPIResponse, StreamedBinaryAPIResponse]Nonec                   K   t          |t          j                  r|j        t          j        k    rQ j        t          j        k    r<|                    t          j                  dz                      d j                  nX|j        t          j        k    rt          d|          n2t          d|j                                        |           d {V t          j                    t          j                    dd fd}t          j        t"          |j        j        d                   }|5                                   d {V  d d d            d S # 1 swxY w Y   d S )Nr$   r%   r!   zUnsupported dtype: r   outdataframe_countint
_time_infor   _statusc                $   t                    z
  }|dk    s(t          
j                  r:
                                r&	                    j                   t
          j        ||k    r|n|}|z            | d |<   d| |d <   |z  d S )Nr   )lencallabler   call_soon_threadsafesetsdCallbackStop)r8   r9   r;   r<   	remaindervalid_framesaudio_contenteventidxloopr   s         r   callbackz'LocalAudioPlayer.play.<locals>.callbackN   s     M**S0IA~~(4+;"<"<~AQAQASAS~))%)444o%*3{*B*B;;	L%23|9K3K%LGM\M"%&GLMM"<CCCr   r   )
sampleraterJ   r   r   r8   r!   r9   r:   r;   r   r<   r   )r&   r   ndarrayr   r,   r   r-   r.   r   r   
ValueErrorr3   asyncioget_event_loopEventrB   OutputStreamSAMPLE_RATEshapewait)r   r4   rJ   streamrF   rG   rH   rI   s   `   @@@@r   playzLocalAudioPlayer.play5   s      eRZ(( 	F{bh&&4:+C+C!&bj!9!9G!C L LRQUQ^ _ _
** $%> F F !Du{!D!DEEE"&">">u"E"EEEEEEEM%''	  	  	  	  	  	  	  	  	  	 " "%"(+	
 
 
  	 	**,,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   E))E-0E-buffer_streamQAsyncGenerator[Union[npt.NDArray[np.float32], npt.NDArray[np.int16], None], None]c                   	K   t          j                    	t          j                    t          j        d          	fd}d	 fd}d dt          j         |                      }t          j        t           j	         j
        |          5                                   d {V  d d d            n# 1 swxY w Y   | d {V  d S )N2   )maxsizec                    K   2 3 d {V } |  n$                     d j        |            d {V  .6                      d j        d            d {V  d S N)run_in_executorput)bufferbuffer_queuerX   rI   s    r   buffer_producerz5LocalAudioPlayer.play_stream.<locals>.buffer_producerp   s       - K K K K K K Kf>E**41A6JJJJJJJJJJ !. &&t\-=tDDDDDDDDDDDs   4r8   r!   r9   r:   r;   r   r<   c                f   d}||k     r&	t          	          k    r	                     d          		&                    
j                   t          j        d	j        t          j        k    rPj        t          j	        k    r;	
                    t          j	                  dz                      dj                  	n# t          j        $ r d| |d <   Y d S w xY wt          	          z
  }t          ||z
  |          }	|z            | |||z   <   |z  ||z  }||k     $d S d S )Nr   g?)timeoutr$   r%   )r>   getr@   rA   rB   rC   r   r   r,   r   r-   r.   r   queueEmptymin)r8   r9   r;   r<   frames_writtenremaining_framesframes_to_write
buffer_posrb   current_bufferrG   rI   r   s          r   rJ   z.LocalAudioPlayer.play_stream.<locals>.callbackw   sr    N ;..!)Z3~;N;N-N-N)5)9)9#)9)F)F)1 55ei@@@"$/1%&
)/28;;
bj@X@X.<.C.CBJ.O.ORY.Y-b-bcegkgt-u-uN ;   340 $'~#6#6#C "%kN&BDT"U"UM[o!==N/)IIJ o-
/1- !;......s   B%C C! C!r   )rK   r   r   rJ   rL   )rO   rP   rQ   rg   Queuecreate_taskrB   rR   rS   r   r   rU   )
r   rX   rc   rJ   producer_taskrm   rb   rn   rG   rI   s
   ``   @@@@@r   play_streamzLocalAudioPlayer.play_streamh   s      %''afaluwaxaxax	E 	E 	E 	E 	E 	E 	E	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2B 
+OO,=,=>>_"]*	
 
 
 	 	 **,,	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   CC	C	r^   )r   r   )r   r   r    r!   )r4   r5   r    r6   )rX   rY   r    r6   )__name__
__module____qualname__r   r3   rW   rr    r   r   r   r      so         8<' ' ' ' '   21 1 1 1f= = = = = =r   r   )
__future__r   rg   rO   typingr   r   r   r   r   typing_extensionsr	    r   _extrasr   r   r   rB   	_responser   r   numpy.typingnptrS   r   rv   r   r   <module>r      s   " " " " " "   = = = = = = = = = = = = = = + + + + + +       4 4 4 4 4 4 4 4 Q Q Q Q Q Q Q Q R R R R R R R R R Rr   