> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel AI SDK連携 - VOICEVOX for Laravel

> VOICEVOX for Laravel を Laravel AI SDK の Audio ファサードから使うための設定と使い方を説明します。

## Laravel AI SDK 連携

VOICEVOX for Laravel は [Laravel AI SDK](https://github.com/laravel/ai) と統合されており、`Audio` ファサードから音声生成できます。

利用できるドライバーは次の2つです。

* `voicevox-client`（クライアントモード）
* `voicevox`（ネイティブモード）

## クライアントドライバー（`voicevox-client`）

公式 VOICEVOX エンジンに HTTP リクエストを送るモードです。FFI は不要です。

### 事前準備

```shell theme={null}
docker pull voicevox/voicevox_engine:cpu-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-latest
```

### 設定

`config/ai.php` に `voicevox-client` プロバイダーを追加します。

```php theme={null}
'providers' => [
    'voicevox-client' => [
        'driver' => 'voicevox-client',
        'key' => env('VOICEVOX_URL', 'http://127.0.0.1:50021'),
    ],
],
```

### 使い方

```php theme={null}
use Laravel\Ai\Audio;

$response = Audio::of('Laravelが好きなのだ')
    ->voice('ずんだもん')
    ->generate('voicevox-client');

Storage::put('talk.wav', $response->content());
```

## ネイティブドライバー（`voicevox`）

VOICEVOX CORE を直接呼び出すモードです。FFI が必要です。

`config/voicevox.php` の `core.vvms` で読み込んだモデルのみ利用できます。

### 設定

```php theme={null}
'providers' => [
    'voicevox' => [
        'driver' => 'voicevox',
    ],
],
```

### 使い方

```php theme={null}
use Laravel\Ai\Audio;

$response = Audio::of('ネイティブで話すのだ')
    ->voice('ずんだもん')
    ->generate('voicevox');

Storage::put('talk.wav', $response->content());
```

## `voice()` に指定できる値

`voice()` には次を指定できます。

* VOICEVOX のスタイル ID（数値文字列）
* キャラクター名エイリアス（例: `ずんだもん`、`四国めたん/ノーマル`）

### エイリアス一覧

| エイリアス            | スタイルID | キャラクター       |
| ---------------- | ------ | ------------ |
| `ずんだもん`          | 1      | ずんだもん(あまあま)  |
| `ずんだもん/あまあま`     | 1      | ずんだもん(あまあま)  |
| `ずんだもん/ノーマル`     | 3      | ずんだもん(ノーマル)  |
| `ずんだもん/セクシー`     | 5      | ずんだもん(セクシー)  |
| `ずんだもん/ツンツン`     | 7      | ずんだもん(ツンツン)  |
| `ずんだもん/ささやき`     | 22     | ずんだもん(ささやき)  |
| `ずんだもん/ヒソヒソ`     | 38     | ずんだもん(ヒソヒソ)  |
| `四国めたん/あまあま`     | 0      | 四国めたん(あまあま)  |
| `四国めたん`          | 2      | 四国めたん(ノーマル)  |
| `四国めたん/ノーマル`     | 2      | 四国めたん(ノーマル)  |
| `四国めたん/セクシー`     | 4      | 四国めたん(セクシー)  |
| `四国めたん/ツンツン`     | 6      | 四国めたん(ツンツン)  |
| `四国めたん/ヒソヒソ`     | 37     | 四国めたん(ヒソヒソ)  |
| `春日部つむぎ`         | 8      | 春日部つむぎ(ノーマル) |
| `波音リツ`           | 9      | 波音リツ(ノーマル)   |
| `雨晴はう`           | 10     | 雨晴はう(ノーマル)   |
| `玄野武宏`           | 11     | 玄野武宏(ノーマル)   |
| `白上虎太郎`          | 12     | 白上虎太郎(ノーマル)  |
| `青山龍星`           | 13     | 青山龍星(ノーマル)   |
| `冥鳴ひまり`          | 14     | 冥鳴ひまり(ノーマル)  |
| `九州そら`           | 16     | 九州そら(ノーマル)   |
| `default-female` | 10     | 雨晴はう(ノーマル)   |
| `default-male`   | 12     | 白上虎太郎(ノーマル)  |

`voice()` を省略した場合は `default-female`（ID: 10）が使われます。

```php theme={null}
use Laravel\Ai\Audio;

Audio::of('テスト')->voice('3')->generate('voicevox-client');
```

利用可能なスピーカー一覧は `Voicevox::speakers()` でも確認できます。

```php theme={null}
use Revolution\Voicevox\Voicevox;

$speakers = Voicevox::speakers();
```

## エージェント（KanalizerAgent）

ネイティブモードでは `enable_katakana_english` がないため、英語を事前にカタカナ化する `KanalizerAgent` を使えます。

```php theme={null}
use Revolution\Voicevox\Ai\Agents\KanalizerAgent;
use function Revolution\Voicevox\talk;

$kana = KanalizerAgent::make()->prompt('KanalizerAgentで英語をカタカナに変換するのだ');

$response = talk($kana['kana'] ?? $kana->text, id: 1)->generate(id: 1);

$response->storeAs('native', 'kanalizer.wav');
```

<Tip>
  AI によるカタカナ変換は常に正確とは限りません。実運用では生成テキストを人間が確認してから合成してください。
</Tip>

## 次に読むページ

<Columns cols={2}>
  <Card title="クライアント: トーク" href="/jp/packages/laravel-voicevox/client-talk" icon="message-circle">
    クライアントモードの通常 API の流れを確認します。
  </Card>

  <Card title="ネイティブ: トーク" href="/jp/packages/laravel-voicevox/native-talk" icon="cpu">
    FFI で直接合成するモードの使い方を確認します。
  </Card>
</Columns>
