
    v-jO                        U d dl mZ d dlZd dlmZ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 ered	         Zd
ed<   ed         Zd
ed<   g Z G d de          ZdS )    )annotationsN)TYPE_CHECKINGAnyLiteral
NamedTuple)	TypeAlias)	DATA_HOME)download   )AudioClassificationDataset)traindevr   _ModeLiteral)rawmelspectrogrammfcclogmelspectrogramspectrogram_FeatTypeLiteralc                      e Zd ZU dZdddZded<   g dZded	<   ej        	                    d
dd          Z
ded<   ej        	                    d
d          Zded<    G d de          Z	 	 	 	 d&d' fd!Zd(d#Zd)d%Z xZS )*ESC50a  
    The ESC-50 dataset is a labeled collection of 2000 environmental audio recordings
    suitable for benchmarking methods of environmental sound classification. The dataset
    consists of 5-second-long recordings organized into 50 semantical classes (with
    40 examples per class)

    Reference:
        ESC: Dataset for Environmental Sound Classification
        http://dx.doi.org/10.1145/2733373.2806390

    Args:
       mode (str, optional): It identifies the dataset mode (train or dev). Default:train.
       split (int, optional): It specify the fold of dev dataset. Default:1.
       feat_type (str, optional): It identifies the feature type that user wants to extract of an audio file. Default:raw.
       archive(dict, optional): it tells where to download the audio archive. Default:None.

    Returns:
        :ref:`api_paddle_io_Dataset`. An instance of ESC50 dataset.

    Examples:

        .. code-block:: python

            >>> # doctest: +TIMEOUT(60)
            >>> import paddle

            >>> mode = 'dev'
            >>> esc50_dataset = paddle.audio.datasets.ESC50(mode=mode,  # type: ignore[arg-type]
            ...                                         feat_type='raw')
            >>> for idx in range(5):
            ...     audio, label = esc50_dataset[idx]
            ...     # do something with audio, label
            ...     print(audio.shape, label)
            ...     # [audio_data_length] , label_id
            [220500] 0
            [220500] 14
            [220500] 36
            [220500] 36
            [220500] 19

            >>> esc50_dataset = paddle.audio.datasets.ESC50(mode=mode,  # type: ignore[arg-type]
            ...                                         feat_type='mfcc',
            ...                                         n_mfcc=40)
            >>> for idx in range(5):
            ...     audio, label = esc50_dataset[idx]
            ...     # do something with mfcc feature, label
            ...     print(audio.shape, label)
            ...     # [feature_dim, length] , label_id
            [40, 1723] 0
            [40, 1723] 14
            [40, 1723] 36
            [40, 1723] 36
            [40, 1723] 19

    z<https://paddleaudio.bj.bcebos.com/datasets/ESC-50-master.zip 7771e4b9d86d0945acce719c7a59305a)urlmd5zdict[str, str]archive)2DogRoosterPigCowFrogCatHenzInsects (flying)SheepCrowRainz	Sea waveszCrackling fireCricketszChirping birdszWater dropsWindzPouring waterzToilet flushThunderstormzCrying babySneezingClapping	BreathingCoughing	FootstepsLaughingzBrushing teethSnoringzDrinking, sippingz
Door knockzMouse clickzKeyboard typingzDoor, wood creakszCan openingzWashing machinezVacuum cleanerzClock alarmz
Clock tickzGlass breaking
HelicopterChainsawSirenzCar hornEngineTrainzChurch bellsAirplane	FireworkszHand sawz	list[str]
label_listzESC-50-mastermetaz	esc50.csvstraudio
audio_pathc                  V    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   d	S )
ESC50.meta_infor9   filenamefoldtargetcategoryesc10src_filetakeN)__name__
__module____qualname____annotations__     [/var/www/html/banglarbhumi/venv/lib/python3.11/site-packages/paddle/audio/datasets/esc50.py	meta_infor=      sO         			


					rJ   rL   r   r   r   Nmoder   splitint	feat_typer   dict[str, str] | Nonekwargsr   returnNonec                    |t          dd          v sJ d|             ||| _        |                     ||          \  }} t                      j        d|||d| d S )Nr      zCThe selected split should be integer, and 1 <= split <= 5, but got )fileslabelsrP   rI   )ranger   	_get_datasuper__init__)	selfrM   rN   rP   r   rR   rW   rX   	__class__s	           rK   r\   zESC50.__init__   s     a###YRWYY $## "DLtU33v 	
)	
 	
?E	
 	
 	
 	
 	
rJ   list[meta_info]c           	     n   g }t          t          j                            t          | j                  d          5 }|                                dd          D ]D}|                     | j        |	                                
                    d                      E	 d d d            n# 1 swxY w Y   |S )Nrr   ,)openospathjoinr	   r8   	readlinesappendrL   striprN   )r]   retrflines       rK   _get_meta_infozESC50._get_meta_info   s    "',,y$)44c:: 	Ebqrr* E E

>4>4::<<+=+=c+B+BCDDDDE	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 
s   A"B**B.1B.tuple[list[str], list[int]]c                   t           j                            t           j                            t          | j                            rGt           j                            t           j                            t          | j                            s3t          j	        | j
        d         t          | j
        d         d           |                                 }g }g }|D ]}|\  }}}	}
}
}
}
|dk    rst          |          |k    r`|                    t           j                            t          | j        |                     |                    t          |	                     |dk    rst          |          |k    r`|                    t           j                            t          | j        |                     |                    t          |	                     ||fS )Nr   r   T)
decompressr   )rd   re   isdirrf   r	   r;   isfiler8   r
   get_path_from_urlr   rm   rO   rh   )r]   rM   rN   rL   rW   rX   sampler>   r?   r@   _s              rK   rZ   zESC50._get_data   s    w}}GLLDO44
 
 	Y	 B BCC	 &U#U#	    ''))	 	+ 	+F17.HdFAq!Qw3t99#5#5RW\\)T_hOOPPPc&kk***w3t99#5#5RW\\)T_hOOPPPc&kk***f}rJ   )r   r   r   N)rM   r   rN   rO   rP   r   r   rQ   rR   r   rS   rT   )rS   r_   )rM   r   rN   rO   rS   rn   )rE   rF   rG   __doc__r   rH   r7   rd   re   rf   r8   r;   r   rL   r\   rm   rZ   __classcell__)r^   s   @rK   r   r   +   sD        6 6r N1 G    
8 8 8J 8 8 8 8r _fkBBDBBBBgll?G<<J<<<<    J    %&+)-
 
 
 
 
 
 
$          rJ   r   )
__future__r   rd   typingr   r   r   r   typing_extensionsr   paddle.dataset.commonr	   paddle.utilsr
   datasetr   r   rH   r   __all__r   rI   rJ   rK   <module>r      s(   # " " " " " " 				 : : : : : : : : : : : : ' ' ' ' ' ' + + + + + + ! ! ! ! ! ! / / / / / / %	L     #*	#     w w w w w& w w w w wrJ   