o
    *iI                     @   s`   d dl Z d dlmZmZmZmZ d dlZd dlmZ ddl	m
Z
 ddlmZ G dd de
ZdS )	    N)BinaryIOOptionalTupleUnion)CodecConfig   )Backend)AudioMetaDatac                   @   sR  e Zd Zeddeeeejf de	e de
defddZe				
	
		ddeeeejf de
de
dedede	e de
deeje
f fddZe	
					ddeeeejf dejde
dede	e de	e de	e
 de
de	eeee
f  ddfddZedeeeejf de	e defddZedeeeejf de	e defddZdS ) 
SoXBackend   uriformatbuffer_sizereturnc                 C   s@   t | dr
tddtjj| |}|rt| S td|  d)Nreadz=SoX backend does not support reading from file-like objects. z`Please use an alternative backend that does support reading from file-like objects, e.g. FFmpeg.zFailed to fetch metadata for .)hasattr
ValueErrortorchops
torchaudioZsox_io_get_infor	   RuntimeError)r   r   r   sinfo r   f/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torchaudio/_backend/sox.pyinfo   s   
zSoXBackend.infor   TNframe_offset
num_frames	normalizechannels_firstc                 C   sD   t | dr
tddtjj| |||||}|s td|  d|S )Nr   z=SoX backend does not support loading from file-like objects. z`Please use an alternative backend that does support loading from file-like objects, e.g. FFmpeg.zFailed to load audio from r   )r   r   r   r   r   Zsox_io_load_audio_filer   )r   r   r   r   r    r   r   retr   r   r   load   s   

zSoXBackend.loadsrcsample_rateencodingbits_per_samplecompressionc	           	   
   C   s\   t |tttd fstddt| t| drtddtjj	| ||||||| d S )NzISoX backend expects non-`None` value for argument `compression` to be of z2type `float` or `int`, but received value of type writez;SoX backend does not support writing to file-like objects. z^Please use an alternative backend that does support writing to file-like objects, e.g. FFmpeg.)

isinstancefloatinttyper   r   r   r   r   Zsox_io_save_audio_file)	r   r#   r$   r    r   r%   r&   r   r'   r   r   r   save1   s(   
zSoXBackend.savec                 C      t | d S )Nr   r   r   r   r   r   r   
can_decodeS      zSoXBackend.can_decodec                 C   r.   )Nr(   r/   r0   r   r   r   
can_encodeX   r2   zSoXBackend.can_encode)r   )r   r   TTNr   )TNNNr   N)__name__
__module____qualname__staticmethodr   r   strosPathLiker   r+   r	   r   boolr   r   ZTensorr"   r   r*   r-   r1   r3   r   r   r   r   r
      sv    .	
!(,r
   )r9   typingr   r   r   r   r   Ztorchaudio.ior   backendr   commonr	   r
   r   r   r   r   <module>   s    