# Buat dataset audio

Anda dapat membagikan dataset dengan tim Anda atau dengan siapa pun di komunitas dengan membuat repositori dataset di Hugging Face Hub:

```py
from datasets import load_dataset

dataset = load_dataset("<username>/my_dataset")
```

Terdapat beberapa metode untuk membuat dan membagikan dataset audio:

- Buat dataset audio dari file lokal di python dengan [Dataset.push_to_hub()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.push_to_hub). Ini adalah cara mudah yang hanya membutuhkan beberapa langkah di python.

- Buat repositori dataset audio dengan builder `AudioFolder`. Ini adalah solusi tanpa kode untuk dengan cepat membuat dataset audio dengan beberapa ribu file audio.

> [!TIP]
> Anda dapat mengontrol akses ke dataset Anda dengan meminta pengguna untuk membagikan informasi kontak mereka terlebih dahulu. Lihat panduan [Gated datasets](https://huggingface.co/docs/hub/datasets-gated) untuk informasi lebih lanjut tentang cara mengaktifkan fitur ini di Hub.

## File lokal

Anda dapat memuat dataset Anda sendiri menggunakan path ke file audio Anda. Gunakan fungsi [cast_column()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.cast_column) untuk mengambil kolom berisi path file audio, lalu mengubahnya menjadi fitur [Audio](/docs/datasets/v5.2.0/id/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>
```

Lalu unggah dataset ke Hugging Face Hub menggunakan [Dataset.push_to_hub()](/docs/datasets/v5.2.0/id/package_reference/main_classes#datasets.Dataset.push_to_hub):

```py
audio_dataset.push_to_hub("<username>/my_dataset")
```

Hal ini akan membuat repositori dataset yang berisi dataset audio Anda:

```
my_dataset/
├── README.md
└── data/
    └── train-00000-of-00001.parquet
```

## AudioFolder

`AudioFolder` adalah pembangun dataset yang dirancang untuk memuat dataset audio dengan ribuan file audio secara cepat tanpa mengharuskan Anda menulis kode apa pun.

> [!TIP]
> 💡 Lihat [hierarki pola Split](repository_structure#split-pattern-hierarchy) untuk mempelajari lebih lanjut tentang bagaimana `AudioFolder` membuat split dataset berdasarkan struktur repositori dataset Anda.

`AudioFolder` secara otomatis menyimpulkan label kelas dari dataset Anda berdasarkan nama direktori. Simpan dataset Anda dalam struktur direktori seperti:

```
folder/train/dog/golden_retriever.mp3
folder/train/dog/german_shepherd.mp3
folder/train/dog/chihuahua.mp3

folder/train/cat/maine_coon.mp3
folder/train/cat/bengal.mp3
folder/train/cat/birman.mp3
```

Jika dataset mengikuti struktur `AudioFolder`, maka Anda dapat memuatnya langsung dengan [load_dataset()](/docs/datasets/v5.2.0/id/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("username/dataset_name")
```

Ini setara dengan meneruskan `audiofolder` secara manual di [load_dataset()](/docs/datasets/v5.2.0/id/package_reference/loading_methods#datasets.load_dataset) dan direktori di `data_dir`:

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

Anda juga dapat menggunakan `audiofolder` untuk memuat dataset yang melibatkan beberapa split. Untuk melakukannya, direktori dataset Anda harus memiliki struktur berikut:

```
folder/train/dog/golden_retriever.mp3
folder/train/cat/maine_coon.mp3
folder/test/dog/german_shepherd.mp3
folder/test/cat/bengal.mp3
```

> [!WARNING]
> Jika semua file audio berada dalam satu direktori atau tidak berada pada level struktur direktori yang sama, kolom `label` tidak akan ditambahkan secara otomatis. Jika Anda membutuhkannya, tetapkan `drop_labels=False` secara eksplisit.

Jika ada informasi tambahan yang ingin Anda sertakan tentang dataset Anda, seperti teks caption atau bounding box, tambahkan sebagai file `metadata.csv` di folder Anda. Hal ini memungkinkan Anda dengan cepat membuat dataset untuk berbagai tugas computer vision seperti text captioning atau object detection. Anda juga dapat menggunakan file JSONL `metadata.jsonl` atau file Parquet `metadata.parquet`.

```
folder/train/metadata.csv
folder/train/0001.mp3
folder/train/0002.mp3
folder/train/0003.mp3
```

Anda juga dapat mengompres file audio Anda, dan dalam hal ini setiap file zip harus berisi file audio dan metadata

```
folder/train.zip
folder/test.zip
folder/validation.zip
```

File `metadata.csv` Anda harus memiliki field `file_name` atau `*_file_name` yang menghubungkan file audio dengan metadata-nya:

```csv
file_name,additional_feature
0001.mp3,This is a first value of a text feature you added to your audio files
0002.mp3,This is a second value of a text feature you added to your audio files
0003.mp3,This is a third value of a text feature you added to your audio files
```

atau menggunakan `metadata.jsonl`:

```jsonl
{"file_name": "0001.mp3", "additional_feature": "This is a first value of a text feature you added to your audio files"}
{"file_name": "0002.mp3", "additional_feature": "This is a second value of a text feature you added to your audio files"}
{"file_name": "0003.mp3", "additional_feature": "This is a third value of a text feature you added to your audio files"}
```

Di sini, `file_name` harus berupa nama file audio yang berada di samping file metadata. Secara lebih umum, ini harus berupa path relatif dari direktori yang berisi metadata ke file audio.

Anda dapat menunjuk ke lebih dari satu audio di setiap baris dalam dataset Anda, misalnya jika input dan output Anda sama-sama berupa file audio:

```jsonl
{"input_file_name": "0001.mp3", "output_file_name": "0001_output.mp3"}
{"input_file_name": "0002.mp3", "output_file_name": "0002_output.mp3"}
{"input_file_name": "0003.mp3", "output_file_name": "0003_output.mp3"}
```

Anda juga dapat mendefinisikan daftar file audio. Dalam hal itu, Anda perlu menamai field `file_names` atau `*_file_names`. Berikut adalah contohnya:

```jsonl
{"recordings_file_names": ["0001_r0.mp3", "0001_r1.mp3"], label: "same_person"}
{"recordings_file_names": ["0002_r0.mp3", "0002_r1.mp3"], label: "same_person"}
{"recordings_file_names": ["0003_r0.mp3", "0003_r1.mp3"], label: "different_person"}
```

## WebDataset

Format [WebDataset](https://github.com/webdataset/webdataset) didasarkan pada arsip TAR dan cocok untuk dataset audio besar. Anda dapat mengelompokkan file audio Anda ke dalam arsip TAR (misalnya 1GB file audio per arsip TAR) dan memiliki ribuan arsip TAR:

```
folder/train/00000.tar
folder/train/00001.tar
folder/train/00002.tar
...
```

Di arsip, setiap contoh terdiri dari file-file yang berbagi prefiks yang sama:

```
e39871fd9fd74f55.mp3
e39871fd9fd74f55.json
f18b91585c4d3f3e.mp3
f18b91585c4d3f3e.json
ede6e66b2fb59aab.mp3
ede6e66b2fb59aab.json
ed600d57fcee4f94.mp3
ed600d57fcee4f94.json
...
```

Anda dapat menyimpan label/keterangan/kotak batas file audio Anda menggunakan file JSON atau teks, misalnya.

Muat WebDataset Anda dan itu akan membuat satu kolom per akhiran file (di sini "mp3" dan "json"):

```python
>>> from datasets import load_dataset

>>> dataset = load_dataset("webdataset", data_dir="/path/to/folder", split="train")
>>> dataset[0]["json"]
{"transcript": "Hello there !", "speaker": "Obi-Wan Kenobi"}
```

Anda juga dapat memiliki beberapa file audio per contoh seperti ini:

```
e39871fd9fd74f55.input.mp3
e39871fd9fd74f55.output.mp3
e39871fd9fd74f55.json
f18b91585c4d3f3e.input.mp3
f18b91585c4d3f3e.output.mp3
f18b91585c4d3f3e.json
...
```

Untuk detail lebih lanjut tentang format WebDataset dan pustaka python, silakan periksa [dokumentasi WebDataset](https://webdataset.github.io/webdataset).

