
    Vh              
       0   d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlZd dlZd dlZd dlZdedefdZ	 	 	 dPdeded	ee         d
ee         fdZdefdZ G d de          ZdQdej        dededej        fdZdej        dej        fdZdej        dej        fdZ G d dej        j        j                  Zde j         de j!        deeee j!        f         fdZ" G d de          Z# G d d e          Z$ G d! d"e          Z% G d# d$e          Z& G d% d&e          Z'e(d'k    rf e j         d()          Z)e)*                    d*ed+g d,d-.           e)*                    d/ed01           e)*                    d2d3d45           e)*                    d6ed78           e)*                    d9e+d:8           e)*                    d;ed<d=>           e)*                    d?ed@dA>           e)*                    dBe+dC8           e),                                \  Z-Z. ej/        e-j0                    e"e)e-          \  Z1Z2Z- e3dD ej4                               d Z5 ej         e6 e7e1                              D ]Z8e1e8         \  Z9Z:e5e9j;        dE         e1j<        z  z  Z5e-j=        rV ej=        dF ee8          z   dGz   e9j>        e1j<                    ej=        dF ee8          z   dHz   e:j>        e1j<                    e3dIe5dJz              e3dK e7e1                      e3dL e7e2                     e-j?        e1_@        ej        j        A                    e1e-jB        dMdNO          ZC ej        eC          D ]\  Z9Z: e3e9j;                   dS dS )R    N)Path)OptionalUnionTupleListAnyCallablepathreturnc                     t          j                    dk    rt          d          i }t          j        t	          |                     }|j        |d<   |j        |d<   |j        |d<   |d         |d         z  |d<   |S )zLoad audio metadata

    this is a backend_independent wrapper around torchaudio.info

    Args:
        path: Path of filename
    Returns:
        Dict: Metadata with
        `samplerate`, `samples` and `duration` in seconds

    soxz#Deprecated backend is not supported
sampleratesampleschannelsduration)
torchaudioget_audio_backendRuntimeErrorinfostrsample_rate
num_framesnum_channels)r
   r   sis      T/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/openunmix/data.py	load_infor      s     #%%..@AAAD	T	#	#BDmDODIl);;DK            startdurr   c                     |t          j        |           \  }}||fS |t          |           }t          ||d         z            }t          ||d         z            }t          j        | ||          \  }}||fS )a`  Load audio file

    Args:
        path: Path of audio file
        start: start position in seconds, defaults on the beginning.
        dur: end position in seconds, defaults to `None` (full file).
        info: metadata object as called from `load_info`.

    Returns:
        Tensor: torch tensor waveform of shape `(num_channels, num_samples)`
    Nr   )r   frame_offset)r   loadr   int)r
   r   r    r   sigrater   r"   s           r   
load_audior'   %   s    $ { OD))	TDy<T??DtL1122
54#5566ODZl[[[	TDyr   list_of_function_namesc                 >    | rt          d | D                       S d S )Nc                 <    g | ]}t                      d |z            S 	_augment_globals.0augs     r   
<listcomp>z aug_from_str.<locals>.<listcomp>G   s&    WWW		+"34WWWr   c                     | S N audios    r   <lambda>zaug_from_str.<locals>.<lambda>I   s    U r   )Compose)r(   s    r   aug_from_strr:   E   s1     #WW@VWWWXXX"""r   c                   <    e Zd ZdZd Zdej        dej        fdZdS )r9   zqComposes several augmentation transforms.
    Args:
        augmentations: list of augmentations to compose.
    c                     || _         d S r4   
transforms)selfr>   s     r   __init__zCompose.__init__R   s    $r   r7   r   c                 0    | j         D ]} ||          }|S r4   r=   )r?   r7   ts      r   __call__zCompose.__call__U   s'     	 	AAeHHEEr   N)__name__
__module____qualname____doc__r@   torchTensorrC   r5   r   r   r9   r9   L   sS         
% % %el u|      r   r9         ?      ?r7   lowhighc                 F    |t          j        d          ||z
  z  z   }| |z  S )z.Applies a random gain between `low` and `high`   )rH   rand)r7   rL   rM   gs       r   _augment_gainrR   [   s'    ejmmtcz**A19r   c                     | j         d         dk    r@t          j        d                                          dk     rt          j        | dg          S | S )z;Swap channels of stereo signals with a probability of p=0.5r      g      ?g      ?)shaperH   tensoruniform_flipr6   s    r   _augment_channelswaprY   a   sL    {1~u|C0099;;cAAz%!%%%r   c                     | j         d         dk    r| d ddf         } | j         d         dk    rt          j        | dd          } | S )Nr   rT   .rO   dim)rU   rH   repeat_interleaver6   s    r   _augment_force_stereor^   i   sQ    {1~bqb#g{1~'qa888Lr   c                       e Zd ZdZ	 	 ddeeef         dedee         dee	         ddf
dZ
d	edefd
ZdefdZdefdZdefdZdS )UnmixDataset   Nrootr   seq_durationsource_augmentationsr   c                     t          t          j                                                  | _        || _        || _        || _        d S r4   )r   argsrb   
expanduserr   rc   rd   )r?   rb   r   rc   rd   s        r   r@   zUnmixDataset.__init__x   s=     OO..00	&($8!!!r   indexc                     t           r4   NotImplementedError)r?   rh   s     r   __getitem__zUnmixDataset.__getitem__       !!r   c                     t           r4   rj   r?   s    r   __len__zUnmixDataset.__len__   rm   r   c                     d j         j        z   }d                                                               g}|                                                                 z  }|g fd|D             z   }d                    |          S )NzDataset zNumber of datapoints: {}c                 *    g | ]}d j         z  |z   S ) )_repr_indent)r0   liner?   s     r   r2   z)UnmixDataset.__repr__.<locals>.<listcomp>   s&    JJJT# 11D8JJJr   
)	__class__rD   formatrp   
extra_repr
splitlinesjoin)r?   headbodyliness   `   r   __repr__zUnmixDataset.__repr__   s    DN33*11$,,..AAB!!,,...JJJJTJJJJyyr   c                     dS )N r5   ro   s    r   ry   zUnmixDataset.extra_repr   s    rr   )NN)rD   rE   rF   rt   r   r   r   floatr   r	   r@   r$   r   rl   rp   r   ry   r5   r   r   r`   r`   u   s        L )-37
9 
9D#I
9 
9 uo	
9
 'x0
9 

9 
9 
9 
9" " " " " "" " " " " #        C      r   r`   parserrf   c           	      
   |j         dk    r|                     dt                     |                     dt                     |                                 }t	          |j                  j        |_        t	          |j                  |j	        |j
        |j        d}t	          |j                  j        |_        t          d:ddd|}t          d:d	d
i|}nd|j         dk    rB|                     dt          d           |                     dt                     |                     dt          d           |                     dt          d           |                     dt          d           |                     dt          d           |                                 }|j        |_        t	          |j                  |j        |j        |j        d}t!          |j                  }t%          d:d|d|j        |j	        d|}t%          d:d
d|j	        |j        d|}n|j         dk    r|                     dt                     |                     dt          d           |                     ddd d!"           |                     dt          d           |                                 }t	          |j                  j        |_        t	          |j                  |j        |j        d#}t!          |j                  }t/          d:d||j        d|j	        d$|}t/          d:d
d%d&|}n|j         d'k    r,|                     dt          d           |                     dt                     |                     dt          d           |                     d(dd d)"           |                     d*dd d+"           |                                 }t	          |j                  j        |_        t	          |j                  |j        |j        |j        d,}t5          d- |j        D                       }t7          d:d||j        d|j	        d.|}t7          d:d
d%d&|}n|                     d/dd d0"           |                     d1t          d2           |                     dt          d3d4gd5           |                                 }|j        |j        d|j        |j        d%u |j        d6}t!          |j                  }t?          d:d|j         |j	        |dd7|}t?          d:d
d8d%d9|}|||fS );zsLoads the specified dataset from commandline arguments

    Returns:
        train_dataset, validation_dataset
    alignedz--input-file)typez--output-file)rb   rc   
input_fileoutput_filetrainT)splitrandom_chunksr   validsourcefolderz--interferer-dirs+)r   nargsz--target-dirz--ext.wavr   defaultz--nb-train-samples  z--nb-valid-samplesd   z--source-augmentations)rb   interferer_dirs
target_dirext)r   rd   r   
nb_samplesrc   )r   r   rc   r   trackfolder_fixz--target-filez--interferer-filesz--random-track-mix
store_trueFz&Apply random track mixing augmentation)actionr   help)rb   interferer_filestarget_file)r   rd   random_track_mixr   rc   N)r   rc   trackfolder_varz--random-interferer-mixz+Apply random interferer mixing augmentationz--silence-missingzsilence missing targets)rb   r   r   silence_missing_targetsc                 <    g | ]}t                      d |z            S r+   r-   r/   s     r   r2   z!load_datasets.<locals>.<listcomp>  s&    'j'j'j		+2C(D'j'j'jr   )r   rd   random_interferer_mixr   rc   z--is-wavzloads wav instead of STEMSz--samples-per-track@   gainchannelswap)r   r   r   )rb   is_wavsubsetstargetdownloadseed)r   samples_per_trackrc   rd   r   rO   )r   r   rc   r5   )!datasetadd_argumentr   
parse_argsr   r   stemr   rb   seq_durr   AlignedDatasetr$   r   r   r   r:   rd   SourceFolderDatasetnb_train_samplesnb_valid_samplesr   r   FixedSourcesTrackFolderDatasetr   silence_missingr9   !VariableSourcesTrackFolderDatasetr   r   r   MUSDBDatasetr   )r   rf   dataset_kwargstrain_datasetvalid_datasetrd   s         r   load_datasetsr      s5    |y  N555O#666  ""4+,,1 OO L/+	
 
 4+,,1&[WD[[N[[&GGWGGG		'	'/cEEEN555G#v>>>0sDIII0sCHHH43cJJJ  ""o OO#3/8	
 
  ,D,EFF+ 
!5,
 
 
 
 , 
,	
 

 
 
 
*	*	*O#6660s#FFF 9	 	 	
 	
 	
 	43cJJJ  ""4+,,1 OO $ 5+
 
  ,D,EFF6 
!5!2
 
 
 
 7jWSWjj[ijj	*	*	*G#v>>>O#66643cJJJ%>	 	 	
 	
 	
 	*	 	 	
 	
 	
   ""4+,,1 OO+8'+';	
 
  ''j'jPTPi'j'j'jkk9 
!5"&"<
 
 
 
 :mVZmm^lmm 	-	 	 	
 	
 	
 	1RHHH43Q^H_gjkkk  ""Ikk	T)I
 
  ,D,EFF$ 
"4!5!
 
 
 
 %m7aVZmm^lmm---r   c                   z    e Zd Z	 	 	 	 	 	 	 	 dded	ed
ededee         dededee         deddfdZ	d Z
d Zd ZdS )r   r   mixture.wav
vocals.wavNF    @*   rb   r   r   r   rc   r   r   rd   r   r   c
                 ^   t          |                                          | _        || _        || _        || _        || _        || _        || _        t          | 
                                          | _        | j        st          d          |	| _        t          j        | j                   dS )a  A dataset of that assumes multiple track folders
        where each track includes and input and an output file
        which directly corresponds to the the input and the
        output of the model. This dataset is the most basic of
        all datasets provided here, due to the least amount of
        preprocessing, it is also the fastest option, however,
        it lacks any kind of source augmentations or custum mixing.

        Typical use cases:

        * Source Separation (Mixture -> Target)
        * Denoising (Noisy -> Clean)
        * Bandwidth Extension (Low Bandwidth -> High Bandwidth)

        Example
        =======
        data/train/01/mixture.wav --> input
        data/train/01/vocals.wav ---> output

        z)Dataset is empty, please check parametersN)r   rg   rb   r   r   rc   r   r   r   list
_get_pathstuple_pathsr   r   random)
r?   rb   r   r   r   rc   r   r   rd   r   s
             r   r@   zAlignedDataset.__init__?  s    @ JJ))++	
&(*$& 1 122 	LJKKK	DIr   c                 T   | j         |         \  }}| j        rXt          |          }t          |          }t          |d         |d                   }t	          j        d|| j        z
            }nd}t          ||| j                  \  }}	t          ||| j                  \  }
}	||
fS )Nr   r   r   r    )r   r   r   minr   uniformrc   r'   )r?   rh   
input_pathoutput_path
input_infooutput_infor   r   X_audio_Y_audios              r   rl   zAlignedDataset.__getitem__m  s    "&"25"9
K 	":..J#K00K:j1;z3JKKHN1h1B&BCCEEE
%T=NOOO
5d>OPPP
r   c                 *    t          | j                  S r4   )lenr   ro   s    r   rp   zAlignedDataset.__len__}  s    4#$$$r   c              #   V  K   t          | j        | j                  }t          j        |                                          D ]}|                                rt          |                    | j                            }t          |                    | j	                            }|r|r}| j
        dt          |d                   }t          |d                   }t          |d         |d                   }|| j
        k    r|d         |d         fV  |d         |d         fV  dS )Loads input and output tracksNr   r   )r   rb   r   tqdmiterdiris_dirr   globr   r   rc   r   r   )r?   p
track_pathr   r   r   r   min_durations           r   r   zAlignedDataset._get_paths  s$     DJ'')AIIKK00 	< 	<J  "" <!*//$/"B"BCC
":??43C#D#DEE 	<+ 	<(4%.z!}%=%=
&/A&?&?'*:j+A;zCZ'['['$*;;;",Q-Q"????(m[^;;;;	< 	<r   )r   r   r   NFr   Nr   )rD   rE   rF   r   r   r   boolr	   r$   r@   rl   rp   r   r5   r   r   r   r   >  s         ''(,#$37, ,, , 	,
 , uo, , , 'x0, , 
, , , ,\      % % %< < < < <r   r   c                       e Zd Zddddgddddd	d
 df
dedededee         dededee         dededee	         deddfdZ
d Zd Zd ZdS )r   r   vocalsbassdrumsr   r   NTr   c                     | S r4   r5   r6   s    r   r8   zSourceFolderDataset.<lambda>       r   r   rb   r   r   r   r   r   rc   r   r   rd   r   r   c                 l   t          |                                          | _        || _        |	| _        || _        || _        || _        |
| _        || _	        || _
        | j
        | j	        gz   | _        |                                 | _        || _        || _        t!          j        | j                   dS )a  A dataset that assumes folders of sources,
        instead of track folders. This is a common
        format for speech and environmental sound datasets
        such das DCASE. For each source a variable number of
        tracks/sounds is available, therefore the dataset
        is unaligned by design.
        By default, for each sample, sources from random track are drawn
        to assemble the mixture.

        Example
        =======
        train/vocals/track11.wav -----------------        train/drums/track202.wav  (interferer1) ---+--> input
        train/bass/track007a.wav  (interferer2) --/

        train/vocals/track11.wav ---------------------> output

        N)r   rg   rb   r   r   rc   r   r   rd   r   r   source_folders
get_trackssource_tracksr   r   r   )r?   rb   r   r   r   r   r   rc   r   r   rd   r   s               r   r@   zSourceFolderDataset.__init__  s    @ JJ))++	
&(*$8!$."2do5FF!__..$	DIr   c                 8   g }| j         D ]}| j        dk    rt          j        |           t          j        | j        |                   }t          |          d         }| j        rt          j        d|| j	        z
            }nt          |dz  | j	        dz  z
  d          }t          ||| j	                  \  }}|                     |          }|                    |           t          j        |          }	|	                    d          }
|	d         }|
|fS )Nr   r   r   rT   r   )r   r   r   r   choicer   r   r   r   rc   maxr'   rd   appendrH   stacksum)r?   rh   audio_sourcessourcesource_pathr   r   r7   r   stemsxys               r   rl   zSourceFolderDataset.__getitem__  s!   ) 	( 	(FzW$$ E""" !-(:6(BCCK --j9H! Gq(T5F*FGG HMD,=,BBAFF!+U@QRRRHE1--e44E  ''''M**IIaLL"I!tr   c                     | j         S r4   )r   ro   s    r   rp   zSourceFolderDataset.__len__  s
    r   c                    t          | j        | j                  }i }t          j        | j                  D ]}g }||z  }t          |                    d| j        z                       D ]T}| j        6t          |          }|d         | j        k    r|
                    |           ?|
                    |           U|||<   |S )r   *Nr   )r   rb   r   r   r   sortedr   r   rc   r   r   )r?   r   r   source_foldertracksr   source_track_pathr   s           r   r   zSourceFolderDataset.get_tracks  s    DJ''!Yt':;; 	2 	2MFm+K%+K,<,<S48^,L,L%M%M 5 5!$0$%677DJ'$*;;;&7888MM"34444+1M-((r   )rD   rE   rF   r   r   r$   r   r   r   r	   r@   rl   rp   r   r5   r   r   r   r     s        "&,g%6(,"$3F3F- -- - 	-
 c- - - uo- - - 'x0- - 
- - - -^  <      r   r   c                       e Zd Zddddgdddd dd	f	d
edededee         dee         dededee         dede	ddfdZ
d Zd Zd ZdS )r   r   r   zbass.wavz	drums.wavNFc                     | S r4   r5   r6   s    r   r8   z'FixedSourcesTrackFolderDataset.<lambda>  r   r   r   r   rb   r   r   r   rc   r   r   rd   r   r   r   c                    t          |                                          | _        || _        |	| _        || _        || _        || _        || _        || _	        || _
        | j
        | j	        gz   | _        |
| _        t          j        | j                   t          |                                           | _        t#          | j                  st%          d          dS )a  A dataset that assumes audio sources to be stored
        in track folder where each track has a fixed number of sources.
        For each track the users specifies the target file-name (`target_file`)
        and a list of interferences files (`interferer_files`).
        A linear mix is performed on the fly by summing the target and
        the inferers up.

        Due to the fact that all tracks comprise the exact same set
        of sources, the random track mixing augmentation technique
        can be used, where sources from different tracks are mixed
        together. Setting `random_track_mix=True` results in an
        unaligned dataset.
        When random track mixing is enabled, we define an epoch as
        when the the target source from all tracks has been seen and only once
        with whatever interfering sources has randomly been drawn.

        This dataset is recommended to be used for small/medium size
        for example like the MUSDB18 or other custom source separation
        datasets.

        Example
        =======
        train/1/vocals.wav ---------------        train/1/drums.wav (interferer1) ---+--> input
        train/1/bass.wav -(interferer2) --/

        train/1/vocals.wav -------------------> output

        zNo tracks foundN)r   rg   rb   r   r   rc   r   r   rd   r   r   source_filesr   r   r   r   r   r   r   )r?   rb   r   r   r   rc   r   r   rd   r   r   s              r   r@   z'FixedSourcesTrackFolderDataset.__init__  s    T JJ))++	
&( 0*$8!& 0 1T5E4FF	DI4??,,--4; 	20111	2 	2r   c                 L   | j         |         d         }| j         |         d         }| j        rt          j        d|| j        z
            }nd}g }t          || j        z  || j                  \  }}|                     |          }|                    |           | j	        D ]}| j
        r}t          j        t          t          | j                                       }	| j         |	         d         }| j        r0| j         |	         d         }t          j        d|| j        z
            }t          ||z  || j                  \  }
}|                     |
          }
|                    |
           t          j        |          }|                    d          }|d         }||fS )Nr
   r   r   r   )r   r   r   r   rc   r'   r   rd   r   r   r   r   ranger   rH   r   r   )r?   rh   r   r   r   r   target_audior   r   
random_idxr7   r   r   r   s                 r   rl   z*FixedSourcesTrackFolderDataset.__getitem__4  s   ['/
{5).9 	N1lT5F&FGGEEE $Z$2B%B%UYUfggga00>>\***+ 	( 	(F$ P#]5T[1A1A+B+BCC
![4V<
% P#';z#:>#JL"N1lT=N.NOOE!*v"5UHYZZZHE1--e44E  ''''M**IIaLL!H!tr   c                 *    t          | j                  S r4   r   r   ro   s    r   rp   z&FixedSourcesTrackFolderDataset.__len__Y      4;r   c              #     K   t          | j        | j                  }t          j        |                                          D ]                                rfd| j        D             }t          d |D                       st          d           S| j	        Nt          t          t          |                    }t          d |D                       }|| j	        k    r|dV  ddV  dS )r   c                     g | ]}|z  S r5   r5   )r0   sr   s     r   r2   z=FixedSourcesTrackFolderDataset.get_tracks.<locals>.<listcomp>a  s    JJJ1
QJJJr   c              3   >   K   | ]}|                                 V  d S r4   )exists)r0   sps     r   	<genexpr>z<FixedSourcesTrackFolderDataset.get_tracks.<locals>.<genexpr>b  s*      >>2299;;>>>>>>r   zExclude track Nc              3   &   K   | ]}|d          V  dS r   Nr5   r0   is     r   r  z<FixedSourcesTrackFolderDataset.get_tracks.<locals>.<genexpr>i  s&      &D&Dq}&D&D&D&D&D&Dr   r
   r   )r   rb   r   r   r   r   r   allprintrc   r   mapr   r   )r?   r   source_pathsinfosr   r   s        @r   r   z)FixedSourcesTrackFolderDataset.get_tracks\  s!     DJ'')AIIKK00 	G 	GJ  "" GJJJJ8IJJJ>>>>>>> *J777$0 Y!=!=>>E#&&D&De&D&D&D#D#DL#d&777(2LQQRRR$.EEFFF	G 	Gr   )rD   rE   rF   r   r   r   r   r   r	   r$   r@   rl   rp   r   r5   r   r   r   r     s         ''1;&?(,#!&3F3F$:2 :2:2 :2 	:2
 s):2 uo:2 :2 :2 'x0:2 :2 :2 
:2 :2 :2 :2x# # #J     G G G G Gr   r   c                       e Zd Zdddddddd df	ded	ed
ededee         dedededee         deddfdZd Z	d Z
d ZdS )r   r   r   r   NFr   c                     | S r4   r5   r6   s    r   r8   z*VariableSourcesTrackFolderDataset.<lambda>{  r   r   rb   r   r   r   rc   r   r   r   rd   r   r   c                    t          |                                          | _        || _        || _        || _        || _        || _        |	| _        || _	        || _
        |
| _        t          |                                           | _        dS )a  A dataset that assumes audio sources to be stored
        in track folder where each track has a _variable_ number of sources.
        The users specifies the target file-name (`target_file`)
        and the extension of sources to used for mixing.
        A linear mix is performed on the fly by summing all sources in a
        track folder.

        Since the number of sources differ per track,
        while target is fixed, a random track mix
        augmentation cannot be used. Instead, a random track
        can be used to load the interfering sources.

        Also make sure, that you do not provide the mixture
        file among the sources!

        Example
        =======
        train/1/vocals.wav --> input target           train/1/drums.wav --> input target     |
        train/1/bass.wav --> input target    --+--> input
        train/1/accordion.wav --> input target |
        train/1/marimba.wav --> input target  /

        train/1/vocals.wav -----------------------> output

        N)r   rg   rb   r   r   rc   r   r   rd   r   r   r   r   r   r   )r?   rb   r   r   r   rc   r   r   r   rd   r   s              r   r@   z*VariableSourcesTrackFolderDataset.__init__q  s    N JJ))++	
&(*%:"$8!&'>$4??,,--r   c                 *   | j         |         d         }| j        r1| j         |         d         }t          j        d|| j        z
            }nd}| j        rt          j        t          t          | j                                       }| j         |         d         }| j        r1| j         |         d         }t          j        d|| j        z
            }nd}n|}|}t          t          |                    d| j        z                                 }	d}
|	D ]|}||| j        z  k    r	 t          ||| j                  \  }}n7# t          $ r* |dk    r|dz
  n|dz   }|                     |          cY c S w xY w|
|                     |          z  }
}t%          || j        z                                            r=t          || j        z  || j                  \  }}|                     |          }|
|z  }
nt)          j        |j                  }|
|fS )Nr
   r   r   r   r   rO   )r   r   r   r   rc   r   r   r  r   r   r   r   r   r   r'   r   rl   rd   r   r  rH   zerosrU   )r?   rh   target_track_pathtarget_min_durationtarget_startr  intfr_track_pathintfr_min_durationintfr_startsourcesr   r   r7   r   r   s                  r   rl   z-VariableSourcesTrackFolderDataset.__getitem__  sW    K.v6 	"&+e"4^"D!>!-@4CT-TUULLL % 
	'uS-=-='>'>??J#{:6v>!  %)[%<^%L"$nQ0BTEV0VWW0&K .33C$(NCCDDEE " 
	2 
	2K.1AAAA/%k$J[\\\qq / / /%*QYY		EAI''......./ **5111AA !D$4455<<>> 	)!D$44"%  DAq
 ))!,,AFAA EK((A!ts   'E/E65E6c                 *    t          | j                  S r4   r  ro   s    r   rp   z)VariableSourcesTrackFolderDataset.__len__  r  r   c           	   #   `  K   t          | j        | j                  }t          j        |                                          D ]}|                                rt          || j                                                  s| j        rt          t          |                    d| j        z                                 }|st          d|           | j        Nt          t          t           |                    }t#          d |D                       }|| j        k    r||dV  |d dV  d S )Nr   zempty track: c              3   &   K   | ]}|d          V  dS r  r5   r  s     r   r  z?VariableSourcesTrackFolderDataset.get_tracks.<locals>.<genexpr>  s&      *H*HQ1Z=*H*H*H*H*H*Hr   r  )r   rb   r   r   r   r   r   r  r   r   r   r   r   r  rc   r  r   r   )r?   r   r   r$  r  r   s         r   r   z,VariableSourcesTrackFolderDataset.get_tracks  s@     DJ'')AIIKK00 	K 	KJ  "" K
D$455<<>> K$B^ K$T*//#.*I*I%J%JKKG" !oz::: (4 $SG%<%< = ='**H*H%*H*H*H'H'H'$*;;;,6#U#UVVV(2DIIJJJ#	K 	Kr   )rD   rE   rF   r   r   r   r   r	   r@   rl   rp   r   r5   r   r   r   r   p  s         '(,#&+$3F3F(-1. 1.1. 1. 	1.
 1. uo1. 1.  $1. 1. 'x01. "&1. 
1. 1. 1. 1.f5 5 5n     K K K K Kr   r   c                       e Zd Zddddddddd ddfd	ed
edededededee         dedee         dededdfdZ	d Z
d ZdS )r   r   NFr   g      @r   c                     | S r4   r5   r6   s    r   r8   zMUSDBDataset.<lambda>  r   r   r   r   rb   r   r   r   r   rc   r   rd   r   r   r   c           	          ddl }|| _        t          j        |           || _        || _        || _        || _        || _        || _        |	| _	        |
| _
         |j        ||||||d|| _        d| _        dS )a  MUSDB18 torch.data.Dataset that samples from the MUSDB tracks
        using track and excerpts with replacement.

        Parameters
        ----------
        target : str
            target name of the source to be separated, defaults to ``vocals``.
        root : str
            root path of MUSDB
        download : boolean
            automatically download 7s preview version of MUSDB
        is_wav : boolean
            specify if the WAV version (instead of the MP4 STEMS) are used
        subsets : list-like [str]
            subset str or list of subset. Defaults to ``train``.
        split : str
            use (stratified) track splits for validation split (``valid``),
            defaults to ``train``.
        seq_duration : float
            training is performed in chunks of ``seq_duration`` (in seconds,
            defaults to ``None`` which loads the full audio track
        samples_per_track : int
            sets the number of samples, yielded from each track per epoch.
            Defaults to 64
        source_augmentations : list[callables]
            provide list of augmentation function that take a multi-channel
            audio file of shape (src, samples) as input and output. Defaults to
            no-augmentations (input = output)
        random_track_mix : boolean
            randomly mixes sources from different tracks to assemble a
            custom mix. This augmenation is only applied for the train subset.
        seed : int
            control randomness of dataset iterations
        args, kwargs : additional keyword arguments
            used to add further control for the musdb dataset
            initialization function.

        r   N)rb   r   r   r   r   r   )musdbr   r   r   rc   r   r   r   r   rd   r   DBmusr   )r?   r   rb   r   r   r   r   rc   r   rd   r   r   rf   kwargsr+  s                  r   r@   zMUSDBDataset.__init__  s    l 		D(
!2$8! 058  
 
 
 
 #r   c                    g }d }| j         j        || j        z           }| j        dk    rw| j        rot          | j         j        d                   D ]\  }}|| j        k    r|}| j        rt          j
        | j         j                  }| j        |_        t          j        d|j        | j        z
            |_        t          j        |j        |         j        j        t          j                  }|                     |          }|                    |           t          j        |d          }|                    d          }	|	||         }
nt3          | j         j        d                                                                       d          }|	||         z
  }
ndt          j        |j        j        t          j                  }	t          j        |j        | j                 j        j        t          j                  }
|	|
fS )Nr   r$  r   )dtyper[   r   )r-  r   r   r   rc   	enumeratesetupr   r   r   r   chunk_durationr   r   chunk_startrH   	as_tensorr$  r7   Tfloat32rd   r   r   r   r   keysrh   targets)r?   rh   r   
target_indtrackkr   r7   r   r   r   vocinds               r   rl   zMUSDBDataset.__getitem__B  s   
 )? ?@ :  T%6 &tx~i'@AA , ,	6T[((!"J ( ;"M$(/::E (,'8$$*N1entGX6X$Y$Y!f(=(C(EU][[[11%88$$U++++ K1555E		!A%*% dhnY7<<>>??EEhOOf% U]CCCAdk : @ B%-XXXA!tr   c                 D    t          | j        j                  | j        z  S r4   )r   r-  r   r   ro   s    r   rp   zMUSDBDataset.__len__t  s    48?##d&<<<r   )rD   rE   rF   r   r   r   r   r$   r	   r@   rl   rp   r5   r   r   r   r     s        (+!#3F3F!&K# K#K# K# 	K#
 K# K# K# uoK# K# 'x0K# K# K# 
K# K# K# K#Z0 0 0d= = = = =r   r   __main__zOpen Unmix Trainer)descriptionz	--datasetr+  )r+  r   r   r   r   zName of the dataset.)r   r   choicesr   z--rootzroot path of dataset)r   r   z--saver   z$write out a fixed dataset of samples)r   r   z--targetr   r   z--seedr   z--audio-backend	soundfilez/Set torchaudio backend (`sox_io` or `soundfile`)r   r   r   z	--seq-durg      @z/Duration of <=0.0 will result in the full audioz--batch-size   zAudio Backend: rO   ztest/zx.wavzy.wavzTotal training duration (h): i  zNumber of train samples: zNumber of validation samples: Tra   )
batch_sizeshufflenum_workers)r   NN)rJ   rK   )Dargparser   pathlibr   typingr   r   r   r   r   r	   rH   torch.utils.datar   r   r   dictr   r   r'   r   r:   objectr9   rI   rR   rY   r^   utilsdataDatasetr`   ArgumentParser	Namespacer   r   r   r   r   r   rD   r   r   r$   parse_known_argsrf   r   set_audio_backendaudio_backendr   r   r  r   total_training_durationr  r   r<  r   r   rU   r   saver6  r   rc   
DataLoaderrD  train_samplerr5   r   r   <module>rY     s           > > > > > > > > > > > > > > > >          C D    6 	 
 
% 4.	   @# # # # #    f     E  QVQ]         	 	%, 	 	 	 	    5;#+   @f.#f.+3+=f.
<x'99:f. f. f. f.RR< R< R< R< R<\ R< R< R<ja a a a a, a a aHvG vG vG vG vG\ vG vG vGrAK AK AK AK AK AK AK AKHA= A= A= A= A=< A= A= A=H z$X$1EFFFF

 
 
 $     s1GHHH
=ceee

h???
sB777
>	     >	     S"===%%''GD! J !3444)6vt)D)D&M=$	E
9Z9;;<<<  TYuuSS//0011 X XQ1171:0I#II9 	XJOGcc!ff,w6]=VWWWJOGcc!ff,w6]=VWWW	E
)+BT+IJJJ	E
%ss='9'9:::	E
*CC,>,>??? "&MK$//?	 0  M 	-((  1agM J r   