
    ~Vji!              
           d dl Z d dlmZ d dlmZmZ d dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ dd	d
ddg ddddddddg ddddddddg ddddZ G d de
          ZdS )    N)Path)TupleUnion)Tensor)Dataset)download_url_to_file)_extract_tarTEDLIUM_release1z:http://www.openslr.org/resources/7/TEDLIUM_release1.tar.gz@30301975fd8c5cac4040c261c0852f57cfa8adbbad2ce78e77e4986957445f27 train)r   testdevzTEDLIUM.150K.dic)folder_in_archiveurlchecksum	data_pathsubsetsupported_subsetsdictTEDLIUM_release2z;http://www.openslr.org/resources/19/TEDLIUM_release2.tar.gz@93281b5fcaaae5c88671c9d000b443cb3c7ea3499ad12010b3934ca41a7b9c58zTEDLIUM.152k.diczTEDLIUM_release-3z9http://www.openslr.org/resources/51/TEDLIUM_release-3.tgz@ad1e454d14d1ad550bc2564c462d87c7a7ec83d4dc2b9210f22ab4973b9eccdbzdata/)release1release2release3c                       e Zd ZdZ	 	 	 	 ddeeef         deded	ed
eddfdZdede	dede
ee	ee	e	e	f         fdZddededede	dee	gf
dZde	de
ee	ee	e	e	f         fdZde	fdZed             ZdS )TEDLIUMa  *Tedlium* :cite:`rousseau2012tedlium` dataset (releases 1,2 and 3).

    Args:
        root (str or Path): Path to the directory where the dataset is found or downloaded.
        release (str, optional): Release version.
            Allowed values are ``"release1"``, ``"release2"`` or ``"release3"``.
            (default: ``"release1"``).
        subset (str, optional): The subset of dataset to use. Valid options are ``"train"``, ``"dev"``,
            and ``"test"``. Defaults to ``"train"``.
        download (bool, optional):
            Whether to download the dataset if it is not found at root path. (default: ``False``).
        audio_ext (str, optional): extension for audio file (default: ``".sph"``)
    r   r   F.sphrootreleaser   download	audio_extreturnNc                    || _         |t                                          v r>t          |         d         }t          |         d         }|r|nt          |         d         }n:t          d                    |t                                                              |t          |         d         vr4t          d                    |t          |         d                             t          j        |          }t
          j                            |          }t
          j        	                    ||          }	|
                    d          d         }|d	k    rf|d
k    r8t
          j        	                    ||t          |         d                   | _        n`t
          j        	                    ||d|          | _        n8t
          j        	                    ||t          |         d         |          | _        |rxt
          j                            | j                  sSt
          j                            |	          s%t          |         d         }
t          ||	|
           t          |	           n<t
          j                            | j                  st          d| j         d          g | _        t
          j        	                    | j        d          }t%          t          j        |                    D ]Ί                    d          rt
          j        	                    | j        d          }t+          |          5 }t-          |                                          }                    dd          | j                            fdt5          |          D                        d d d            n# 1 swxY w Y   t
          j        	                    ||t          |         d                   | _        d | _        d S )Nr   r   r   zFThe release {} does not match any of the supported tedlium releases{} r   zDThe subset {} does not match any of the supported tedlium subsets{} .r   r   r   r   legacyr   )hash_prefixz	The path zT doesn't exist. Please check the ``root`` path or set `download=True` to download itstm.stmr   c              3       K   | ]}|fV  	d S )N ).0linefiles     U/root/voice-cloning/.venv/lib/python3.11/site-packages/torchaudio/datasets/tedlium.py	<genexpr>z#TEDLIUM.__init__.<locals>.<genexpr>~   s'      )L)L44,)L)L)L)L)L)L    r   )
_ext_audio_RELEASE_CONFIGSkeysRuntimeErrorformatosfspathpathbasenamejoinsplit_pathisdirisfiler   r	   exists	_filelistsortedlistdirendswithopenlen	readlinesreplaceextendrange
_dict_path_phoneme_dict)selfr    r!   r   r"   r#   r   r   r;   archiver   stm_pathflr/   s                 @r0   __init__zTEDLIUM.__init__:   s    $&++---- 0 9:M N"7+E2C%NVV+;G+DX+NFF X__$))++    )'23FGGGV]]$W-.AB    y7##C((',,tX..>>#&&q)j    W\\$0ACST[C\]hCijj

W\\$0A8VTT

d,=?OPW?XYd?egmnnDJ 	7==,, &w~~g.. M/8DH(g8LLLLW%%%7>>$*-- "[
 [ [ [   7<<
E222:h//00 	M 	MD}}V$$ M7<<
E4@@(^^ MqAKKMM**A<<33DN)))L)L)L)L588)L)L)LLLLM M M M M M M M M M M M M M M
 ',,t->@PQX@YZ`@abb!s   A+N==O	O	fileidr.   r:   c                    t           j                            |d|          }t          |dz             5 }|                                |         }|                    dd          \  }}}	}
}}}ddd           n# 1 swxY w Y   t           j                            |d|          }|                     || j        z   |
|          \  }}|||||	|fS )a  Loads a TEDLIUM dataset sample given a file name and corresponding sentence name.

        Args:
            fileid (str): File id to identify both text and audio files corresponding to the sample
            line (int): Line identifier for the sample inside the text file
            path (str): Dataset root path

        Returns:
            (Tensor, int, str, int, int, int):
            ``(waveform, sample_rate, transcript, talk_id, speaker_id, identifier)``
        r)   r*       Nsph)
start_timeend_time)r8   r:   r<   rF   rH   r=   _load_audior3   )rN   rT   r.   r:   transcript_pathrQ   
transcripttalk_id_
speaker_idrY   rZ   
identifier	wave_pathwaveformsample_rates                   r0   _load_tedlium_itemzTEDLIUM._load_tedlium_item   s    ',,tUF;;/F*++ 	lqt,JS]ScScdgijSkSkPGQ
J*j	l 	l 	l 	l 	l 	l 	l 	l 	l 	l 	l 	l 	l 	l 	l GLLuf55	 $ 0 0T_1LYcnv 0 w w++z7J
SSs   9A99A= A=>  rY   rZ   rd   c                     t          t          |          |z            }t          t          |          |z            }|||z
  d}t          j        |fi |S )a"  Default load function used in TEDLIUM dataset, you can overwrite this function to customize functionality
        and load individual sentences from a full ted audio talk file.

        Args:
            path (str): Path to audio file
            start_time (int): Time in seconds where the sample sentence stars
            end_time (int): Time in seconds where the sample sentence finishes
            sample_rate (float, optional): Sampling rate

        Returns:
            [Tensor, int]: Audio tensor representation and sample rate
        )frame_offset
num_frames)intfloat
torchaudioload)rN   r:   rY   rZ   rd   kwargss         r0   r[   zTEDLIUM._load_audio   s`     z**[899
uX455",Hz<QRRt..v...r2   nc                 Z    | j         |         \  }}|                     ||| j                  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:
                Transcript
            int:
                Talk ID
            int:
                Speaker ID
            int:
                Identifier
        )rB   re   r>   )rN   ro   rT   r.   s       r0   __getitem__zTEDLIUM.__getitem__   s.    , ~a(&&vtTZ@@@r2   c                 *    t          | j                  S )zTEDLIUM dataset custom function overwritting len default behaviour.

        Returns:
            int: TEDLIUM dataset length
        )rG   rB   )rN   s    r0   __len__zTEDLIUM.__len__   s     4>"""r2   c                 t   | j         si | _         t          | j        dd          5 }|                                D ]M}|                                                                }t          |dd                   | j         |d         <   N	 ddd           n# 1 swxY w Y   | j                                         S )zdict[str, tuple[str]]: Phonemes. Mapping from word to tuple of phonemes.
        Note that some words have empty phonemes.
        rzutf-8)encoding   Nr   )rM   rF   rL   rH   stripr=   tuplecopy)rN   rQ   r.   contents       r0   phoneme_dictzTEDLIUM.phoneme_dict   s    ! 	H!#DdosW=== HKKMM H HD"jjll0022G5:7122;5G5GD&wqz22HH H H H H H H H H H H H H H H !&&(((s   A#BBB)r   r   Fr   )rf   )__name__
__module____qualname____doc__r   strr   boolrS   rj   r   r   re   rk   r[   rq   rs   propertyr|   r,   r2   r0   r   r   +   s        " "G" G"CIG" G" 	G"
 G" G" 
G" G" G" G"RT TC Ts TuVUXZ]_bdgilMlGm T T T T,/ / / /% /VY /gmorfs / / / /(AS AU63S#s+J%K A A A A2# # # # # ) ) X) ) )r2   r   )r8   pathlibr   typingr   r   rl   torchr   torch.utils.datar   torchaudio._internalr   torchaudio.datasets.utilsr	   r4   r   r,   r2   r0   <module>r      sL   				                         $ $ $ $ $ $ 5 5 5 5 5 5 2 2 2 2 2 2
 0KV555"  0LV555"  1JV555" '  >o) o) o) o) o)g o) o) o) o) o)r2   