
    b6iM                     h    d dl mZmZ d dlZd dlZd dlZddlmZmZ  G d de      Z	 G d de      Z
y)	    )Callable	AwaitableN   )AudioInterfaceAsyncAudioInterfacec                   V    e Zd ZdZdZd Zdeegdf   fdZd Z	defd	Z
d
 Zd Zd Zy)DefaultAudioInterface    c                 L    	 dd l }|| _         y # t        $ r t        d      w xY w)Nr   z6To use DefaultAudioInterface you must install pyaudio.pyaudioImportErrorselfr   s     /root/.openclaw/workspace/visionaryfx/venv/lib/python3.12/site-packages/elevenlabs/conversational_ai/default_audio_interface.py__init__zDefaultAudioInterface.__init__   s3    	X   	XVWW	X    #input_callbackNc           	      X   || _         t        j                         | _        t	        j
                         | _        t	        j                  | j                        | _	        | j                  j                         | _        | j                  j                  | j                  j                  ddd| j                  | j                   d      | _        | j                  j                  | j                  j                  ddd| j$                  d      | _        | j                  j)                          y )N)targetr   >  Tformatchannelsrateinputstream_callbackframes_per_bufferstartr   r   r   outputr   r    )r   queueQueueoutput_queue	threadingEventshould_stopThread_output_threadoutput_threadr   PyAudiopopenpaInt16_in_callbackINPUT_FRAMES_PER_BUFFER	in_streamOUTPUT_FRAMES_PER_BUFFER
out_streamr    r   r   s     r   r    zDefaultAudioInterface.start   s    , 16$??,&--T5H5HI%%'<<'' --":: % 
 &&++<<''";; & 
 	  "    c                 <   | j                   j                          | j                  j                          | j                  j                          | j                  j                          | j                  j                          | j                  j                          y N)
r(   setr+   joinr2   stop_streamcloser4   r-   	terminater   s    r   stopzDefaultAudioInterface.stop3   sf    !""$r6   audioc                 :    | j                   j                  |       y r8   r%   putr   r@   s     r   r"   zDefaultAudioInterface.output;   s    e$r6   c                 r    	 	 | j                   j                  d      }# t        j                  $ r Y y w xY w)NF)block)r%   getr#   Emptyr   _s     r   	interruptzDefaultAudioInterface.interrupt>   s>    
	%%)))6 {{ 		s     66c                    | j                   j                         sT	 | j                  j                  d      }| j                  j                  |       | j                   j                         sSy y # t        j                  $ r Y 2w xY wNg      ?)timeout)r(   is_setr%   rG   r4   writer#   rH   rD   s     r   r*   z$DefaultAudioInterface._output_threadI   sp    ""))+))--d-;%%e, ""))+ ;; s   7A0 0BBc                 l    | j                   r| j                  |       d | j                  j                  fS r8   )r   r   
paContinue)r   in_dataframe_count	time_infostatuss        r   r0   z"DefaultAudioInterface._in_callbackQ   s.    (dll--..r6   )__name__
__module____qualname__r1   r3   r   r   bytesr    r?   r"   rK   r*   r0    r6   r   r	   r	   	   sJ    "##HeWd]$; #>%E %	/r6   r	   c                   \    e Zd ZdZdZd Zdeeged   f   fdZ	d Z
defd	Zd
 Zd Zd Zy)AsyncDefaultAudioInterfacer
   r   c                 L    	 dd l }|| _         y # t        $ r t        d      w xY w)Nr   z;To use AsyncDefaultAudioInterface you must install pyaudio.r   r   s     r   r   z#AsyncDefaultAudioInterface.__init__[   s3    	]   	][\\	]r   r   Nc           	      2  K   || _         t        j                         | _        t        j                         | _        | j                  j                         | _        | j                  j                  | j                  j                  ddd| j                  | j                  d      | _        | j                  j                  | j                  j                  ddd| j                  d      | _        t        j                   | j#                               | _        y w)Nr   r   Tr   r!   )r   asyncior$   r%   r'   r(   r   r,   r-   r.   r/   r0   r1   r2   r3   r4   create_task_output_taskoutput_taskr5   s     r   r    z AsyncDefaultAudioInterface.startb   s     , 3:--/"==?%%'<<'' --":: % 
 &&++<<''";; & 
 #..t/@/@/BCs   DDc                 <  K   | j                   j                          | j                   d {    | j                  j	                          | j                  j                          | j                  j                          | j                  j                          y 7 mwr8   )	r(   r9   rc   r2   r;   r<   r4   r-   r=   r>   s    r   r?   zAsyncDefaultAudioInterface.stop   sl     ""$	 	s   *BBA.Br@   c                 V   K   | j                   j                  |       d {    y 7 wr8   rB   rD   s     r   r"   z!AsyncDefaultAudioInterface.output   s      ##E***s   )')c                 L  K   	 	 	 | j                   j                         }# t        j                  $ r Y y w xY w# t        $ r^ | j                   j                         sA	 | j                   j                         }n#  Y Y y xY w| j                   j                         s?Y y Y y w xY wwr8   )r%   
get_nowaitr`   
QueueEmptyAttributeErroremptyrI   s     r   rK   z$AsyncDefaultAudioInterface.interrupt   s     	))446A  ))  	''--/))446A	 ''--//	sa   B$: ! : 7: B$7: #B!A98B!9A>;B!<B$>B!B$ B!!B$c                 T  K   | j                   j                         so	 t        j                  | j                  j                         d       d {   }| j                  j                  |       | j                   j                         sny y 7 <# t        j                  $ r Y 4w xY wwrM   )	r(   rO   r`   wait_forr%   rG   r4   rP   TimeoutErrorrD   s     r   rb   z'AsyncDefaultAudioInterface._output_task   s     ""))+%..t/@/@/D/D/FPTUU%%e, ""))+U'' s@   B(2B BB 0B(B(B B%"B($B%%B(c                     | j                   r:	 t        j                         }t        j                  | j                  |      |       d | j
                  j                  fS # t        $ r Y #w xY wr8   )r   r`   get_event_looprun_coroutine_threadsafeRuntimeErrorr   rR   )r   rS   rT   rU   rV   loops         r   r0   z'AsyncDefaultAudioInterface._in_callback   sd    --/001D1DW1MtT dll--..   s   9A 	A+*A+)rW   rX   rY   r1   r3   r   r   rZ   r   r    r?   r"   rK   rb   r0   r[   r6   r   r]   r]   W   sQ    "#D(E7IdO3K*L D>+% + 	/r6   r]   )typingr   r   r#   r&   r`   conversationr   r   r	   r]   r[   r6   r   <module>ru      s2    &    =K/N K/\V/!4 V/r6   