o
    *iY1                     @   s  d dl Z d dlZ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 ddlmZ e	jjdur>e	jjjZneZdedee d	efd
dZ	d:dee ded	efddZ	 		d;dededed	ee fddZ		d<dedee ded	ejfddZ	 				d=dedededededee d	eejef fddZ	 					d>dedededededee ded	eejef fddZd ejd	efd!d"Zd	efd#d$Z d%ed&ed	efd'd(Z!d)d* Z"d+ee dee d%ee d,ee fd-d.Z#						d?d/eeee j$f dejd0ededee d%ee d&ee ded1ee	j%j& d	dfd2d3Z'd%ed	efd4d5Z(d%ed&ed	efd6d7Z)G d8d9 d9eZ*dS )@    N)BinaryIOOptionalTupleUnion)StreamWriter   )Backend)AudioMetaDatasrcformatreturnc                 C   s8   t jj| |}t|d |d |d |d |d  S )Nr   r            )torchops
torchaudioZcompat_infor	   upper)r
   r   i r   i/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torchaudio/_backend/ffmpeg.py
info_audio   s   (r      buffer_sizec                 C   sd   t | |d |}| }||}|jdkrt|}|d}n|j}tt|j||j	|j
|j S )Nr   r   )StreamReaderFileObjfind_best_audio_streamget_src_stream_info
num_frames_load_audio_fileobjsizer	   intsample_ratenum_channelsbits_per_sampleZ
codec_namer   )r
   r   r   sr   sinfowaveformr   r   r   r   info_audio_fileobj   s   

r'   Tframe_offsetr   convertc                 C   s   | dk rt d| |dks|dk rt d|| dkr&|dkr&|s&d S d}| dkr4|dkr4|r4|S |dkrAd| | | }nd| }|sJ|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_filter1   s   
r,   r$   filterchannels_firstc                 C   sT   |   }| |dd|d d  |   |  d }|d u r td|j}|r(|jS |S )Nr(   r   zFailed to decode audio.)r   add_audio_streamZprocess_all_packetsZ
pop_chunksr+   framesT)r$   r-   r.   r   chunkr&   r   r   r   r   L   s   r   c                 C   s    t |||}tjj| |||S N)r,   r   r   r   Zcompat_load)r
   r)   r   r*   r.   r   r-   r   r   r   
load_audio[   s   r4   c                 C   sR   |dkrdn|}t | |d |}t|| j}	t|||}
t||
|}||	fS )Nvorbisogg)r   r    r   r   r!   r,   r   )r
   r)   r   r*   r.   r   r   Zdemuxerr$   r!   r-   r&   r   r   r   load_audio_fileobjg   s   	r7   dtypec                 C   s\   t jdt jdt jdt jdt jdt jdi}|| }|d u r,td|  dt	|
  d	|S )
Nu8s16s32Zs64ZfltZdblzNo format found for dtype z; dtype must be one of .)r   Zuint8Zint16Zint32Zint64Zfloat32Zfloat64get
ValueErrorlistkeys)r8   Zdtype_to_formatr   r   r   r   _get_sample_formatx   s   
rA   c                   C   s   t jdkrdS dS )Nlittlelebe)sys	byteorderr   r   r   r   _native_endianness   s   
rG   encodingr#   c                 C   s
  |dvrt d| dt }| s%|sd| S |dkrdS d| | S | dkr<|s-d	}|dkr5t d
d| | S | dkrJ|dv rFdS t d| dkra|sRd}|dv r]d| | S t d| dkro|dv rkdS t d| dkr}|dv rydS t dt d|  d)N>       @         N   zInvalid bits_per_sample z for WAV encoding.Zpcm_s16rK   Zpcm_u8Zpcm_sPCM_SrL   z4For WAV signed PCM, 8-bit encoding is not supported.PCM_U)NrK   z7For WAV unsigned PCM, only 8-bit encoding is supported.PCM_FrI   )rI   rJ   Zpcm_fz?For WAV float PCM, only 32- and 64-bit encodings are supported.ULAWZ	pcm_mulawz5For WAV PCM mu-law, only 8-bit encoding is supported.ALAWZpcm_alawz4For WAV PCM A-law, only 8-bit encoding is supported.zWAV encoding z is not supported.)r>   rG   )rH   r#   Z
endiannessr   r   r   _get_encoder_for_wav   sD   
rS   c                 C   s0   | d u s| dkr
dS | dkrdS t d|  d)NrL   r:   rM   r;   z8FLAC only supports bits_per_sample values of 16 and 24 (z specified).)r>   )bpsr   r   r   _get_flac_sample_fmt   s
   rU   extrT   c                    s~    fdd}|ds|drd}t ||}d }n!|dr$d}d}d }n}d }d }|dr2t|}|dr:t|}|||fS )Nc                    s   | kpd u o | kS r3   r   )specrV   r   r   r   _type   s   z_parse_save_args.<locals>._typeZwavZambr5   r6   Zflac)rS   rU   )rV   r   rH   rT   rY   muxerencoderZ
sample_fmtr   rX   r   _parse_save_args   s"   


r\   urir!   compressionc	                 C   s   d }	t | dr|d u rtdntj| } t| ddd   }
r)|
d  }	t|	|||\}}}|r8|j	}t
| ||d}|j||dt|j|||d |  |d| W d    d S 1 sfw   Y  d S )	Nwritez0'format' is required when saving to file object.r<   r   r(   )r   r   )r"   r   r[   Zencoder_formatZcodec_configr   )hasattrr+   ospathnormpathstrsplitlowerr\   r1   r   r/   r   rA   r8   openZwrite_audio_chunk)r]   r
   r!   r.   r   rH   r#   r   r^   rV   tokensrZ   r[   Zenc_fmtr$   r   r   r   
save_audio   s.   

"ri   c                 C   s6   dD ]
}|| v r|  S q| dkrdS | dkrdS | S )N)rN   rO   rP   	PCM_MULAWrQ   PCM_ALAWrR   r   )rH   dstr   r   r   _map_encoding  s   rm   c                 C   s.   t d|  }rt|dS | dv rdS |S )NzPCM_\w(\d+)\w*r   )rk   rj   rK   )researchr    group)rH   r#   mr   r   r   _get_bits_per_sample(  s
   rr   c                   @   sV  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jj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 ) FFmpegBackendr   r]   r   r   r   c                 C   sL   t | drt| ||d}n	ttj| |}t|j|j|_t	|j|_|S )Nread)r   )
r`   r'   r   ra   rb   rc   rr   rH   r#   rm   )r]   r   r   metadatar   r   r   info1  s   
zFFmpegBackend.infor   r(   TNr)   r   	normalizer.   c                 C   s8   t | drt| ||||||S ttj| |||||S )Nrt   )r`   r7   r4   ra   rb   rc   )r]   r)   r   rw   r.   r   r   r   r   r   load;  s   


zFFmpegBackend.loadr
   r!   rH   r#   r^   c	           	   
   C   sF   t |tjjtd fstddt| t| ||||||||	 d S )NzLFFmpeg backend expects non-`None` value for argument `compression` to be of z=type `torchaudio.io.CodecConfig`, but received value of type )
isinstancer   ioCodecConfigtyper>   ri   )	r]   r
   r!   r.   r   rH   r#   r   r^   r   r   r   saveR  s    zFFmpegBackend.savec                 C      dS NTr   r]   r   r   r   r   
can_decodeo     zFFmpegBackend.can_decodec                 C   r~   r   r   r   r   r   r   
can_encodes  r   zFFmpegBackend.can_encoder   r   r(   TTNr   TNNNr   N)__name__
__module____qualname__staticmethodr   r   rd   ra   PathLiker   r    r	   rv   boolr   r   Tensorrx   r   rz   r{   floatr}   r   r   r   r   r   r   rs   0  sv    .		
(,rs   r   )r   r(   Tr   )r   r(   TTNr   r   )+ra   rn   rE   typingr   r   r   r   r   r   Ztorchaudio.ior   backendr   commonr	   
_extensionZ_FFMPEG_EXTr   objectrd   r   r    r'   r   r,   r   r   r4   r7   r8   rA   rG   rS   rU   r\   r   rz   r{   ri   rm   rr   rs   r   r   r   r   <module>   s   





&
?
	

&