U
    %‰di  ã                
   @   s
  d dl mZmZmZ d dlZd dlZd dlmZ ejjj	dœdd„Z
eee edœdd	„Zee ed
œdd„Zdeeeee dœdd„Zdejjj	eeeeeejef dœdd„Zdeeeeeee eejef dœdd„Zdeeeeeee eejef dœdd„ZdS )é    )ÚDictÚOptionalÚTupleN)ÚAudioMetaData)Úsc                 C   s>   |   ¡ }|  |¡}tt|d ƒ|d |d |d |d  ¡ ƒS )Né   é   é   é   é   )Úfind_best_audio_streamÚget_src_stream_infor   ÚintÚupper)r   ÚiÚsinfo© r   ú9/tmp/pip-unpacked-wheel-lbdmvq91/torchaudio/io/_compat.pyÚ_info_audio	   s    


ûr   )ÚsrcÚformatÚreturnc                 C   s   t jj | |d ¡}t|ƒS ©N)ÚtorchÚclassesÚ
torchaudioÚffmpeg_StreamReaderr   ©r   r   r   r   r   r   Ú
info_audio   s    r   )r   r   c                 C   s   t j | |d d¡}t|ƒS ©Ni   )r   Ú_torchaudio_ffmpegÚStreamReaderFileObjr   r   r   r   r   Úinfo_audio_fileobj   s    r"   éÿÿÿÿT)Úframe_offsetÚ
num_framesÚconvertr   c                 C   s    | dk rt d | ¡ƒ‚|dks&|dk r4t d |¡ƒ‚| dkrL|dkrL|sLd S d}| dkrh|dkrh|rh|S |dkr‚d | | | ¡}n
d | ¡}|s”|S d ||¡S )	Nr   z>Invalid argument: frame_offset must be non-negative. Found: {}r#   zDInvalid argument: num_frames must be -1 or greater than 0. Found: {}zaformat=sample_fmts=fltpz#atrim=start_sample={}:end_sample={}zatrim=start_sample={}z{},{})ÚRuntimeErrorr   )r$   r%   r&   ZaformatZatrimr   r   r   Ú_get_load_filter'   s    
r(   )r   r$   r%   r&   Úchannels_firstr   c           
   	   C   s€   |   ¡ }|  |¡}t|d ƒ}i }|  |ddt|||ƒd |¡ |  ¡  |  ¡ d }	|	d krbtdƒ‚|	d k	snt‚|rx|	j	}	|	|fS )Nr   r#   r   zFailed to decode audio.)
r   r   r   Zadd_audio_streamr(   Zprocess_all_packetsZ
pop_chunksr'   ÚAssertionErrorÚT)
r   r$   r%   r&   r)   r   r   Zsample_rateÚoptionZwaveformr   r   r   Ú_load_audioC   s    
r-   )r   r$   r%   r&   r)   r   r   c                 C   s"   t jj | |d ¡}t|||||ƒS r   )r   r   r   r   r-   ©r   r$   r%   r&   r)   r   r   r   r   r   Ú
load_audioY   s    r/   c                 C   s"   t j | |d d¡}t|||||ƒS r   )r   r    r!   r-   r.   r   r   r   Úload_audio_fileobje   s    r0   )r   r#   T)r   r#   TT)r   r#   TTN)r   r#   TTN)Útypingr   r   r   r   r   Ztorchaudio.backend.commonr   r   r   r   Ústrr   r"   r   Úboolr(   ZTensorr-   r/   r0   r   r   r   r   Ú<module>   sz   ÿý
ý	   ýü    ûú     úù     úù