-
Notifications
You must be signed in to change notification settings - Fork 135
Description
内容
ストリーミングトーク(experimental_talk ドメイン)に対応しているスタイルかどうかを、
voicevox_core の公開 API/metas 情報から 外部(エンジンやサードパーティーアプリ)から判定する方法がない ように見えます。
現状、VVM 内の manifest.json には experimental_talk の有無が含まれており、
内部的には「この VVM/スタイルがストリーミングトークに対応しているか」を判定できる状態だと思います。
一方で、C API や Python API から取得できる metas()(CharacterMeta / StyleMeta 等)には
ストリーミング対応可否に関する情報が含まれておらず、StyleType::Talk も通常 Talk と Streaming の両方を表しうるため、
外部からは「どのスタイルがストリーミングトークを利用できるのか」が分かりません。
ストリーミングトークを利用したいエンジン実装やサードパーティーからみて、
「スタイルごとのストリーミング対応状況を core 側から機械的に取得できる仕組み」が欲しいです。
Pros 良くなる点
- エンジン側やサードパーティーが、スタイルごとのストリーミング対応状況を安全に判定できる
(UI での表示切り替えや、ストリーミング API を呼ぶ/通常 API を呼ぶといった分岐に利用可能)
Cons 悪くなる点
- core の API/metas の設計が少し複雑になる(後方互換性を考慮したインターフェース設計が必要)
実現方法
実現方法として、例えば次のような案がありそう?
-
metas.json /
CharacterMeta/StyleMetaに機能フラグを追加する案-
例:
supported_features.streaming_talk: boolのようなフィールドを VVM のmetas.jsonに追加し、
core 側でこれを読み込んでStyleMetaなどから参照できるようにする。 -
Pros:
- 既存の「metas を見るだけでスタイルの属性が分かる」というモデルに沿っており、外部から扱いやすい
-
Cons:
- metas のスキーマ拡張が必要になる
-
-
StyleTypeを拡張する案-
例: 現在の
StyleType::Talkを分割し、TalkとStreamingTalkなどを追加して区別できるようにする。 -
Pros:
- 「このスタイルはストリーミング前提のトークである」ということを型レベルで表現できる
-
Cons:
- 通常 Talk と Streaming Talk をどう整理するか、将来の拡張を含めた設計検討が必要
-
-
専用の問い合わせ API を追加する案
-
例:
VoiceModelや C/Python API に「ストリーミングトーク対応かどうかを問い合わせる関数」を追加する。- 想定イメージ:
bool is_streaming_talk_capable(style_id)のような API
- 想定イメージ:
-
Pros:
- 既存の metas スキーマを大きく変えずに、必要な機能だけを外に出せる
-
Cons:
- APIが増える
- (ついでにENGINE側も同じ機構を採用すると、ENGINE側のAPIも増える)
-
-
manifest.jsonへの参照を外部に渡す案-
例:
manifest.jsonへのパスや参照情報を返すAPIを追加し、
外部がexperimental_talkの有無を自前で判定できるようにする。 -
Pros:
- 既存の manifest 情報をそのまま利用できる
-
Cons:
- APIが増える
manifest.jsonの内容は core 内部実装の詳細に近く、
外部に直接露出させるのは将来の変更に対して強い制約になりそう- ストリーミングトークを利用したいサードパーティー全般が
manifest.jsonへのアクセスを前提にし始めると、
内部構造を変えづらくなる
-
OSの種類/ディストリ/バージョン
- Windows
- macOS
- Linux
その他
関連:
- ストリーミング処理の対応 #853
- [0.16] streaming API系を一旦表に出ないようにする #970
- ストリーミング音声合成 voicevox_engine#1492
- Streaming response voicevox_engine#1823
本 Issue では voicevox_core 側の API/メタ情報としてストリーミングトーク対応可否をどう表現するか を主題にするのが良さそう