o
    WliN                     @   s2   d Z ddlZddlZddlmZ G dd dZdS )zAudio playback using ffplay.    N)Optionalc                   @   sV   e Zd ZdZdeddfddZdd Zd	d
 ZdeddfddZ	e
defddZdS )AudioPlayerPlays raw audio using ffplay.sample_ratereturnNc                 C   s   || _ d| _dS )zInitializes audio player.N)r   _proc)selfr    r	   N/home/kim/smarthome/.venv/lib/python3.10/site-packages/piper/audio_playback.py__init__   s   
zAudioPlayer.__init__c                 C   s8   t jddddddt| jddd	g
t jt jt jd
| _| S )z,Starts ffplay subprocess and returns player.ffplayz-nodispz	-autoexitz-fZs16lez-sample_ratez
-ch_layoutmono-)stdinstdoutstderr)
subprocessPopenstrr   PIPEDEVNULLr   )r   r	   r	   r
   	__enter__   s"   zAudioPlayer.__enter__c                 C   sH   | j r"z| j jr| j j  W n	 ty   Y nw | j jdd dS dS )zStops ffplay subprocess.   )timeoutN)r   r   close	Exceptionwait)r   exc_typeexc_valexc_tbr	   r	   r
   __exit__%   s   zAudioPlayer.__exit__audio_bytesc                 C   s<   | j dusJ | j jdusJ | j j| | j j  dS )r   N)r   r   writeflush)r   r!   r	   r	   r
   play/   s   zAudioPlayer.playc                   C   s   t tdS )z$Returns true if ffplay is available.r   )boolshutilwhichr	   r	   r	   r
   is_available7   s   zAudioPlayer.is_available)__name__
__module____qualname____doc__intr   r   r    bytesr$   staticmethodr%   r(   r	   r	   r	   r
   r      s    
r   )r,   r&   r   typingr   r   r	   r	   r	   r
   <module>   s
    