プリセット機能を使うと、よく使う音声合成パラメータの組み合わせを公式 VOICEVOX エンジンに保存して再利用できます。クライアントモードでは Laravel 側にプリセットを保存せず、接続先の公式エンジンが管理するプリセット API を利用します。
クライアントモードのプリセットは Voicevox Facade から操作します。内部では公式 VOICEVOX エンジンの /presets、/add_preset、/update_preset、/delete_preset、/audio_query_from_preset に HTTP リクエストを送信します。
公式エンジンのプリセットは OS ごとのユーザー領域に presets.yaml として保存されます。VOICEVOXアプリ(製品版)macOS のビルド版では通常、次の場所に保存されます。
Docker で公式エンジンを起動している場合も、コンテナ内のユーザー領域に保存されます。コンテナを再起動しても同じコンテナを使い続けている間はデータが維持されます。ただし docker run --rm のように一時コンテナを都度作成している場合は、コンテナ終了時にプリセットが失われます。プリセットを確実に永続化したい場合は Docker volume でコンテナ内のユーザー領域をマウントしてください。
ネイティブモードの storage/voicevox/presets.json とは別管理です。Laravel 側の config('voicevox.core.presets') はクライアントモードには使われません。
事前準備
公式 VOICEVOX エンジンを起動します。
接続先は VOICEVOX_URL で変更できます。
プリセットの構造
クライアントモードで送受信するプリセットは、公式エンジン API のスキーマに合わせた配列です。
基本的な使い方
プリセットの作成
Voicevox::addPreset() でプリセットを作成できます。公式エンジンでは id に 0 を指定すると未使用の ID が割り当てられます。
全プリセットの取得
プリセットの更新
プリセットの削除
プリセットを使った音声合成
talkFromPreset()
Voicevox::talkFromPreset() は公式エンジンの /audio_query_from_preset を使って、プリセット適用済みの TalkAudioQuery を作成します。
audioQueryFromPreset()
音声合成前のオーディオクエリ配列だけを取得したい場合は audioQueryFromPreset() を使います。
tap() で追加調整
プリセットから作成した TalkAudioQuery も、通常の Voicevox::talk() と同じように tap() で調整できます。
Engine API との対応
Voicevox Facade の各メソッドは、公式エンジンの API に対応しています。
ネイティブモードとの違い
実用例
ナレーション用
早口トーク用
パラメータ詳細
speedScale: 0.5 〜 2.0(話速)
pitchScale: -0.15 〜 0.15(音高)
intonationScale: 0.0 〜 2.0(抑揚)
volumeScale: 0.0 〜 2.0(音量)
prePhonemeLength: 0.0 〜 1.5(開始無音・秒)
postPhonemeLength: 0.0 〜 1.5(終了無音・秒)
注意事項
クライアントモードでは公式エンジン側の presets.yaml が更新されます。Laravel プロジェクトの storage には保存されません。
docker run --rm など一時コンテナを都度作成している場合、コンテナ終了時にプリセットが失われます。
speaker_uuid と style_id の両方を含めてください。
talkFromPreset() で作ったクエリを generate(id:) する場合、通常はプリセットの style_id と同じ ID を指定します。
トラブルシューティング
プリセットが取得できない
- 公式 VOICEVOX エンジンが起動しているか確認してください。
VOICEVOX_URL が正しい接続先を指しているか確認してください。
- Docker で別コンテナを起動し直していないか確認してください。
プリセットファイルの場所がわからない
macOS のビルド版では次の場所を確認してください。
Docker では公式エンジンのユーザー領域(コンテナ内)に保存されます。永続化が必要な場合は、コンテナ内のユーザー領域を Docker volume にマウントしてください。
speaker_uuid がわからない
スピーカー一覧から UUID を取得できます。