
    wi,                        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j        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#dS )/    N)BinaryIOOptionalTupleUnion   )Backend)AudioMetaData   srcformatbuffer_sizereturnc                 t   t           j                            | |d |          }|                    |j                  }|j        dk    r%t          |          }|                    d          }n|j        }t          t          |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          j/root/.openclaw/workspace/chatterbox_venv_py311/lib/python3.11/site-packages/torchaudio/_backend/ffmpeg.py
info_audior"      s    
 	""3kBBA!!!"899E1q>>]]1%%

%
E      Tframe_offsetr   convertc                    | 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    r
|dk    r|r|S |dk    rd                    | | |z             }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&   aformatatrims        r!   _get_load_filterr+   $   s    
 a[bbcoppqqqQ*r//ahhisttuuu qZ2--g-t(GqZ2--'-A~~5<<\<ZdKdee'..|<< >>%)))r#   r   ztorchaudio.io.StreamReaderfilterchannels_firstc                     |                      dd|           |                                  |                                 d         }|t          d          |j        }|r|j        n|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   ?   so    
 r26222LLNN1E}4555{H'58::X5r#   c                    t          | d          r|dk    rd}t          j                            | |d |          }t	          |                    |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 2""3kBBAa++A,BCCOPPKlJ@@F1fn55H[  r#   dtypec                 2   t           j        dt           j        dt           j        dt           j        dt           j        dt           j        di}|                    |           }|5t          d|  dt          |
                                           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_formatrQ   _   s    TUUUuuO   ''F~sessTXYhYmYmYoYoTpTpssstttMr#   c                  *    t           j        dk    rdS dS )Nlittlelebe)sys	byteorder r#   r!   _native_endiannessrY   n   s    
}  ttr#   encodingr   c                    |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    rt          d
          d| | S | dk    r|dv rdS t          d          | dk    r|sd}|dv rd| | S t          d          | dk    r|dv rdS t          d          | dk    r|dv rdS 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.)rM   rY   )rZ   r   
endiannesss      r!   _get_encoder_for_wavrm   u   s   777WOWWWXXX#%%J 5 	*)Z)))a844
4447 	! OaSTTT44
4447i''8RSSS7 	! Oh&&8?8J888Z[[[6i'';PQQQ6i'':OPPP
AXAAA
B
BBr#   c                 L    | | dk    rdS | dk    rdS t          d|  d          )Nr]   r?   r^   r@   z8FLAC only supports bits_per_sample values of 16 and 24 (z specified).)rM   )bpss    r!   _get_flac_sample_fmtrp      s=    
{cRiiu
byyu
aPSaaa
b
bbr#   extro   c                 
     fd} |d          s |d          rd}t          ||          }d }nL |d          rd}d}d }n:}d }d } |d          rt          |          } |d          rt          |          }|||fS )Nc                 $    | k    p	d u o| k    S NrX   )specrq   r   s    r!   _typez_parse_save_args.<locals>._type   s!     ~A&D."@SD[Ar#   wavambr8   r9   flac)rm   rp   )rq   r   rZ   ro   rv   muxerencoder
sample_fmts   ``      r!   _parse_save_argsr}      s    .B B B B B B
 uU|| 3uuU|| 3 &x55

	x 3 


5== 	3-c22J5<< 	3-c22J':%%r#   urir   compressionc	                    d }	t          | d          r|t          d          net          j                            |           } t          |                               d          dd          x}
r|
d                                         }	t          |	|||          \  }}}|r|j	        }t          j                            | ||          }|                    ||                    d          t          |j                  |||           |                                5  |                    d|           d d d            d S # 1 swxY w Y   d S )	Nwritez0'format' is required when saving to file object.rD   r   r$   )r   r   )r   r   r{   encoder_formatcodec_configr   )r:   r(   ospathnormpathstrsplitlowerr}   r4   r   r   StreamWriterr0   r   rQ   r<   openwrite_audio_chunk)r~   r   r   r-   r   rZ   r   r   r   rq   tokensrz   r{   enc_fmtr   s                  r!   
save_audior      s    CsG %>QRRR  gs##XX^^C((,,6 	%*""$$C.sFHoVVE7G e""3u+"NNAXXb\\!#),,      
 $ $	As###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   EE
Ec                 @    dD ]
}|| v r|c S | dk    rdS | dk    rdS | S )N)rd   re   rf   	PCM_MULAWrh   PCM_ALAWrj   rX   )rZ   dsts     r!   _map_encodingr     sM    *  (??JJJ ;v	Z		vOr#   c                     t          j        d|           x}r"t          |                    d                    S | dv rdS |S )NzPCM_\w(\d+)\w*r   )r   r   r\   )researchr   group)rZ   r   ms      r!   _get_bits_per_sampler     sI    I'222q 1771::	.	.	.q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d
S )FFmpegBackendr
   r~   r   r   r   c                     t          | ||          }t          |j        |j                  |_        t	          |j                  |_        |S rt   )r"   r   rZ   r   r   )r~   r   r   metadatas       r!   infozFFmpegBackend.info  sC    c6;77#78I8Kc#d#d )(*;<<r#   r   r$   TNr%   r   	normalizer-   c                 *    t          | |||||          S rt   )r;   )r~   r%   r   r   r-   r   r   s          r!   loadzFFmpegBackend.load  s     #|ZNTZ[[[r#   r   r   rZ   r   r   c	                     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   r   CodecConfigtyperM   r   )	r~   r   r   r-   r   rZ   r   r   r   s	            r!   savezFFmpegBackend.save+  s     +
(A4::'NOO 	^cPTU`PaPacc   	
	
 
	
 
	
 
	
 
	
r#   c                     dS NTrX   r~   r   s     r!   
can_decodezFFmpegBackend.can_decodeH      tr#   c                     dS r   rX   r   s     r!   
can_encodezFFmpegBackend.can_encodeL  r   r#   r
   r   r$   TTNr
   TNNNr
   N)__name__
__module____qualname__staticmethod	InputTyper   r   r   r	   r   boolr   rE   Tensorr   r   r   r   r   floatr   r   r   rX   r#   r!   r   r     s)        ) Xc]  P]    \  # $	\ 	\	\	\ 	\ 		\
 	\ 	\ 	\ 
u|S 	!	\ 	\ 	\ \	\ 
  $ $"&)-NR
 

\
 
 	

 
 3-
 "#
 
 eJM$=uc$IJK
 

 
 
 \
8 	 8C= T    \ 	 8C= T    \  r#   r   r   )r   r$   Tr   r   r   )$r   r   rV   typingr   r   r   r   rE   r   backendr   commonr	   r   PathLiker   r   r"   r   r+   r   r   r;   r<   rQ   rY   rm   rp   r}   r   r   r   r   r   r   rX   r#   r!   <module>r      s   				 				 



 3 3 3 3 3 3 3 3 3 3 3 3            ! ! ! ! ! !(C,-	  	SM  	   , * *** * c]	* * * *: !6 6#6SM6 6 \	6 6 6 6   ! !	!! ! 	!
 ! SM! ! 5<! ! ! !$ek c    C    #C3 #C #C #C #C #C #CLc c c8&	#8&SM8& sm8& 
#	8& 8& 8& 8&~   "%)7;#$ #$	#$	#$ #$ 	#$
 SM#$ sm#$ c]#$ #$ *-34#$ 
#$ #$ #$ #$LC C    3      7 7 7 7 7G 7 7 7 7 7r#   