
    ujh,                        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 eeee j                  f   Z	 d'dedee   ded	efd
Z	 	 	 d(dededed	ee   fdZ	 	 d)dddee   ded	ej*                  f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Zdej0                  d	efdZd	efdZdeded	efdZd Zdee   dee   dee   dee   fdZ	 	 	 	 	 	 d+dedej*                  d ededee   dee   dee   ded!ee	j<                  j>                     d	dfd"Z ded	efd#Z!deded	efd$Z" G d% d&e      Z#y),    N)BinaryIOOptionalTupleUnion   )Backend)AudioMetaDatasrcformatbuffer_sizereturnc                    t         j                  j                  | |d |      }|j                  |j                        }|j
                  dk(  rt        |      }|j                  d      }n|j
                  }t        t        |j                        ||j                  |j                  |j                  j                               S )Nr   r   )
torchaudioioStreamReaderget_src_stream_infodefault_audio_stream
num_frames_load_audiosizer	   intsample_ratenum_channelsbits_per_samplecodecupper)r
   r   r   ssinfowaveformr   s          X/var/www/html/dev/engine/venv/lib/python3.12/site-packages/torchaudio/_backend/ffmpeg.py
info_audior!      s    
 	""3kBA!!!"8"89E1q>]]1%
%%
E     frame_offsetr   convertc                 F   | dk  rt        dj                  |             |dk(  s|dk  rt        dj                  |            | dk(  r|dk(  r|sy d}| dk(  r	|dk(  r|r|S |dkD  rdj                  | | |z         }ndj                  |       }|s|S dj                  ||      S )	Nr   z>Invalid argument: frame_offset must be non-negative. Found: {}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$   aformatatrims        r    _get_load_filterr*   $   s    
 a[bbcopqqQ*r/ahhistuu qZ2-g(GqZ2-'A~5<<\<ZdKde'..|<>>%))r"   r   ztorchaudio.io.StreamReaderfilterchannels_firstc                     | j                  dd|       | j                          | j                         d   }|t        d      |j                  }|r|j
                  S |S )Nr&   )filter_descr   zFailed to decode audio.)add_audio_streamprocess_all_packets
pop_chunksr'   _elemT)r   r+   r,   chunkr   s        r    r   r   ?   s`    
 r262LLN1E}455{{H'8::5X5r"   c                    t        | d      r|dk(  rd}t        j                  j                  | |d |      }t	        |j                  |j                        j                        }t        |||      }	t        ||	|      }
|
|fS )Nreadvorbisogg)
hasattrr   r   r   r   r   r   r   r*   r   )r
   r#   r   r$   r,   r   r   r   r   r+   r   s              r    
load_audior:   M   s|     sF( 2""3kBAa++A,B,BCOOPKlJ@F1fn5H[  r"   dtypec                 B   t         j                  dt         j                  dt         j                  dt         j                  dt         j
                  dt         j                  di}|j                  |       }|)t        d|  dt        |j                                d	      |S )
Nu8s16s32s64fltdblzNo format found for dtype z; dtype must be one of .)torchuint8int16int32int64float32float64get
ValueErrorlistkeys)r;   dtype_to_formatr   s      r    _get_sample_formatrP   _   s    TUUUuuO   'F~5eW<STXYhYmYmYoTpSqqrsttMr"   c                  ,    t         j                  dk(  ryy)Nlittlelebe)sys	byteorder r"   r    _native_endiannessrX   n   s    
}} r"   encodingr   c                    |dvrt        d| d      t               }| s|sd| S |dk(  ryd| | S | dk(  r|sd	}|dk(  rt        d
      d| | S | dk(  r|dv ryt        d      | dk(  r|sd}|dv rd| | S t        d      | dk(  r|dv ryt        d      | dk(  r|dv ryt        d      t        d|  d      )N>   N             @   zInvalid bits_per_sample z for WAV encoding.pcm_s16r[   pcm_u8pcm_sPCM_Sr\   z4For WAV signed PCM, 8-bit encoding is not supported.PCM_U)Nr[   z7For WAV unsigned PCM, only 8-bit encoding is supported.PCM_Fr^   )r^   r_   pcm_fz?For WAV float PCM, only 32- and 64-bit encodings are supported.ULAW	pcm_mulawz5For WAV PCM mu-law, only 8-bit encoding is supported.ALAWpcm_alawz4For WAV PCM A-law, only 8-bit encoding is supported.zWAV encoding z is not supported.)rL   rX   )rY   r   
endiannesss      r    _get_encoder_for_wavrl   u   s8   773O3DDVWXX#%JZL))a'
|447 OaSTT'
|447i'RSS7 Oh&?+J<88Z[[6i'PQQ6i'OPP
}XJ.@A
BBr"   c                 <    | | dk(  ry| dk(  ryt        d|  d      )Nr\   r>   r]   r?   z8FLAC only supports bits_per_sample values of 16 and 24 (z specified).)rL   )bpss    r    _get_flac_sample_fmtro      s1    
{cRi
by
OPSuT`a
bbr"   extrn   c                       fd} |d      s |d      rd}t        ||      }d }n; |d      rd}d}d }n,}d }d } |d      rt        |      } |d      rt        |      }|||fS )Nc                 (    | k(  xs d u xr | k(  S NrW   )specrp   r   s    r    _typez_parse_save_args.<locals>._type   s!     ~A&D."@SD[Ar"   wavambr7   r8   flac)rl   ro   )rp   r   rY   rn   ru   muxerencoder
sample_fmts   ``      r    _parse_save_argsr|      s    .B
 U|uU| &x5
	x 

=-c2J<-c2J':%%r"   urir   compressionc	                 @   d }	t        | d      r|\t        d      t        j                  j	                  |       } t        |       j                  d      dd  x}
r|
d   j                         }	t        |	|||      \  }}}|r|j                  }t        j                  j                  | ||      }|j                  ||j                  d      t        |j                         |||       |j#                         5  |j%                  d|       d d d        y # 1 sw Y   y xY w)	Nwritez0'format' is required when saving to file object.rC   r   r&   )r   r   )r   r   rz   encoder_formatcodec_configr   )r9   r'   ospathnormpathstrsplitlowerr|   r3   r   r   StreamWriterr/   r   rP   r;   openwrite_audio_chunk)r}   r
   r   r,   r   rY   r   r   r~   rp   tokensry   rz   enc_fmtr   s                  r    
save_audior      s    CsG>QRRggs#X^^C(,,6,*""$C.sFHoVE7Gee""3u+"NAXXb\!#)),    
 $	As#$ $ $s   8DDc                 <    dD ]
  }|| v s|c S  | dk(  ry| dk(  ry| S )N)rc   rd   re   	PCM_MULAWrg   PCM_ALAWri   rW   )rY   dsts     r    _map_encodingr     s:    * (?J ;	Z	Or"   c                 t    t        j                  d|       x}rt        |j                  d            S | dv ry|S )NzPCM_\w(\d+)\w*r   )r   r   r[   )researchr   group)rY   r   ms      r    _get_bits_per_sampler     s=    II'22q21771:	.	.r"   c                      e Zd Zeddedee   dedefd       Z	e	 	 	 	 	 	 ddededed	e
d
e
dee   dedeej                  ef   fd       Ze	 	 	 	 	 	 dde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       Zededee   de
fd       Zededee   de
fd       Zy)FFmpegBackendr}   r   r   r   c                     t        | ||      }t        |j                  |j                        |_        t	        |j                        |_        |S rs   )r!   r   rY   r   r   )r}   r   r   metadatas       r    infozFFmpegBackend.info  sC    c6;7#78I8I8KcKc#d )(*;*;<r"   Nr#   r   	normalizer,   c                 "    t        | |||||      S rs   )r:   )r}   r#   r   r   r,   r   r   s          r    loadzFFmpegBackend.load  s     #|ZNTZ[[r"   r
   r   rY   r   r~   c	                     t        |t        j                  j                  t	        d       f      st        ddt	        |             t        | ||||||||	       y )NzLFFmpeg backend expects non-`None` value for argument `compression` to be of z=type `torchaudio.io.CodecConfig`, but received value of type )
isinstancer   r   CodecConfigtyperL   r   )	r}   r
   r   r,   r   rY   r   r   r~   s	            r    savezFFmpegBackend.save+  sh     +
(A(A4:'NO^OPTU`PaObc  	
	
r"   c                      yNTrW   r}   r   s     r    
can_decodezFFmpegBackend.can_decodeH      r"   c                      yr   rW   r   s     r    
can_encodezFFmpegBackend.can_encodeL  r   r"      r   r&   TTNr   TNNNr   N)__name__
__module____qualname__staticmethod	InputTyper   r   r   r	   r   boolr   rD   Tensorr   r   r   r   r   floatr   r   r   rW   r"   r    r   r     s   ) Xc]  P]    # $	\	\	\ 	\ 		\
 	\ 	\ 	\ 
u||S 	!	\ 	\ 
  $ $"&)-NR

\\
 
 	

 
 3-
 "#
 
 eJMM$=$=uc$IJK
 

 
8 	 8C= T   	 8C= T  r"   r   r   )r   r&   Tr   r   r   )$r   r   rU   typingr   r   r   r   rD   r   backendr   commonr	   r   PathLiker   r   r!   r   r*   r   r   r:   r;   rP   rX   rl   ro   r|   r   r   r   r   r   r   rW   r"   r    <module>r      s   	 	 
 3 3    !(C,-	 	SM  	, *** * c]	*: !6#6SM6 6 \\	6   !	!! ! 	!
 ! SM! ! 5<<!$ekk c C #C3 #C #C #CLc8&	#8&SM8& sm8& 
#	8&~   "%)7;#$	#$	#$ #$ 	#$
 SM#$ sm#$ c]#$ #$ *--334#$ 
#$LC C 3   7G 7r"   