# Charger les données audio

Vous pouvez charger un jeu de données audio à l'aide de la fonctionnalité [Audio](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Audio), qui décode et rééchantillonne automatiquement les fichiers audio lors de l'accès aux exemples. Le décodage audio est basé sur le package python [`torchcodec`](https://github.com/pytorch/torchcodec), qui utilise la bibliothèque C [`FFmpeg`](https://www.ffmpeg.org/) en arrière-plan.

## Installation

Pour travailler avec des jeux de données audio, vous devez avoir installé les dépendances `audio`. Consultez le guide [d'installation](./installation#audio) pour savoir comment les installer.

## Fichiers locaux

Vous pouvez charger votre propre jeu de données en utilisant les chemins d’accès à vos fichiers audio. Utilisez la fonction [cast_column()](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset.cast_column) pour prendre une colonne de chemins d’accès aux fichiers audio et la convertir en fonctionnalité [Audio](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Audio) :

```py
>>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", "path/to/audio_2", ..., "path/to/audio_n"]}).cast_column("audio", Audio())
>>> audio_dataset[0]["audio"]
<datasets.features._torchcodec.AudioDecoder object at 0x11642b6a0>
```

## AudioFolder

Vous pouvez également charger un jeu de données avec le constructeur de jeu de données `AudioFolder`. Il n’est pas nécessaire d’écrire un chargeur de données personnalisé, ce qui le rend utile pour créer et charger rapidement des jeux de données audio contenant plusieurs milliers de fichiers audio.

## AudioFolder avec métadonnées

Pour lier vos fichiers audio aux informations de métadonnées, assurez-vous que votre jeu de données contient un fichier `metadata.csv`. La structure de votre jeu de données peut ressembler à :

```
folder/train/metadata.csv
folder/train/first_audio_file.mp3
folder/train/second_audio_file.mp3
folder/train/third_audio_file.mp3
```

Votre fichier `metadata.csv` doit contenir une colonne `file_name` qui associe les fichiers audio à leurs métadonnées. Un exemple de fichier `metadata.csv` pourrait ressembler à ceci :

```text
file_name,transcription
first_audio_file.mp3,znowu się duch z ciałem zrośnie w młodocianej wstaniesz wiosnie i możesz skutkiem tych leków umierać wstawać wiek wieków dalej tam były przestrogi jak siekać głowę jak nogi
second_audio_file.mp3,już u źwierzyńca podwojów król zasiada przy nim książęta i panowie rada a gdzie wzniosły krążył ganek rycerze obok kochanek król skinął palcem zaczęto igrzysko
third_audio_file.mp3,pewnie kędyś w obłędzie ubite minęły szlaki zaczekajmy dzień jaki poślemy szukać wszędzie dziś jutro pewnie będzie posłali wszędzie sługi czekali dzień i drugi gdy nic nie doczekali z płaczem chcą jechać dali
```

`AudioFolder` chargera les données audio et créera une colonne `transcription` contenant les textes de `metadata.csv` :

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
>>> # OR locally:
>>> dataset = load_dataset("/path/to/folder")
```

Pour les jeux de données locaux, cela équivaut à passer `audiofolder` manuellement dans [load_dataset()](/docs/datasets/v5.2.0/fr/package_reference/loading_methods#datasets.load_dataset) et le répertoire dans `data_dir` :

```py
>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")
```

Les métadonnées peuvent également être spécifiées au format JSON Lines, auquel cas utilisez `metadata.jsonl` comme nom du fichier de métadonnées. Ce format est utile dans les scénarios où l’une des colonnes est complexe, par exemple une liste de nombres flottants, afin d’éviter les erreurs d’analyse ou la lecture des valeurs complexes en tant que chaînes de caractères.

Pour ignorer les informations du fichier de métadonnées, définissez `drop_metadata=True` dans [load_dataset()](/docs/datasets/v5.2.0/fr/package_reference/loading_methods#datasets.load_dataset) :

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_with_metadata", drop_metadata=True)
```

Si vous n’avez pas de fichier de métadonnées, `AudioFolder` infère automatiquement le nom de l’étiquette à partir du nom du répertoire. Si vous souhaitez supprimer les étiquettes créées automatiquement, définissez `drop_labels=True`. Dans ce cas, votre jeu de données ne contiendra qu’une colonne audio :

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_without_metadata", drop_labels=True)
```

Enfin, l'argument `filters` permet de charger uniquement un sous-ensemble du jeu de données, en fonction d'une condition sur l'étiquette ou les métadonnées. C'est particulièrement utile si les métadonnées sont au format Parquet, car ce format permet un filtrage rapide. Il est également recommandé d'utiliser cet argument avec `streaming=True`, car par défaut le jeu de données est entièrement téléchargé avant le filtrage.

```python
>>> filters = [("label", "=", 0)]
>>> dataset = load_dataset("username/dataset_name", streaming=True, filters=filters)
```

> [!TIP]
> Pour plus d'informations sur la création de votre propre jeu de données `AudioFolder`, consultez le guide [Créer un jeu de données audio](./audio_dataset).

Pour un guide sur la façon de charger n'importe quel type de jeu de données, consultez le guide de chargement général.

## Décodage audio

Par défaut, les fichiers audio sont décodés séquentiellement en tant qu'objets [`AudioDecoder`](https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.AudioDecoder.html#torchcodec.decoders.AudioDecoder) de torchcodec lors de l'itération sur un jeu de données. Il est toutefois possible d'accélérer considérablement le jeu de données en utilisant un décodage multithreadé :

```python
>>> import os
>>> num_threads = num_threads = min(32, (os.cpu_count() or 1) + 4)
>>> dataset = dataset.decode(num_threads=num_threads)
>>> for example in dataset:  # up to 20 times faster !
...     ...
```

Vous pouvez activer le multithreading à l'aide de `num_threads`. Cela est particulièrement utile pour accélérer le streaming de données distantes. Cependant, cela peut être plus lent que `num_threads=0` pour des données locales sur des disques rapides.

Si vous n'êtes pas intéressé par les images décodées en tableaux NumPy et préférez accéder au chemin/aux octets, vous pouvez désactiver le décodage :

```python
>>> dataset = dataset.decode(False)
```

Remarque : [IterableDataset.decode()](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset.decode) n'est actuellement disponible que pour les jeux de données en flux.

