Skip to content

ストリーミングトーク対応スタイルを外部から判定可能にする仕組みが欲しい #1207

@Hiroshiba

Description

@Hiroshiba

内容

ストリーミングトーク(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 の設計が少し複雑になる(後方互換性を考慮したインターフェース設計が必要)

実現方法

実現方法として、例えば次のような案がありそう?

  1. metas.json / CharacterMeta / StyleMeta に機能フラグを追加する案

    • 例: supported_features.streaming_talk: bool のようなフィールドを VVM の metas.json に追加し、
      core 側でこれを読み込んで StyleMeta などから参照できるようにする。

    • Pros:

      • 既存の「metas を見るだけでスタイルの属性が分かる」というモデルに沿っており、外部から扱いやすい
    • Cons:

      • metas のスキーマ拡張が必要になる
  2. StyleType を拡張する案

    • 例: 現在の StyleType::Talk を分割し、TalkStreamingTalk などを追加して区別できるようにする。

    • Pros:

      • 「このスタイルはストリーミング前提のトークである」ということを型レベルで表現できる
    • Cons:

      • 通常 Talk と Streaming Talk をどう整理するか、将来の拡張を含めた設計検討が必要
  3. 専用の問い合わせ API を追加する案

    • 例: VoiceModel や C/Python API に「ストリーミングトーク対応かどうかを問い合わせる関数」を追加する。

      • 想定イメージ: bool is_streaming_talk_capable(style_id) のような API
    • Pros:

      • 既存の metas スキーマを大きく変えずに、必要な機能だけを外に出せる
    • Cons:

      • APIが増える
      • (ついでにENGINE側も同じ機構を採用すると、ENGINE側のAPIも増える)
  4. manifest.json への参照を外部に渡す案

    • 例: manifest.json へのパスや参照情報を返すAPIを追加し、
      外部が experimental_talk の有無を自前で判定できるようにする。

    • Pros:

      • 既存の manifest 情報をそのまま利用できる
    • Cons:

      • APIが増える
      • manifest.json の内容は core 内部実装の詳細に近く、
        外部に直接露出させるのは将来の変更に対して強い制約になりそう
      • ストリーミングトークを利用したいサードパーティー全般が manifest.json へのアクセスを前提にし始めると、
        内部構造を変えづらくなる

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

関連:

本 Issue では voicevox_core 側の API/メタ情報としてストリーミングトーク対応可否をどう表現するか を主題にするのが良さそう

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions