# オーディオデータを読み込む

[Audio](/docs/datasets/v5.2.0/ja/package_reference/main_classes#datasets.Audio)機能を使用すると、オーディオデータセットを読み込むことができます。この機能は、サンプルにアクセスした際にオーディオファイルを自動的にデコードし、リサンプリングします。オーディオのデコードは、[`torchcodec`](https://github.com/pytorch/torchcodec) Pythonパッケージに基づいており、その内部では[`FFmpeg`](https://www.ffmpeg.org/) Cライブラリが使用されています。

## インストール

オーディオデータセットを扱うには、`audio`の依存関係がインストールされている必要があります。インストール方法については、[インストール](./installation#audio)ガイドを参照してください。

## ローカルファイル

オーディオファイルへのパスを指定して、独自のデータセットを読み込むことができます。[cast_column()](/docs/datasets/v5.2.0/ja/package_reference/main_classes#datasets.Dataset.cast_column)関数を使用して、オーディオファイルのパスの列を取得し、[Audio](/docs/datasets/v5.2.0/ja/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

`AudioFolder` データセットビルダーを使用してデータセットを読み込むこともできます。カスタムなデータローダーの記述が不要なため、数千の音声ファイルを含む音声データセットを素早く作成して読み込む場合に便利です。

## メタデータ付きのAudioFolder

オーディオファイルとメタデータ情報をリンクするには、データセットに`metadata.csv`ファイルがあることを確認してください。データセットの構造は次のようになる可能性があります。

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

`metadata.csv` ファイルには、音声ファイルとそのメタデータを関連付ける `file_name` 列が必要です。`metadata.csv` ファイルの例は次のようになります。

```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` はオーディオデータを読み込み、`metadata.csv` からのテキストを含む `transcription` 列を作成します:

```py
>>> from datasets import load_dataset

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

ローカルデータセットの場合、これは`data_dir`にディレクトリを指定して`audiofolder`を手動で渡す[load_dataset()](/docs/datasets/v5.2.0/ja/package_reference/loading_methods#datasets.load_dataset)を呼び出すことと同等です:

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

メタデータは JSON Lines 形式でも指定できます。この場合、メタデータファイル名として`metadata.jsonl`を使用します。この形式は、ある列が複雑な値（例: float のリスト）を含む場合に、パースエラーを回避したり、複雑な値を文字列として読み込まれたりするのを防ぐのに役立ちます。

メタデータファイル内の情報を無視するには、[load_dataset()](/docs/datasets/v5.2.0/ja/package_reference/loading_methods#datasets.load_dataset)で`drop_metadata=True`を設定します:

```py
>>> from datasets import load_dataset

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

メタデータファイルがない場合、`AudioFolder`はディレクトリ名からラベル名を自動的に推測します。自動生成されたラベルを削除したい場合は、`drop_labels=True`を設定してください。この場合、データセットにはオーディオカラムのみが含まれます。

```py
>>> from datasets import load_dataset

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

最後に、`filters` 引数を使用すると、ラベルまたはメタデータに対する条件に基づいて、データセットの一部のみを読み込むことができます。メタデータが Parquet 形式である場合、この形式は高速なフィルタリングを可能にするため、特に有用です。また、デフォルトではフィルタリングの前にデータセット全体がダウンロードされるため、`streaming=True` と組み合わせてこの引数を使用することをお勧めします。

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

> [!TIP]
> For more information about creating your own `AudioFolder` dataset, take a look at the [Create an audio dataset](./audio_dataset) guide.

あらゆるタイプのデータセットを読み込む方法については、一般的な読み込みガイドを参照してください。

## オーディオのデコード

デフォルトでは、データセットを反復処理する際、音声ファイルは[`AudioDecoder`](https://meta-pytorch.org/torchcodec/stable/generated/torchcodec.decoders.AudioDecoder.html#torchcodec.decoders.AudioDecoder)オブジェクトとしてシーケンシャルにデコードされます。ただし、マルチスレッドデコーディングを使用することで、データセットを大幅に高速化できます。

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

`num_threads` を使用してマルチスレッドを有効にできます。これはリモートデータストリーミングの高速化に特に役立ちます。ただし、高速ディスク上のローカルデータの場合、`num_threads=0` よりも遅くなる可能性があります。

NumPy配列としてデコードされた画像ではなく、パスやバイトにアクセスしたい場合は、デコードを無効にできます。

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

注: [IterableDataset.decode()](/docs/datasets/v5.2.0/ja/package_reference/main_classes#datasets.IterableDataset.decode) は現在、ストリーミングデータセットでのみ利用可能です。

