
    mi%                         d dl Z d dlZd dlmZ d dlZd dlmZ d dlZd dl	Z
ddlmZmZ ddlmZmZmZ ddlmZ ddlmZmZmZ d	 Zd
 ZddZedk(  r e        yy)    N)Path)fatal   )apply_modelBagOfModels)	AudioFileconvert_audio
save_audio)HTDemucs)get_model_from_argsadd_model_flagsModelLoadingErrorc                    i }d }	 t        |       j                  d||      }|0	 t        j                  t        |             \  }}t        ||||      }|Mt        d|  d       |j                         D ]  \  }}t        d	| d
|         t        j                  d       |S # t        $ r d|d<   Y t        j                  $ r d|d<   Y w xY w# t        $ r}|j                  d   |d<   Y d }~d }~ww xY w)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	            I/var/www/stems/demucs_env/lib/python3.12/site-packages/demucs/separate.py
load_trackr+      s!   F
C=##!# $ % {	Eggc%j)GC  R^DC
{$UG ,: : 	;$lln 	\NGU.wi7RSXRYZ[	\J'  65x(( =<x=  	/#&88A;F< 	/s.   B& !C &C6CC	C8C33C8c                  D   t        j                  dd      } | j                  ddt        g d       t	        |        | j                  dd	d
       | j                  ddt        t        d      d       | j                  ddd       | j                  ddt
        j                  j                         rdndd       | j                  ddt        d       | j                  ddt        d        | j                         }|j                  d!d"d#d$d%&       |j                  d't        d()       | j                  d*d+d,d-.       | j                         }|j                  d/d
d01       |j                  d2d
d31       | j                  d4d5d5d6gd78       | j                         }|j                  d9d
d:1       |j                  d;d
d<1       | j                  d=d>t        d?       | j                  d@t        dAdB      t        dAdCD       | j                  dEdFdGt        dH       | S )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                 T   t               }|j                  |       }	 t        |      }t        d      }t        t              rt        |j                        }nt        |t              r|j                  }|j                  |j                  |kD  rt	        d|        t        |t              r"t        dt        |j                         d       |j                          |j!                          |j"                  W|j"                  |j$                  vr?t	        dj'                  |j"                  dj)                  |j$                                     |j*                  |j,                  z  }|j/                  d	d	
       t        d|j1                                 |j2                  D ]  }|j5                         s t        d| dt6        j8                         4t        d|        t;        ||j<                  |j>                        }|jA                  d      }	||	jA                         z  }||	jC                         z  }tE        ||d    |jF                  |jH                  |jJ                  |jL                  d	|jN                  |j                  	      d   }
|
|	jC                         z  }
|
|	jA                         z  }
|jP                  rd}n|jR                  rd}nd}|j>                  |jT                  |jV                  |jX                  |jZ                  |j\                  rdndd}|j"                  t_        |
|j$                        D ]  \  }}||j`                  j'                  |j,                  jc                  dd      d   |j,                  jc                  dd      d   ||      z  }|jd                  j/                  d	d	
       tg        |ti        |      fi |  :tk        |
      }
||j`                  j'                  |j,                  jc                  dd      d   |j,                  jc                  dd      d   |j"                  |      z  }|jd                  j/                  d	d	
       tg        |
jm                  |j$                  jo                  |j"                              ti        |      fi | tq        jr                  |
d         }|
D ]  }||z  }	 ||j`                  j'                  |j,                  jc                  dd      d   |j,                  jc                  dd      d   d|j"                  z   |      z  }|jd                  j/                  d	d	
       tg        |ti        |      fi |  y # t        $ r#}t	        |j
                  d          Y d }~zd }~ww xY w)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*	/
?@ 78||~w W WZZ! !%)* 4 4e6F6FGhhqksxxzswwyeSYt{{4;;$(JJt*.))T\\KKLN 	3779388:88CYYCC**''ooNN%)ZZrR
 99 #GU]] ; 8T]]11

8I8I#q8QRS8T;@::;L;LSRS;TUW;X7; 2 F F !!$!>63t9778 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785  ejjms   U; ;	V'V""V'__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   