o
    lWiM                     @   s\   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 deZ	G dd deZ
dS )	    )Callable	AwaitableN   )AudioInterfaceAsyncAudioInterfacec                   @   sb   e Zd ZdZdZdd Zdeegdf fddZd	d
 Z	defddZ
dd Zdd Zdd ZdS )DefaultAudioInterface    c                 C   .   zdd l }W n ty   tdw || _ d S )Nr   z6To use DefaultAudioInterface you must install pyaudio.pyaudioImportErrorselfr    r   x/var/www/html/asistente-voz-ia/venv/lib/python3.10/site-packages/elevenlabs/conversational_ai/default_audio_interface.py__init__      
zDefaultAudioInterface.__init__input_callbackNc              	   C   s   || _ t | _t | _tj| jd| _	| j
 | _| jj| j
jddd| j| jdd| _| jj| j
jddd| jdd| _| j	  d S )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   r   r   r   r      s.   

		zDefaultAudioInterface.startc                 C   s@   | j   | j  | j  | j  | j  | j	  d S N)
r&   setr)   joinr0   stop_streamcloser2   r+   	terminater   r   r   r   stop3   s   




zDefaultAudioInterface.stopaudioc                 C   s   | j | d S r4   r#   putr   r<   r   r   r   r    ;   s   zDefaultAudioInterface.outputc                 C   s*   z		 | j jdd}q tjy   Y d S w )NTF)block)r#   getr!   Emptyr   _r   r   r   	interrupt>   s   zDefaultAudioInterface.interruptc                 C   sP   | j  s&z| jjdd}| j| W n
 tjy   Y nw | j  rd S d S Ng      ?)timeout)r&   is_setr#   rA   r2   writer!   rB   r?   r   r   r   r(   I   s   
z$DefaultAudioInterface._output_threadc                 C   s   | j r|  | d | jjfS r4   )r   r   
paContinue)r   in_dataframe_count	time_infostatusr   r   r   r.   Q   s   
z"DefaultAudioInterface._in_callback)__name__
__module____qualname__r/   r1   r   r   bytesr   r;   r    rE   r(   r.   r   r   r   r   r   	   s    r   c                   @   sf   e Zd ZdZdZdd Zdeeged f fddZ	d	d
 Z
defddZdd Zdd Zdd ZdS )AsyncDefaultAudioInterfacer   r	   c                 C   r
   )Nr   z;To use AsyncDefaultAudioInterface you must install pyaudio.r   r   r   r   r   r   [   r   z#AsyncDefaultAudioInterface.__init__r   Nc              	      s   || _ t | _t | _| j | _| jj	| jj
ddd| j| jdd| _| jj	| jj
ddd| jdd| _t|  | _d S )Nr   r   Tr   r   )r   asyncior"   r#   r%   r&   r   r*   r+   r,   r-   r.   r/   r0   r1   r2   create_task_output_taskoutput_taskr3   r   r   r   r   b   s.   

	
z AsyncDefaultAudioInterface.startc                    sD   | j   | jI d H  | j  | j  | j  | j  d S r4   )	r&   r5   rW   r0   r7   r8   r2   r+   r9   r:   r   r   r   r;      s   



zAsyncDefaultAudioInterface.stopr<   c                    s   | j |I d H  d S r4   r=   r?   r   r   r   r       s   z!AsyncDefaultAudioInterface.outputc              	      s|   z	 z| j  }W n tjy   Y W d S w q ty=   | j  s:z| j  }W n   Y Y d S | j  r#Y d S Y d S w r4   )r#   
get_nowaitrT   
QueueEmptyAttributeErroremptyrC   r   r   r   rE      s"   
z$AsyncDefaultAudioInterface.interruptc                    s^   | j  s-ztj| j ddI d H }| j| W n
 tjy%   Y nw | j  rd S d S rF   )	r&   rH   rT   wait_forr#   rA   r2   rI   TimeoutErrorr?   r   r   r   rV      s   
z'AsyncDefaultAudioInterface._output_taskc                 C   sD   | j rzt }t|  || W n	 ty   Y nw d | jjfS r4   )r   rT   get_event_looprun_coroutine_threadsafeRuntimeErrorr   rJ   )r   rK   rL   rM   rN   loopr   r   r   r.      s   z'AsyncDefaultAudioInterface._in_callback)rO   rP   rQ   r/   r1   r   r   rR   r   r   r;   r    rE   rV   r.   r   r   r   r   rS   W   s    rS   )typingr   r   r!   r$   rT   conversationr   r   r   rS   r   r   r   r   <module>   s    N