
    ]i%                         S SK r S SKrS SKJr  S SKrS SKJr  S SKrS SK	r
SSKJrJr  SSKJrJrJr  SSKJr  SSKJrJrJr  S	 rS
 rSS jr\S:X  a  \" 5         gg)    N)Path)fatal   )apply_modelBagOfModels)	AudioFileconvert_audio
save_audio)HTDemucs)get_model_from_argsadd_model_flagsModelLoadingErrorc                    0 nS n [        U 5      R                  SUUS9nUc.   [
        R                  " [        U 5      5      u  pE[        XEX!5      nUcO  [        SU  S35        UR                  5        H  u  px[        S	U S
U 35        M     [        R                  " S5        U$ ! [         a    SUS'    N[        R                   a    SUS'    Nf = f! [         a  nUR                  S   US'    S nANS nAff = f)Nr   )streams
sampleratechannelszFFmpeg is not installed.ffmpegzFFmpeg could not read the file.
torchaudiozCould not load file z+. Maybe it is not a supported file format? zWhen trying to load using z, got the following error: r   )r   readFileNotFoundError
subprocessCalledProcessErrortaloadstrr	   RuntimeErrorargsprintitemssysexit)	trackaudio_channelsr   errorswavsrerrbackenderrors	            L/mnt/rpi/tmp/demucs-venv-sys/lib/python3.13/site-packages/demucs/separate.py
load_trackr+      s   F
C=##!# $ % {	Eggc%j)GC  DC
{$UG ,: : 	;$llnNG.wi7RSXRYZ[ -J'  65x(( =<x=  	/#&88A;F< 	/s.   B% !C %C6CC
C:C55C:c                     [         R                  " SSS9n U R                  SS[        / SS9  [	        U 5        U R                  SS	S
S9  U R                  SS[        [        S5      SS9  U R                  SSSS9  U R                  SS[
        R                  R                  5       (       a  SOSSS9  U R                  SS[        SS9  U R                  SS[        S S9  U R                  5       nUR                  S!S"S#S$S%S&9  UR                  S'[        S(S)9  U R                  S*S+S,S-S.9  U R                  5       nUR                  S/S
S0S19  UR                  S2S
S3S19  U R                  S4S5S5S6/S7S89  U R                  5       nUR                  S9S
S:S19  UR                  S;S
S<S19  U R                  S=S>[        S?S9  U R                  S@[        SASB5      [        SASCSD9  U R                  SESFSG[        SHS9  U $ )INzdemucs.separatez)Separate the sources for the given tracks)descriptiontracks+zPath to tracks)nargstypedefaulthelpz-vz	--verbose
store_true)actionz-oz--out	separatedzVFolder where to put extracted tracks. A subfolder with the model name will be created.)r1   r2   r3   z
--filenamez{track}/{stem}.{ext}zSet the name of output file. 
Use "{track}", "{trackext}", "{stem}", "{ext}" to use variables of track name without extension, track extension, stem name and default output file extension. 
Default is "{track}/{stem}.{ext}".)r2   r3   z-dz--devicecudacpuz4Device to use, default is cuda if available else cpuz--shiftsr   zNumber of random shifts for equivariant stabilization.Increase separation time but improves quality for Demucs. 10 was used in the original paper.)r2   r1   r3   z	--overlapg      ?zOverlap between the splits.z
--no-splitstore_falsesplitTzDDoesn't split audio in chunks. This can use large amounts of memory.)r5   destr2   r3   z	--segmentzISet split size of each chunk. This can help save memory of graphic card. )r1   r3   z--two-stemsstemSTEMz/Only separate audio into {STEM} and no_{STEM}. )r;   metavarr3   z--int24zSave wav output as 24 bits wav.)r5   r3   z	--float32z'Save wav output as float32 (2x bigger).z--clip-moderescaleclampziStrategy for avoiding clipping: rescaling entire signal if necessary  (rescale) or hard clipping (clamp).)r2   choicesr3   z--flacz Convert the output wavs to flac.z--mp3zConvert the output wavs to mp3.z--mp3-bitratei@  zBitrate of converted mp3.z--mp3-preset      zOEncoder preset of MP3, 2 for highest quality, 7 for fastest speed. Default is 2)rA   r1   r2   r3   z-jz--jobsr   ziNumber of jobs. This can increase memory usage but will be much faster when multiple cores are available.)argparseArgumentParseradd_argumentr   r   thr7   is_availableintfloatadd_mutually_exclusive_grouprange)parsersplit_groupgroupformat_groups       r*   
get_parserrQ   5   s   $$%61\^F
$IYZF
k,?
! $[ 1?	  @  6=  > "*,''*>*>*@*@eS  U 
 ! 1  2  $":  < 557K\$1")%)#E	  F [s#K  L #VN  P //1E	y=  ?	{<E  G
y9gBVQ  R 668Lh|#E  Ggl#D  F
 # 8  : a#q6  7 h ! Q  R M    c                 f   [        5       nUR                  U 5      n [        U5      n[        S5      n[        W[        5      (       a  [        UR                  5      nO![        U[        5      (       a  UR                  nUR                  b  UR                  U:  a  [	        SU 35        [        U[        5      (       a"  [        S[        UR                  5       S35        UR                  5         UR!                  5         UR"                  bV  UR"                  UR$                  ;  a<  [	        SR'                  UR"                  SR)                  UR$                  5      S95        UR*                  UR,                  -  nUR/                  S	S	S
9  [        SUR1                  5        35        UR2                   GH  nUR5                  5       (       d  [        SU S3[6        R8                  S9  M7  [        SU 35        [;        XsR<                  UR>                  5      nURA                  S5      n	XRA                  5       -  nXRC                  5       -  n[E        X8S    URF                  URH                  URJ                  URL                  S	URN                  UR                  S9	S   n
XRC                  5       -  n
XRA                  5       -  n
URP                  (       a  SnOURR                  (       a  SnOSnUR>                  URT                  URV                  URX                  URZ                  UR\                  (       a  SOSS.nUR"                  c  [_        XR$                  5       H  u  pXbR`                  R'                  UR,                  Rc                  SS5      S   UR,                  Rc                  SS5      S   XS9-  nURd                  R/                  S	S	S
9  [g        U[i        U5      40 UD6  M     GM=  [k        U
5      n
XbR`                  R'                  UR,                  Rc                  SS5      S   UR,                  Rc                  SS5      S   UR"                  US9-  nURd                  R/                  S	S	S
9  [g        U
Rm                  UR$                  Ro                  UR"                  5      5      [i        U5      40 UD6  [p        Rr                  " U
S   5      nU
 H  nUU-  nM
     XbR`                  R'                  UR,                  Rc                  SS5      S   UR,                  Rc                  SS5      S   SUR"                  -   US9-  nURd                  R/                  S	S	S
9  [g        U[i        U5      40 UD6  GM     g ! [         a#  n[	        UR
                  S   5         S nAGNS nAff = f)Nr   infzbCannot use a Transformer model with a longer segment than it was trained for. Maximum segment is: zSelected model is a bag of z8 models. You will see that many progress bars per track.zMerror: stem "{stem}" is not in selected model. STEM must be one of {sources}.z, )r<   sourcesT)parentsexist_okz#Separated tracks will be stored in zFile zp does not exist. If the path contains spaces, please try again after surrounding the entire path with quotes "".)filezSeparating track )deviceshiftsr:   overlapprogressnum_workerssegmentmp3flacr%         )r   bitratepresetclipas_floatbits_per_sample.r   )r"   trackextr<   extno_):rQ   
parse_argsr   r   r   r   rJ   
isinstancer   r^   r   max_allowed_segmentr   lenmodelsr8   evalr<   rU   formatjoinoutnamemkdirresolver.   existsr    stderrr+   r#   r   meanstdr   rY   rZ   r:   r[   jobsr_   r`   mp3_bitrate
mp3_preset	clip_modefloat32int24zipfilenamersplitparentr
   r   listpopindexrG   
zeros_like)optsrM   r   modelr)   ro   ru   r"   r%   refrU   rk   kwargssourcerv   r<   
other_stemis                     r*   mainr      s   \FT"D#D)  ,%""#EMM2	E;	'	'#77||DLL3F$F >>Q=RT 	U %%%+C,=+> ?@ @ 	A 
IIK	JJLyy%--!?[bbYY		%--(@ c B	C ((TYY
CIIdTI*	/
?@||~~w W WZZ! !%)* 4 4e6F6FGhhqkxxzwwyeYt{{4;;$(JJt*.))T\\KKLN 	77988:88CYYCC**''ooNN%)ZZrR
 99 #G]] ;]]11

8I8I#q8QRS8T;@::;L;LSRS;TUW;X7; 2 F F !!$!>63t977 !< 7mG--EJJ4E4Ec14Ma4P7<zz7H7Ha7PQS7T3799# . G GD KKdT:w{{5==#6#6tyy#ABCIXQWXwqz2Ja
 --EJJ4E4Ec14Ma4P7<zz7H7Ha7PQS7T38? . M MD KKdT:z3t977o 5  ejjms   V 
V0V++V0__main__)N)rD   r    pathlibr   r   dora.logr   torchrG   r   r   applyr   r   audior   r	   r
   htdemucsr   
pretrainedr   r   r   r+   rQ   r   __name__ rR   r*   <module>r      sU     
      + 7 7  O O>HVW8t zF rR   