
    Vh&                         d Z ddlmZ ddlZddlZddlZddlZddlmZ ddl	Z	ddl
Z
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mZ dd	lmZ d
ZdZdefdZdefdZ G d d          ZddZd Zd ZdS )z.Loading wav based datasets, including MusdbHQ.    )OrderedDictN)Path)distributed)
functional   )convert_audio_channels)distribmixturez.wavTc           
      N   d }d }d}d}|t           gz   D ]
}| | | z  }	|t           k    r|	                                sd}
|D ]'}| | | z  }t          j        |          \  }}|
|z  }
(|
                                                                dk    }|r!t          j                    dk    s
J d            t          j        |	|
|d           	 t          j        t          |	                    }n# t          $ r t          |	            w xY w|j        }|
|}|j        }nH||k    rt          d|	 d| d	| d
          |j        |k    rt          d|	 d| d	|j         d
          |t           k    r|r	 t          j        t          |	                    \  }}n# t          $ r t          |	            w xY w|                    d          }|                                                                }|                                                                }||||dS )Nr   r   	soundfilezuse dset.backend=soundfilePCM_F)encodingzInvalid length for file z: expecting z	 but got .zInvalid sample rate for file )lengthmeanstd
samplerate)MIXTUREexiststaloadabsmaxget_audio_backendsaveinfostrRuntimeErrorprint
num_framessample_rate
ValueErrorr   itemr   )tracksources	normalizeexttrack_lengthtrack_samplerater   r   sourcefileaudio
sub_sourcesub_file	sub_audiosr
would_clipr   r   wav_s                       P/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/wav.py_track_metadatar5      s   LD
CWI% &# &#&'#'''WT[[]]E% # #
 j#7##7#77 " 1 1	2"**a/J [+--<<<>Z<<<GD%g6666	73t99%%DD 	 	 	$KKK	 !L#/V##>4 > >)> >4:> > >? ? ? !111L L L-L L8<8HL L LM M M WT++QQ   d ((1++C88::??$$D''))..""Cd3FVWWWs   !C33D:$FF:c                 .   i }t          |           } g }ddlm}  |d          5 }t          j        | d          D ]\  }}	}
t          |          }|j                            d          s|	s|| k    r8t          |                    |                     }|	                    ||
                    t          ||||          f           t          j        |d          D ]\  }}|                                ||<   	 d	d	d	           n# 1 swxY w Y   |S )
aU  
    Build the metadata for `Wavset`.

    Args:
        path (str or Path): path to dataset.
        sources (list[str]): list of sources to look for.
        normalize (bool): if True, loads full track and store normalization
            values based on the mixture file.
        ext (str): extension of audio files (default is .wav).
    r   )ThreadPoolExecutor   T)followlinksr   x   )ncolsN)r   concurrent.futuresr7   oswalkname
startswithr   relative_toappendsubmitr5   tqdmresult)pathr%   r&   r'   metapendingsr7   poolrootfoldersfilesr?   pendings                r4   build_metadatarN   N   sw    D::DH555555		A		 	*$$&GDd$C$C$C 	a 	a D'5::Dy##C(( G tt||t''--..DOOT4;;gyZ]#^#^_````!Yxs;;; 	* 	*MD' ))DJJ	*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* Ks   CD

DDc                   4    e Zd ZdddddefdZd Zd Zd ZdS )	WavsetNTiD     c
                    t          |          | _        t          |          | _        || _        |p|| _        || _        || _        || _        || _	        |	| _
        g | _        | j                                        D ]o\  }
}|d         |d         z  }|||k     rd}n4t          t          j        || j        z
  | j        z            dz             }| j                            |           pdS )a_  
        Waveset (or mp3 set for that matter). Can be used to train
        with arbitrary sources. Each track should be one folder inside of `path`.
        The folder should contain files named `{source}.{ext}`.

        Args:
            root (Path or str): root folder for the dataset.
            metadata (dict): output from `build_metadata`.
            sources (list[str]): list of source names.
            segment (None or float): segment length in seconds. If `None`, returns entire tracks.
            shift (None or float): stride in seconds bewteen samples.
            normalize (bool): normalizes input audio, **based on the metadata content**,
                i.e. the entire track is normalized, not individual extracts.
            samplerate (int): target sample rate. if the file sample rate
                is different, it will be resampled on the fly.
            channels (int): target nb of channels. if different, will be
                changed onthe fly.
            ext (str): extension for audio files (default is .wav).

        samplerate and channels are converted on the fly.
        r   r   Nr   )r   rJ   r   metadatasegmentshiftr&   r%   channelsr   r'   num_examplesitemsintmathceilrB   )selfrJ   rS   r%   rT   rU   r&   r   rV   r'   r?   rG   track_durationexampless                 r4   __init__zWavset.__init__l   s    4 JJ	#H--%g
" $---// 	/ 	/JD$!(^d<.@@N.7":":ty.4<*G4:)UVVYZZ[[$$X....	/ 	/    c                 *    t          | j                  S N)sumrW   )r\   s    r4   __len__zWavset.__len__   s    4$%%%r`   c                 .    | j         |z  | | j         z  S rb   )rJ   r'   )r\   r?   r*   s      r4   get_filezWavset.get_file   s!    y4V"7TX"7"777r`   c                 b   t          | j        | j                  D ]\  }}||k    r||z  }| j        |         }d}d}| j        Ot	          |d         | j        z  |z            }t	          t          j        |d         | j        z                      }g }| j        D ]i}| 	                    ||          }	t          j        t          |	          ||          \  }
}t          |
| j                  }
|                    |
           jt!          j        |          }t%          j        ||d         | j                  }| j        r||d         z
  |d         z  }| j        rMt	          | j        | j        z            }|dd |f         }t-          j        |d||j        d         z
  f          }|c S d S )Nr   r   )frame_offsetr    r   r   .)ziprS   rW   rT   rY   rU   rZ   r[   r%   rf   r   r   r   r   rV   rB   thstackjuliusresample_fracr   r&   Fpadshape)r\   indexr?   r^   rG   r    offsetwavsr*   r+   r2   r3   exampler   s                 r4   __getitem__zWavset.__getitem__   s   !$-1BCC 	 	ND(  !=&DJF|'T,/$*<uDEE 4+=+L!M!MNN
D, ! !}}T622TJWWWQ,S$-@@C    htnnG*7D4FXXG~ A"T&\1T%[@| JT\DO;<<!#ww,/%!VgmB6G-G)HIINNN3	 	r`   )__name__
__module____qualname__EXTr_   rd   rf   rv    r`   r4   rP   rP   k   sf         qc	*/ */ */ */X& & &8 8 8    r`   rP   r2   c           
         t          | |          }t          j        t          |                                                                                    dd         }t          | j                  d|z   dz   z  }t          |          dz  }t          |          dz  }|                                s{t          j
        dk    rk|j                            dd	           t          || j                  }t          || j                  }t          j        ||gt#          |d
                     t          j        dk    rt'          j                     t          j        t#          |                    \  }}| j        ri }	n| j        | j        d}	t3          ||| j        | j        | j        | j        | j        | j                  }
t3          ||t:          gt=          | j                  z   f| j        | j        | j        d|	}|
|fS )z/Extract the wav datasets from the XP arguments.Nr8   wav_.jsontrainvalidr   Texist_okparentswr   rT   rU   rT   rU   r   rV   r&   r   rV   r&   )getattrhashlibsha1r   encode	hexdigestr   rS   is_filer	   rankparentmkdirrN   r%   jsondumpopen
world_sizer   barrierr   full_cvrT   rU   rP   r   rV   r&   r   list)argsr?   rF   sigmetadata_file
train_path
valid_pathr   r   kw_cv	train_set	valid_sets               r4   get_wav_datasetsr      s   4D
,s4yy''))
*
*
4
4
6
6rr
:C''6C<'+ABMdg%Jdg%J  "" <w|q'8'8""D$"???z4<88z4<88	5%.$}c":":;;;A9T-0011LE5| ? L4:>>z5$,#|4:"&/DM!%1 1 1I z57)d4<6H6H*H :"&/DM!%: :38: :I ir`   c                      dd l } t          t          j        d                   dz  dz  }|                     t          |d                    }|d         S )Nr   configszmus.yamlrvalidation_tracks)yamlr   musdb__path__	safe_loadr   )r   
setup_pathsetups      r4   _get_musdb_validr      sP    KKKenQ'((94zAJNN4
C0011E$%%r`   c           
      V  
 t          j        t          | j                                                                                            dd         }t          | j                  d|z   dz   z  }t          | j                  dz  }|                                sdt          j
        dk    rT|j                            dd           t          || j                  }t          j        |t#          |d	                     t          j        d
k    rt'          j                     t          j        t#          |                    }t-                      
| j        r|}n 
fd|                                D             }
fd|                                D             }| j        ri }n| j        | j        d}t9          ||| j        | j        | j        | j        | j        | j                  }t9          ||t@          gtC          | j                  z   f| j        | j        | j        d|}	||	fS )z0Extract the musdb dataset from the XP arguments.Nr8   musdb_r~   r   r   Tr   r   r   c                 $    i | ]\  }}|v	||S r{   r{   .0r?   rG   valid_trackss      r4   
<dictcomp>z*get_musdb_wav_datasets.<locals>.<dictcomp>   s*    dddt4WcKcKc$KcKcKcr`   c                 $    i | ]\  }}|v 	||S r{   r{   r   s      r4   r   z*get_musdb_wav_datasets.<locals>.<dictcomp>   s)    \\\ZT4t|G[G[dDG[G[G[r`   r   r   r   )"r   r   r   r   r   r   r   rS   r   r	   r   r   r   rN   r%   r   r   r   r   r   r   r   r   train_validrX   r   rT   rU   rP   r   rV   r&   r   r   )r   r   r   rJ   rS   metadata_trainmetadata_validr   r   r   r   s             @r4   get_musdb_wav_datasetsr      s   
,s4:--//
0
0
:
:
<
<RaR
@C''8c>G+CDM
g%D  "" 6w|q'8'8""D$"???!$55	(D44555Aym,,--H#%%L e!ddddx~~7G7Gddd\\\\8>>3C3C\\\N| ? L4:>>t^T\#|4:"&/DM!%1 1 1I t^gYdl9K9K-K :"&/DM!%: :38: :I ir`   )r2   ) __doc__collectionsr   r   rZ   r   r=   pathlibr   rD   r   rm   torchrk   r   
torchaudior   torch.nnr   ro   r,   r    r	   r   rz   r5   rN   rP   r   r   r   r{   r`   r4   <module>r      s   5 4 # # # # # #    				                        $ $ $ $ $ $ ) ) ) ) ) )      
 /3 -X -X -X -X` -1c    :M M M M M M M M`       :& & &         r`   