
    h                         S SK r S SKJr  S SKJrJrJrJr  S SKrS SK	r	S SK
Jr  S SKJr  S SKJr  SrSrS	rS
r/ SQr " S S\5      rg)    N)Path)ListOptionalTupleUnion)Dataset)download_url_to_file)_extract_zipz5https://zenodo.org/record/3338373/files/musdb18hq.zip@baac80d0483c61d74b2e5f3be75fa557eec52898339e6aa45c1fa48833c5d21dz.waviD  )zActions - One Minute Smilez.Clara Berry And Wooldog - Waltz For My VictimszJohnny Lokke - Promises & Liesz"Patrick Talbot - A Reason To LeavezTriviul - AngelsaintzAlexander Ross - Goodbye BolerozFergessen - Nos PalpitantszLeaf - SummerghostzSkelpolu - Human MistakeszYoung Griffo - PennieszANiMAL - RockshowzJames May - On The LinezMeaxic - Take A StepzTraffic Experiment - Sirensc                       \ rS rSrSr   SS\\\4   S\S\\	\      S\\   S\
S	S4S
 jjrS rS\S	\\R                   \\\4   4S jrS rS\S	\\R                   \\\4   4S jrS	\4S jrSrg)MUSDB_HQ!   aK  *MUSDB_HQ* :cite:`MUSDB18HQ` dataset.

Args:
    root (str or Path): Root directory where the dataset's top level directory is found
    subset (str): Subset of the dataset to use. Options: [``"train"``, ``"test"``].
    sources (List[str] or None, optional): Sources extract data from.
        List can contain the following options: [``"bass"``, ``"drums"``, ``"other"``, ``"mixture"``, ``"vocals"``].
        If ``None``, dataset consists of tracks except mixture.
        (default: ``None``)
    split (str or None, optional): Whether to split training set into train and validation set.
        If ``None``, no splitting occurs. If ``train`` or ``validation``, returns respective set.
        (default: ``None``)
    download (bool, optional): Whether to download the dataset if it is not found at root path.
        (default: ``False``)
Nrootsubsetsourcessplitdownloadreturnc                 2   U(       d  / SQOUU l         X@l        [        R                  R	                  [
        5      n[        R                  R                  X5      nUR                  SS5      S   nUS;  a  [        S5      eU R                  b  U R                  S;  a  [        S5      e[        R                  R                  X5      n[        R                  R                  X5      U l	        [        R                  R                  U R                  5      (       di  [        R                  R                  U5      (       d%  U(       d  [        S	5      e[        [
        U[        S
9  [        R                  " USS9  [!        Xx5        U R#                  5       U l        g )N)bassdrumsothervocals.   r   )testtrainz)`subset` must be one of ['test', 'train'])r   
validationz.`split` must be one of ['train', 'validation']z9Dataset not found. Please use `download=True` to download)hash_prefixT)exist_ok)r   r   ospathbasename_URLjoinrsplit
ValueError_pathisdirisfileRuntimeErrorr	   	_CHECKSUMmakedirsr
   _collect_songsnames)	selfr   r   r   r   r   r#   archive	base_paths	            T/var/www/auris/envauris/lib/python3.13/site-packages/torchaudio/datasets/musdb_hq.py__init__MUSDB_HQ.__init__2   s    DK;PW
77##D)'',,t.??3*1-**HII::!djj8O&OMNNGGLL0	WW\\)4
ww}}TZZ((77>>'**&'bcc$T7	JKK	D1,((*
    c                 H    [        U R                  5      U-  U [         3-  $ N)r   r(   _EXT)r0   namesources      r3   
_get_trackMUSDB_HQ._get_trackQ   s$    DJJ$&F8D6):::r6   nc                    U R                   U   n/ nS nU R                   H  nU R                  X%5      n[        R                  " [        U5      5      u  pxU[        :w  a  [        S[         SU 35      eUc  UR                  S   nOUR                  S   U:w  a  [        S5      eUR                  U5        M     [        R                  " U5      n	U	[        XB4$ )Nzexpected sample rate z
, but got z&num_frames do not match across sources)r/   r   r<   
torchaudioloadstr_SAMPLE_RATEr'   shapeappendtorchstack)
r0   r>   r:   wavs
num_framesr;   trackwavsrstackeds
             r3   _load_sampleMUSDB_HQ._load_sampleT   s    zz!}
llFOOD1E ooc%j1GC\! #8jQSPT!UVV! YYr]
99R=J.$%MNNKK # ++d#j66r6   c                    U R                   S:X  a  [        $ [        U R                  5      n/ n[        R
                  " USS9 H  u  p4n[        U5      nUR                  R                  S5      (       d  U(       d  X1:X  a  M?  [        UR                  U5      5      nU R                   (       a  U[        ;   a  Mv  UR                  U5        M     [        U5      $ )Nr   T)followlinksr   )r   _VALIDATION_SETr   r(   r!   walkr:   
startswithrC   relative_torF   sorted)r0   r"   r/   r   folders_r:   s          r3   r.   MUSDB_HQ._collect_songsh   s    ::%""DJJ "$ ?D1:Dyy##C((Gt|t''-.Dzzdo5LL !@ e}r6   c                 $    U R                  U5      $ )zLoad the n-th sample from the dataset.

Args:
    n (int): The index of the sample to be loaded
Returns:
    Tuple of the following items;

    Tensor:
        Waveform
    int:
        Sample rate
    int:
        Num frames
    str:
        Track name
)rO   )r0   r>   s     r3   __getitem__MUSDB_HQ.__getitem__w   s    "   ##r6   c                 ,    [        U R                  5      $ r8   )lenr/   )r0   s    r3   __len__MUSDB_HQ.__len__   s    4::r6   )r(   r/   r   r   )NNF)__name__
__module____qualname____firstlineno____doc__r   rC   r   r   r   boolr4   r<   intr   rG   TensorrO   r.   r\   r`   __static_attributes__ r6   r3   r   r   !   s    ( (,#+CI+ + $s)$	+
 }+ + 
+>;7c 7eELL#sC,G&H 7($S $U5<<c3+F%G $& r6   r   )r!   pathlibr   typingr   r   r   r   rG   rA   torch.utils.datar   torchaudio._internalr	   torchaudio.datasets.utilsr
   r$   r,   r9   rD   rS   r   rk   r6   r3   <module>rq      sI    	  / /   $ 5 2>N	$jw jr6   