U
    =jg                      @   sf   d dl Z d dlmZmZmZmZ d dlZd dlZddlm	Z	 ddl
mZ ej ZG dd de	ZdS )    N)BinaryIOOptionalTupleUnion   )Backend)AudioMetaDatac                   @   s  e Zd Zedeeeejf e	e e
edddZedeeeejf e
e
eee	e e
eeje
f d	d
dZedeeeejf eje
ee	e e	e e	e
 e
e	eejjee
f  dd
ddZeeeeejf e	e edddZeeeeejf e	e edddZdS )
SoXBackend   )uriformatbuffer_sizereturnc                 C   sB   t | drtddn(t| |}|r.t| S td|  dd S )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sox_extget_infor   RuntimeError)r   r   r   sinfo r   ;/tmp/pip-unpacked-wheel-4jtxrwwc/torchaudio/_backend/sox.pyinfo   s    
zSoXBackend.infor   TN)r   frame_offset
num_frames	normalizechannels_firstr   r   r   c                 C   sF   t | drtddn,t| |||||}|s>td|  d|S 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   Zload_audio_filer   )r   r   r   r   r   r   r   retr   r   r   load   s    

zSoXBackend.load)
r   srcsample_rater   r   encodingbits_per_sampler   compressionr   c	           	   
   C   sZ   t |tttd fs(tddt| t| dr>tddnt| ||||||| 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   Zsave_audio_file)	r   r!   r"   r   r   r#   r$   r   r%   r   r   r   save1   s(    
zSoXBackend.save)r   r   r   c                 C   s   t | d S )Nr   r   r   r   r   r   r   
can_decodeS   s    zSoXBackend.can_decodec                 C   s   t | d S )Nr&   r,   r-   r   r   r   
can_encodeX   s    zSoXBackend.can_encode)r
   )r   r   TTNr
   )TNNNr
   N)__name__
__module____qualname__staticmethodr   r   strosPathLiker   r)   r   r   boolr   torchZTensorr    
torchaudioioZCodecConfigr(   r+   r.   r/   r   r   r   r   r	      sT   (            !$r	   )r5   typingr   r   r   r   r8   r9   backendr   commonr   Z
_extensionZlazy_import_sox_extr   r	   r   r   r   r   <module>   s   
