VOICEVOX / voicevox

無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのエディター
https://voicevox.hiroshiba.jp/
Other
2.51k stars 305 forks source link

エンジンの追加・削除が起動後にもやりやすいよう、エンジン周りのシーケンス・表示処理周りを設計する #2231

Open Hiroshiba opened 3 months ago

Hiroshiba commented 3 months ago

内容

VOICEVOXはUI(レンダラープロセス)起動直後に1回だけエンジンからキャラクターなどの情報を取得しています。 起動シーケンスが分かりやすいメリットはありますが、最近になってきて融通が効きにくいデメリットが目立ち始めました。

今のところ、この制約をすぐに取っ払わないといけないわけではないのですが、将来的に必ず障害になるので今のうちから徐々に方針を模索したいです。

課題点はこの3つに集約されると思います。

  1. UI の起動時にしかエンジンの情報を取得していない
  2. エンジンの情報に依存し、かつUI表示に必須なデータがかなりある(キャラクター順序・デフォルト スタイル ID)
  3. 考慮しないといけない事項が多い
    1. vvpp追加・削除
    2. エンジンの起動・停止
    3. Electronの場合・ブラウザ版の場合

Pros 良くなる点

機能追加が簡単になる。

Cons 悪くなる点

どの処理がどの処理と結びついているのかが明確ではないので、まずはひたすら調査が必要になる。

実現方法

とにかく調査して現状を洗い出しまくる。 その後設計を考えて、問題がないか確認する。(見つかった問題は列挙しておく。) 問題なさそうな設計を思いついたら終わり。

VOICEVOXのバージョン

0.20.0

その他

とりあえずエディタとエンジンの分離に関しては、このissueのことを考えなくていいはず。 レンダラープロセスの起動前にエンジンのインストールやアップデートを行えばいいので。

関係ありそうなissueリスト

Hiroshiba commented 3 months ago

とりあえず現状のエンジン周りのシーケンス図をまとめてみました。

アプリ起動

sequenceDiagram
  actor User
  participant Renderer
  participant Electron
  participant Engine
  participant VVPP
  User ->> Electron: 起動
  opt VVPP追加
    Electron ->> +User: 意思確認
    User -->> -Electron: OK
    Electron ->> +VVPP: インストール
    VVPP -->> -Electron: 完了
  end
  Electron -) Engine: 起動
  Electron ->> Renderer: 起動
  Renderer ->> +Electron: エンジン情報取得
  Electron -->> -Renderer: 返却
  Renderer ->> +Engine: キャラ情報取得
  Engine -->> -Renderer: 返却
  Renderer ->> User: 表示

アプリ終了

sequenceDiagram
  actor User
  participant Renderer
  participant Electron
  participant Engine
  participant VVPP
  User ->> Renderer: 終了
  Renderer ->> Electron: 終了
  Electron ->> +Engine: 終了
  Engine -->> -Electron: 完了
  opt 予約されたVVPP削除
    Electron ->> +VVPP: アンインストール
    VVPP -->> -Electron: 完了
  end
  opt 予約されたVVPP上書き
    Electron ->> +VVPP: リネーム(アップデート)
    VVPP -->> -Electron: 完了
  end
  Electron ->> +Renderer: 終了
  Renderer -->> -Electron: 完了
  Electron ->> User: 完了

VVPPインストール、起動時、エンジン管理ダイアログから

sequenceDiagram
  actor User
  participant Renderer
  participant Electron
  participant VVPP
  User ->> Renderer: VVPP選択
  Renderer ->> +User: 意思確認
  User -->> -Renderer: OK
  Renderer ->> +Electron: VVPP追加
  Electron ->> +VVPP: インストール
  VVPP -->> -Electron: 完了
  Electron -->> -Renderer: 完了
  Renderer ->> User: 再読み込みを促す

VVPPインストール、起動時、VVPPダブルクリックから

sequenceDiagram
  actor User
  participant Electron
  participant VVPP
  User ->> Electron: VVPP追加
  Electron ->> +User: 意思確認
  User -->> -Electron: OK
  Electron ->> +VVPP: インストール
  VVPP -->> -Electron: 完了
  Electron ->> User: 再読み込みを促す

VVPPアンインストール

sequenceDiagram
  actor User
  participant Renderer
  participant Electron
  participant VVPP
  User ->> Renderer: VVPP選択
  Renderer ->> +Electron: VVPP削除
  Electron -) VVPP: アンインストール予約
  Electron ->> -Renderer: 完了
  Renderer ->> User: 再読み込みを促す

アプリ再読み込み

sequenceDiagram
  actor User
  participant Renderer
  participant Electron
  participant Engine
  participant VVPP
  User ->> Renderer: 再読み込み
  Renderer ->> Electron: 再読み込み
  Electron ->> +Engine: 終了
  Engine -->> -Electron: 完了
  opt 予約されたVVPP削除
    Electron ->> +VVPP: アンインストール
    VVPP -->> -Electron: 完了
  end
  opt 予約されたVVPP上書き
    Electron ->> +VVPP: リネーム(アップデート)
    VVPP -->> -Electron: 完了
  end
  Electron -) Engine: 起動
  Electron ->> Renderer: 再起動
  Renderer ->> +Electron: エンジン情報取得
  Electron -->> -Renderer: 返却
  Renderer ->> +Engine: キャラ情報取得
  Engine -->> -Renderer: 返却
  Renderer ->> User: 表示