ユーザー辞書とは
ユーザー辞書を使うと、固有名詞や専門用語の読み方を VOICEVOX に覚えさせられます。登録した単語は音声合成時に適切な発音で読み上げられます。
Laravel VOICEVOX のユーザー辞書機能は、VOICEVOX Core の UserDict を利用したネイティブ実装です。辞書データは JSON 形式で storage/voicevox/user_dict.json に永続化されます。
公式 VOICEVOX エンジンとは独立したストレージを使うため、Laravel 側で登録した単語は公式エンジン側には反映されません(逆方向も同様です)。
デフォルトでは storage/voicevox/user_dict.json に保存されます。別のパスを使いたい場合は config/voicevox.php で変更できます。
// config/voicevox.php
return [
'core' => [
'user_dict' => storage_path('voicevox/user_dict.json'),
],
];
基本的な使い方
単語の追加
dict() ヘルパーの add() で単語を登録します。
use function Revolution\Voicevox\dict;
$uuid = dict()->add(
surface: 'Laravel',
pronunciation: 'ララベル',
accentType: 0,
);
// "-" なしの UUID が返る
// 例: "550e8400e29b41d4a716446655440000"
パラメータ
surface(必須): 表記
pronunciation(必須): 読み方(カタカナのみ)
accentType (必須): アクセント型(0 = 平板、1 以上 = アクセント位置)
wordType (任意): 品詞(COMMON_NOUN、PROPER_NOUN、VERB、ADJECTIVE、SUFFIX)
priority (任意): 優先度(デフォルト 5)
アクセント型
0: 平板アクセント
1: 一拍目
2: 二拍目
3: 三拍目
単語の更新
use function Revolution\Voicevox\dict;
dict()->update(
wordUuid: '550e8400-e29b-41d4-a716-446655440000',
surface: 'Laravel',
pronunciation: 'ラレベル',
accentType: 1,
);
単語の削除
use function Revolution\Voicevox\dict;
dict()->delete('550e8400-e29b-41d4-a716-446655440000');
全単語の取得
use function Revolution\Voicevox\dict;
$words = dict()->all();
// または
$words = dict()->toArray();
辞書のインポート
use function Revolution\Voicevox\dict;
$json = file_get_contents('other_user_dict.json');
dict()->import($json, override: false);
// override: true なら上書き
dict()->import($json, override: true);
辞書のエクスポート
use function Revolution\Voicevox\dict;
$json = dict()->toJson();
file_put_contents('exported_dict.json', $json);
Engine API 経由でのアクセス
Laravel VOICEVOX のエンジン API を起動している場合、HTTP 経由でもユーザー辞書を操作できます。公式エンジンへフォールバックせず、ネイティブ辞書を利用します。
全単語の取得
curl http://localhost:50513/user_dict
単語の追加
curl -X POST "http://localhost:50513/user_dict_word?surface=Laravel&pronunciation=ララベル&accent_type=0"
単語の更新
curl -X PUT "http://localhost:50513/user_dict_word/{uuid}?surface=Laravel&pronunciation=ラレベル&accent_type=1"
単語の削除
curl -X DELETE "http://localhost:50513/user_dict_word/{uuid}"
辞書のインポート
curl -X POST "http://localhost:50513/import_user_dict?override=false" \
-H "Content-Type: application/json" \
-d @other_dict.json
override=true を指定すると、既存の辞書をすべて削除してからインポートします。
辞書登録後の音声合成
ユーザー辞書に登録した単語は、音声合成時に自動参照されます。
use function Revolution\Voicevox\{dict, talk};
dict()->add(
surface: 'Laravel',
pronunciation: 'ララベル',
accentType: 0,
);
$response = talk('Laravelで開発するのは楽しいです', id: 1)->generate(id: 1);
$response->storeAs('native', 'laravel.wav');
注意事項
pronunciation にはカタカナのみを指定してください。ひらがなや漢字は使用できません。
- Laravel 版のユーザー辞書と公式 VOICEVOX エンジンのユーザー辞書は別管理です。
- 単語の追加・更新・削除は即座に JSON ファイルへ保存されます。
- アクセント型が不明な場合はまず
0(平板)を試してください。
トラブルシューティング
単語が反映されない
- ストレージディレクトリの書き込み権限を確認してください
storage/voicevox/user_dict.json が正しく作成されているか確認してください
- カタカナ表記が正しいか確認してください
辞書ファイルの場所がわからない
$path = config('voicevox.core.user_dict');
echo $path;
辞書をリセットしたい
rm storage/voicevox/user_dict.json
$path = config('voicevox.core.user_dict');
if (file_exists($path)) {
unlink($path);
}