
    ~Vji9                         d dl Z d dlmZ d dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZ dZd	Zd
ZdZdZdddZd Zdededeeeeeef         fdZ G d de
          ZdS )    N)Path)OptionalTupleUnion)Tensor)Dataset)download_url_to_file)_extract_tar_load_waveformSpeechCommandsspeech_commands_v0.02_nohash__background_noise_i>  @743935421bb51cccdb6bdd152e04c5c70274e935c82119ad7faeec31780d811d@af14739ee7dc311471de98f5f9d2c9191b18aedfe957f4a6ff791c709868ff58)z@http://download.tensorflow.org/data/speech_commands_v0.01.tar.gzz@http://download.tensorflow.org/data/speech_commands_v0.02.tar.gzc                      g }|D ]Z}t           j                             |          }t          |          5 }| fd|D             z  }d d d            n# 1 swxY w Y   [|S )Nc           	          g | ]Q}t           j                            t           j                            |                                                    RS  )ospathnormpathjoinstrip).0lineroots     \/root/voice-cloning/.venv/lib/python3.11/site-packages/torchaudio/datasets/speechcommands.py
<listcomp>z_load_list.<locals>.<listcomp>   sA    ^^^drw''T4::<<(H(HII^^^    )r   r   r   open)r   	filenamesoutputfilenamefilepathfileobjs   `     r   
_load_listr&      s    F _ _7<<h//(^^ 	_w^^^^V]^^^^F	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_ 	_Ms   AA	A	r$   r   returnc                    t           j                            | |          }t           j                            |          \  }}t           j                            |          \  }}t           j                            |          \  }}t           j                            |          \  }}|                    t
                    \  }}	t          |	          }	|t          |||	fS N)r   r   relpathsplitsplitextHASH_DIVIDERintSAMPLE_RATE)
r$   r   r*   reldirr#   _labelspeaker
speaker_idutterance_numbers
             r   _get_speechcommands_metadatar6      s    gooh--Gw}}W--FHw}}V$$HAu !!(++JGQ!!'**JGQ#*==#>#> J +,,K
4DDDr   c                       e Zd ZdZeeddfdeeef         dedede	de
e         d	dfd
Zded	eeeeeef         fdZded	eeeeeef         fdZd	efdZdS )SPEECHCOMMANDSa,  *Speech Commands* :cite:`speechcommandsv2` dataset.

    Args:
        root (str or Path): Path to the directory where the dataset is found or downloaded.
        url (str, optional): The URL to download the dataset from,
            or the type of the dataset to dowload.
            Allowed type values are ``"speech_commands_v0.01"`` and ``"speech_commands_v0.02"``
            (default: ``"speech_commands_v0.02"``)
        folder_in_archive (str, optional):
            The top-level directory of the dataset. (default: ``"SpeechCommands"``)
        download (bool, optional):
            Whether to download the dataset if it is not found at root path. (default: ``False``).
        subset (str or None, optional):
            Select a subset of the dataset [None, "training", "validation", "testing"]. None means
            the whole dataset. "validation" and "testing" are defined in "validation_list.txt" and
            "testing_list.txt", respectively, and "training" is the rest. Details for the files
            "validation_list.txt" and "testing_list.txt" are explained in the README of the dataset
            and in the introduction of Section 7 of the original paper and its reference 12. The
            original paper can be found `here <https://arxiv.org/pdf/1804.03209.pdf>`_. (Default: ``None``)
    FNr   urlfolder_in_archivedownloadsubsetr'   c                    ||dvrt          d          |dv r'd}d}t          j                            |||z             }t          j        |          }t          j                            ||          | _        t          j                            |          }t          j                            ||          }	|                    dd          d         }t          j                            ||          }t          j                            ||          | _        |rt          j        	                    | j                  sat          j        
                    |	          s-t                              |d           }
t          ||	|
	           t          |	| j                   n<t          j                            | j                  st!          d
| j         d          |dk    rt#          | j        d          | _        d S |dk    rt#          | j        d          | _        d S |dk    rvt'          t#          | j        dd                    t)          d t+          | j                                      d          D                       }fd|D             | _        d S t)          d t+          | j                                      d          D                       }d |D             | _        d S )N)training
validationtestingzSWhen `subset` is not None, it must be one of ['training', 'validation', 'testing'].)zspeech_commands_v0.01r   z$http://download.tensorflow.org/data/z.tar.gz.   r   )hash_prefixz	The path zT doesn't exist. Please check the ``root`` path or set `download=True` to download itr?   zvalidation_list.txtr@   ztesting_list.txtr>   c              3   4   K   | ]}t          |          V  d S r)   strr   ps     r   	<genexpr>z*SPEECHCOMMANDS.__init__.<locals>.<genexpr>|   (      MMqCFFMMMMMMr   z*/*.wavc                 z    g | ]7}t           |v t          |vt          j                            |          v5|8S r   )r-   EXCEPT_FOLDERr   r   r   )r   wexcludess     r   r   z+SPEECHCOMMANDS.__init__.<locals>.<listcomp>}   sT       1$$a)?)?BGDTDTUVDWDW_gDgDg DgDgDgr   c              3   4   K   | ]}t          |          V  d S r)   rE   rG   s     r   rI   z*SPEECHCOMMANDS.__init__.<locals>.<genexpr>   rJ   r   c                 6    g | ]}t           |v t          |v|S r   )r-   rL   )r   rM   s     r   r   z+SPEECHCOMMANDS.__init__.<locals>.<listcomp>   s-    ^^^!1B1B}\]G]G]AG]G]G]r   )
ValueErrorr   r   r   fspath_archivebasenamersplit_pathisdirisfile
_CHECKSUMSgetr	   r
   existsRuntimeErrorr&   _walkersetsortedr   glob)selfr   r9   r:   r;   r<   base_urlext_archiverT   archivechecksumwalkerrN   s               @r   __init__zSPEECHCOMMANDS.__init__H   s    &0U"U"Ursss 
 
 
 >H#K',,x{):;;C yT+<==7##C((',,tX..??3**1-GLL):HEEW\\$(9::
 	7==,, 2w~~g.. M)~~c488H(g8LLLLWdj1117>>$*-- "[
 [ [ [  
 \!!%dj2GHHDLLLy  %dj2DEEDLLLz!!:dj2GI[\\]]HMMD,<,<,A,A),L,LMMMMMF     DLLL MMD,<,<,A,A),L,LMMMMMF^^v^^^DLLLr   nc                 F    | j         |         }t          || j                  S )a  Get metadata for the n-th sample from the dataset. Returns filepath instead of waveform,
        but otherwise returns the same fields as :py:func:`__getitem__`.

        Args:
            n (int): The index of the sample to be loaded

        Returns:
            Tuple of the following items;

            str:
                Path to the audio
            int:
                Sample rate
            str:
                Label
            str:
                Speaker ID
            int:
                Utterance number
        )r]   r6   rS   )ra   rh   fileids      r   get_metadatazSPEECHCOMMANDS.get_metadata   s!    * a+FDMBBBr   c                     |                      |          }t          | j        |d         |d                   }|f|dd         z   S )a  Load 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
            str:
                Label
            str:
                Speaker ID
            int:
                Utterance number
        r      N)rk   r   rS   )ra   rh   metadatawaveforms       r   __getitem__zSPEECHCOMMANDS.__getitem__   sG    ( $$Q''!$-!hqkJJ{Xabb\))r   c                 *    t          | j                  S r)   )lenr]   )ra   s    r   __len__zSPEECHCOMMANDS.__len__   s    4<   r   )__name__
__module____qualname____doc__URLFOLDER_IN_ARCHIVEr   rF   r   boolr   rg   r.   r   rk   r   rp   rs   r   r   r   r8   r8   2   s        0 !2 $<_ <_CI<_ <_ 	<_
 <_ <_ 
<_ <_ <_ <_|Cc CeCc3,C&D C C C C0*S *U63S#+E%F * * * *0! ! ! ! ! ! !r   r8   )r   pathlibr   typingr   r   r   torchr   torch.utils.datar   torchaudio._internalr	   torchaudio.datasets.utilsr
   r   ry   rx   r-   rL   r/   rY   r&   rF   r.   r6   r8   r   r   r   <module>r      sO   				       ) ) ) ) ) ) ) ) ) )       $ $ $ $ $ $ 5 5 5 5 5 5 B B B B B B B B$ $ IK IK 
  E3 Ec EeCcSVX[D[>\ E E E E(E! E! E! E! E!W E! E! E! E! E!r   