# Carregar dados de áudio

Você pode carregar um conjunto de dados de áudio usando o recurso [Audio](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Audio), que decodifica e reamostra automaticamente os arquivos de áudio quando você acessa os exemplos. A decodificação de áudio é baseada no pacote python [`torchcodec`](https://github.com/pytorch/torchcodec), que usa a biblioteca C [`FFmpeg`](https://www.ffmpeg.org/) por baixo dos panos.

## Instalação

Para trabalhar com conjuntos de dados de áudio, você precisa ter as dependências de `audio` instaladas. Consulte o guia de [instalação](./installation#audio) para aprender como instalá-las.

## Arquivos locais

Você pode carregar seu próprio conjunto de dados usando os caminhos para seus arquivos de áudio. Use a função [cast_column()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.cast_column) para pegar uma coluna de caminhos de arquivos de áudio e convertê-la para o recurso [Audio](/docs/datasets/v5.2.0/pt/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

Você também pode carregar um conjunto de dados com um construtor de conjunto de dados `AudioFolder`. Ele não exige a criação de um dataloader personalizado, o que o torna útil para criar e carregar rapidamente conjuntos de dados de áudio com vários milhares de arquivos de áudio.

## AudioFolder com metadados

Para vincular seus arquivos de áudio às informações de metadados, verifique se seu conjunto de dados possui um arquivo `metadata.csv`. A estrutura do seu conjunto de dados pode ser:

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

O arquivo `metadata.csv` deve ter uma coluna `file_name` que vincula os arquivos de áudio aos seus metadados. Um exemplo de arquivo `metadata.csv` pode ser:

```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` carregará dados de áudio e criará uma coluna `transcription` contendo os textos de `metadata.csv`:

```py
>>> from datasets import load_dataset

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

Para conjuntos de dados locais, isso é equivalente a passar `audiofolder` manualmente em [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset) e o diretório em `data_dir`:

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

Metadados também podem ser especificados como JSON Lines, caso em que use `metadata.jsonl` como o nome do arquivo de metadados. Esse formato é útil em cenários em que uma das colunas é complexa, por exemplo, uma lista de floats, para evitar erros de análise ou a leitura dos valores complexos como strings.

Para ignorar as informações no arquivo de metadados, defina `drop_metadata=True` em [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

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

Se você não tiver um arquivo de metadados, o `AudioFolder` infere automaticamente o nome do rótulo a partir do nome do diretório. Se você quiser descartar os rótulos criados automaticamente, defina `drop_labels=True`. Nesse caso, seu conjunto de dados conterá apenas uma coluna de áudio:

```py
>>> from datasets import load_dataset

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

Por fim, o argumento `filters` permite carregar apenas um subconjunto do conjunto de dados, com base em uma condição sobre o rótulo ou os metadados. Isso é especialmente útil se os metadados estiverem em formato Parquet, pois esse formato permite filtragem rápida. Também é recomendado usar este argumento com `streaming=True`, porque, por padrão, o conjunto de dados é totalmente baixado antes da filtragem.

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

> [!TIP]
> Para mais informações sobre a criação do seu próprio conjunto de dados `AudioFolder`, consulte o guia [Criar um conjunto de dados de áudio](./audio_dataset).

Para um guia sobre como carregar qualquer tipo de conjunto de dados, consulte o guia de carregamento geral.

## Decodificação de áudio

Por padrão, os arquivos de áudio são decodificados sequencialmente como objetos [`AudioDecoder`](https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.AudioDecoder.html#torchcodec.decoders.AudioDecoder) do torchcodec ao iterar sobre um conjunto de dados. No entanto, é possível acelerar significativamente o conjunto de dados usando decodificação multithreaded:

```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 !
...     ...
```

Você pode habilitar a multithreading usando `num_threads`. Isso é especialmente útil para acelerar o streaming de dados remotos. No entanto, pode ser mais lento que `num_threads=0` para dados locais em discos rápidos.

Se você não se interessa pelas imagens decodificadas como arrays NumPy e deseja acessar o caminho/bytes em vez disso, você pode desabilitar a decodificação:

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

Observação: [IterableDataset.decode()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.IterableDataset.decode) está disponível apenas para datasets em streaming no momento.

