
    zvh                        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y)    )annotationsN)AnyUnionCallableAsyncGeneratorcast)TYPE_CHECKING   )_legacy_response)numpysounddevice)StreamedBinaryAPIResponseAsyncStreamedBinaryAPIResponsei]  c                  J    e Zd Z	 d	 ddZ	 	 	 	 ddZ	 	 	 	 d	dZ	 	 	 	 d
dZy)LocalAudioPlayerNc                J    d| _         t        j                  | _        || _        y )N   )channelsnpfloat32dtypeshould_stop)selfr   s     Y/var/www/html/luna/venv/lib/python3.12/site-packages/openai/helpers/local_audio_player.py__init__zLocalAudioPlayer.__init__   s     ZZ
&    c                  K   g }t        |t        j                        st        |t              r,|j	                  d      D ]  }|s|j                  |        n0|j	                  d      2 3 d {   }|s|j                  |       dj                  |      }t        j                  |t        j                        j                  t        j                        dz  }|j                  dd      }|S 7 6 nw)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_bufferz(LocalAudioPlayer._tts_response_to_buffer   s      !h 0 K KLPZ/Q
 ",,,= )MM%()  (22d2C ) )eMM%(hhv&==BHH=DDRZZPSZZ##B*)Cs7   AC9&C9-C71C52C75C99A<C95C77C9c                4   K   t        |t        j                        r|j                  t        j                  k(  rZ j                  t        j
                  k(  r=|j                  t        j
                        dz  j                  d j                        n[|j                  t        j
                  k(  rt        d|      n1t        d|j                          j                  |       d {   t        j                         t        j                         d	 	 	 	 	 	 	 	 d	 fd}t        j                   t"        |j                  j$                  d         }|5  j'                          d {    d d d        y 7 7 # 1 sw Y   y xY ww)
Nr   r    npt.NDArray[np.float32]zUnsupported dtype: r   c                   t              z
  }|dk(  s%t        
j                        r;
j                         r+	j                  j                         t
        j                  ||k\  r|n|}|z    | d | d| |d  |z  y )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   callbackz'LocalAudioPlayer.play.<locals>.callbackN   s     M*S0IA~(4+;+;"<AQAQAS))%))4oo%*3{*B;	L%23|9K%LGM\"%&GLM"<Cr   r   )
sampleraterC   r   r   r9   r1   r:   intr;   r   r<   r   )r!   r   ndarrayr   r'   r   r(   r)   r   r   
ValueErrorr/   asyncioget_event_loopEventr7   OutputStreamSAMPLE_RATEshapewait)r   inputrC   streamr?   r@   rA   rB   s   `   @@@@r   playzLocalAudioPlayer.play5   s[     eRZZ({{bhh&4::+C!&bjj!9G!C L LRQUQ^Q^ _

* $%> F #6u{{m!DEE"&">">u"EEM%%'	 ,	 	  	  		  	 " "%%"((+	
  	**,	 	; F< 	 	s=   C(F/F0A6F&F:F
;F?
F
FFFc                   	K   t        j                         	t        j                         t        j                  d      	fd}	 	 	 	 	 	 	 	 d	 fd}d dt        j
                   |             }t        j                  t         j                   j                  |      5  j                          d {    d d d        | d {    y 7 # 1 sw Y   xY w7 w)N2   )maxsizec                    K   2 3 d {   } |  n&j                  d j                  |        d {    3j                  d j                  d        d {    y 7 T7 -6 ,7 wN)run_in_executorput)bufferbuffer_queuebuffer_streamrB   s    r   buffer_producerz5LocalAudioPlayer.play_stream.<locals>.buffer_producerp   sv      - K 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                \   d}||k  r	t        	      k\  r	 j                  d      		+j                  
j                         t        j
                  d	j                  t        j                  k(  rYj                  t        j                  k(  r<	j                  t        j                        dz  j                  dj                        	t        	      z
  }t        ||z
  |      }	|z    | |||z    |z  ||z  }||k  ry y # t        j                  $ r d| |d  Y y w xY w)Nr   g?)timeoutr   r    )r3   getr5   r6   r7   r8   r   r   r'   r   r(   r)   r   queueEmptymin)r9   r:   r;   r<   frames_writtenremaining_framesframes_to_write
buffer_posr[   current_bufferr@   rB   r   s          r   rC   z.LocalAudioPlayer.play_stream.<locals>.callbackw   s<    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 "%kN&BDT"UM[o!=N/)IJ o-
/1- !;. !;; 340s   B7D D+*D+r   )rD   r   r   rC   rE   )rI   rJ   rK   ra   Queuecreate_taskr7   rL   rM   r   r   rO   )
r   r\   r]   rC   producer_taskrg   r[   rh   r@   rB   s
   ``   @@@@@r   play_streamzLocalAudioPlayer.play_streamh   s      %%'afalaluwax	E	2,	2	2 	2 		2 	2B 
++O,=>__"]]**	
 	 **,	  	 	 	s<   B(C-1CCC
C-C+C-CC($C-rW   )r   zUnion[Callable[[], bool], None])r*   zmUnion[_legacy_response.HttpxBinaryResponseContent, AsyncStreamedBinaryAPIResponse, StreamedBinaryAPIResponse]returnr1   )rP   zUnion[npt.NDArray[np.int16], npt.NDArray[np.float32], _legacy_response.HttpxBinaryResponseContent, AsyncStreamedBinaryAPIResponse, StreamedBinaryAPIResponse]rm   None)r\   zQAsyncGenerator[Union[npt.NDArray[np.float32], npt.NDArray[np.int16], None], None]rm   rn   )__name__
__module____qualname__r   r/   rR   rl    r   r   r   r      s^     8<'4'
 
!21
1 
1f=h= 
=r   r   )
__future__r   ra   rI   typingr   r   r   r   r   typing_extensionsr	    r   _extrasr   r   r   r7   	_responser   r   numpy.typingnptrM   r   rr   r   r   <module>r{      s7    "   = = +  4 QR Rr   