VOICEVOX / voicevox_project

VOICEVOX内のプロジェクトを管理するリポジトリ
15 stars 3 forks source link

エンジンのプラグイン化(複数のエンジンを同時に見れるようにする) #2

Open Hiroshiba opened 2 years ago

Hiroshiba commented 2 years ago

VOICEVOX製ではない、いわゆるサードパーティ製の音声合成エンジンを、VOICEVOX製のものとシームレスに利用できるようにするプロジェクトです。

VOICEVOXはエンジンや音声合成コアと疎結合になっているので、音声合成エンジンさえ変えればVOICEVOX製じゃないエンジンを挿せるはずです。 が、現状だとキャラクターイラストなども含めてビルドする必要などがあるため、エンジンごとにエディターを分ける必要があってしまいます。 これらの課題を解決すれば複数のエンジンに対応することができ、いろんなエンジンのいろんなキャラクターが利用可能になったり、自由にエンジンを作って付けたりできるようになるはずです。

タスクリスト

Hiroshiba commented 2 years ago

こちらのissueで管理されています

qwerty2501 commented 2 years ago

自由にエンジンを作って付けたりできるようになるはずです

engineでaquestalk記法対応してて思ったんですが、これは第三者がengine作る時に手間になるなと感じたのでengineのAPI定義は最小限のものにしたほうが参入はしやすそうです。 反面アプリケーションの今後の機能拡充も必要になるでしょうから将来的にはサーバーの構成を分けたほうが良いのかなと思いました。

qwerty2501 commented 2 years ago

構成の一案です [エディター] -> [アプリケーションサーバー] -> [各種エンジンプラグイン...]

といった感じにするとスッキリしそうです。 各種エンジンプラグインはオプションで --port [ポート番号] と言った感じにポート番号を受け取れて起動時にポート番号を指定できることをプラグイン側に要求し、アプリケーション側でどのポート番号を割り当てるか決めれる必要はありそうです。 ポート番号はエディター側で持つかアプリケーションサーバー側で持つかで意見が分かれそうですが。

またエンジンプラグインに求められる最小限のAPIについてですが、これは突き詰めるとcoreの機能をそのままとキャラ情報に関する機能をHTTPサーバー化するような感じになるんですかね?この場合だとopenjtalkに依存した形にはなりそうですが

Hiroshiba commented 2 years ago

その形でも良さそうですが、アプリケーションサーバーを分けるのが本当に必要なことなのかは見極めたいかもしれないと思いました。 汎用化はできる一方、ビルドなどの構成が複雑化するので慎重になりたいかもです。

Hiroshiba commented 2 years ago

現状のステートをまとめてみます。把握違いがあればご指摘いただければ!

このプロジェクトはもともと↓のissueから生まれており、こちらで主に管理されています。

このうち、キャラクターリソースをエンジンに移動する部分が完了しています。 そしてつい先日、 @shirowanisan から別キャラクターの音声合成エンジンの試作機を頂きました。(本当にありがとうございます!!)

残るタスクの大半はエディタ側になると思っていて、現在 @aoirint さんがエディタ側の複数エンジン対応をガシガシ進めていってくださっています。

とりあえず現在進めていってくださっているということで、 @aoirint さんをアサインさせていただこうかなと思うのですがどうでしょう👀 (難しくなったりしたら仰っていただければと思います!)

aoirint commented 2 years ago

@Hiroshiba

はアサインしてもらって大丈夫です! このIssue #2 も進めている人をアサインする方針であればアサインしてもらっていいと思います!

Hiroshiba commented 2 years ago

このissueにアサインするのはissueでみたときに現状ステータスがわかるようにするのが主な理由なので、とりあえずアサインしちゃいます・・・!

Hiroshiba commented 2 years ago

エンジンがどのパラメータ対応しているかを調べ、対応していないパラメータは非対応であることがわかるようなUIにするのが良さそうに感じました。 例えば(現在の)COEIROINKだと音素ごとの長さ調整ができないので、「長さ」欄を非表示にする、などを考えています。

この点に関してタスクを洗い出すとこんな感じになりそうです。

ref

takana-v commented 2 years ago

自分でVOICEVOX互換のエンジンを作ってみて、有効/無効などを切り替えられた方がいいと感じたもののリストです。

追加されればより良い機能

Hiroshiba commented 2 years ago

再生位置追従 labファイル書き出し

これらなどは、他のフラグから判定できそうなので、エンジン側にAPIを持たせなくても良いのかなと思いました。 疑問文はたしかに見逃していたのでメモありがたいです!

Hiroshiba commented 2 years ago

こちら、どこかで詰まっていたりしますか👀

(もし仕様が複雑で気軽に進めるのが難しくなっているステートならば、エンジンのプラグイン化専用のブランチを作成して、そちらで進めていくという手もあるかなと感じました!)

aoirint commented 2 years ago

おっと、手が止まってしまっていますね・・・申し訳ないです。

仕様は確かに複雑かなと思っていて、プロジェクトファイルの仕様の検討が1つの障害になっていますね。 あとは、サードパーティが持っていない機能との兼ね合いで、暫定的に組む部分が出てきそうなのも難しさを感じています。 問題なさそうか確認しながら進めていきたいところですが、あとで非互換の変更が入るのを避けたい気はします。

細かめにIssueを立てたりコメントをして、考えている方針を置いておくのもいいかもしれないなと思いました。 まあ多少雑に実装を進めても大体なんとかなるとは思うので、とりあえず前に進めたいですね。

ブランチを分けるのもよさそうですが、いまのところmainブランチへマージしていく方針の方が、コンフリクト解消がなくていいのかなと思っています。 しかしmainブランチにマージしていくと、PRを分けて少しずつ進める方針をとっているので、リリースのときに中途半端な状態になっていると困るかも? という感じはします。

エディタの起動・接続先の複数化(ユーザによる設定の前まで)については手元で叩き台を作ってあって、自分への割り当てとしては、その取り込みが終わるまでを1つの区切りと思っていて、いったんそこまで優先的に進めてみるので、もう少しお待ちいただけると・・・!

ほかに必要になりそうなところとしては、エンジンの機能リストAPIや、エンジンのロゴや名前の情報を返すAPIがありそうで、フロントで必要な情報が決まったときに仕様を作っていくのかな? と方針が気になってはいます。 このあたりは他の方にお任せしたいかも・・・? (機能リストは、辞書機能など増えていそうです。すでにエディタで使われている機能が把握できればよさそう)

Hiroshiba commented 2 years ago

本当に助かります、ありがとうございます!!

たしかに暫定的に組んでいくのは時間がかかりそうですね・・・ とりあえずはCOEIROINKに対応したくて、今未実装だとしてもあとあと実装されたりしたら勿体ないので、非互換の変更がありそうかちょっと考慮しつつとりあえずフルセットある前提のものを作っちゃっても良さそうに感じました。

issue立ててくださるとみんなで議論できて良いかもです!! 例えば、たしか「AudioInfoに不要なパラメータがあった場合はエンジンに無視してもらう」感じなので、プロジェクトファイルはなんとかなりそうな印象を持ちました。 でも @aoirint さんしか見つけられてない課題もあると思うので、ぜひ・・・!!

ブランチ分けとコンフリクト解消は、たしかにそうですね・・・。 自分で提案しましたが、コンフリクト解消はかなり大変なのでちょくちょく変更を入れていく方が良いと感じています。

エディタの起動・接続先の複数化(ユーザによる設定の前まで)については手元で叩き台を作ってあって

おーなるほど!!とても助かります!!! となれば、プロジェクトファイル以外の部分だけでも先にマージしていく手もありそう・・・?

エンジンサイドはプロジェクト横断なので、僕が取り仕切れると思います。 ちょっと今は手を動かせないので、いったんリスト化します・・・!

takana-v commented 2 years ago

 エンジンの機能リストAPIや、エンジンのロゴや名前の情報を返すAPIを作る

こちら @Hiroshiba さんが忙しそうであれば私の方で取り組みたいと思います。

Hiroshiba commented 2 years ago

@takana-v さん ありがとうございます!!お任せしたいです! (情報を返す方は利用規約も含められると嬉しそうです!)

Hiroshiba commented 2 years ago

エンジンのプラグイン化のPRを @aoirint さんにいっぱい頂いています。(ありがとうございます!)

こちらのプルリクエストについて、おそらく僕より設計(アーキテクチャレベルの実装)に詳しい @Segu-g さんと @yamachu さんにメインでお願いできるととても心強いのですが、お願いできたりしますか・・・?👀 (僕も見させていただくつもりです!)

aoirint commented 2 years ago

エンジンにアップデート情報を返すAPIがほしいかもしれません。

COEIROINK 1.0.1のアップデート情報画面です。

image

aoirint commented 2 years ago

https://github.com/VOICEVOX/voicevox_project/issues/2#issuecomment-1062496516

情報を返す方は利用規約も

VOICEVOX・COEIROINKのソフトウェアの利用規約画面です(参照用)。

![image](https://user-images.githubusercontent.com/27213639/158006646-59329937-315f-4f21-9840-90edfb5193c1.png)
![image](https://user-images.githubusercontent.com/27213639/158006532-02e6465b-7dd5-451f-8ce3-11b1ebb793d8.png)
aoirint commented 2 years ago

エンジンにOSSライセンスを返すAPIがほしそうです。

https://github.com/VOICEVOX/voicevox/issues/219#issuecomment-928237590 でlicenses.jsonをAPIから返せるようにするといいかも、と言っていましたが、結局 https://github.com/VOICEVOX/voicevox_engine/pull/125 では実装しないままになっていたと思います(PRを小さくしようとしたので)。

VOICEVOX 0.11.3の時点では、エンジンのlicenses.jsonとエディタのlicenses.jsonを エディタの自動ビルド で1つのlicenses.jsonに結合して同梱・表示しているので、別々にlicenses.jsonを同梱するように改修して、エンジンにOSSライセンスAPIを追加したいかなと思います。

Hiroshiba commented 2 years ago

まとめありがとうございます!!

そうですね!! 仰るとおり、各エンジンごとに「OSSライセンス情報」「エンジン利用規約」「アップデート情報」を追加で返してもらう必要があると思います!! とりあえずタスクリスト化してみます。

VOICEVOXのライセンス情報を分離するのも必要だと思います! こちらはissue化してみました!

shirowanisan commented 2 years ago

labファイル書き出し 疑問文

この辺は私も忘れていて、COEIROINK-v.1.0.1では非表示にさせていただきました💦

また、取り急ぎCOEIROINK-v.1.0.1のエンジンをgitに置きましたので、ここで共有させていただければと思います。 よろしくお願いしますmm

CPU版 https://github.com/shirowanisan/voicevox_engine/releases/tag/c1.0.1+v0.10.4 GPU版 https://github.com/shirowanisan/voicevox_engine/releases/tag/c1.0.1+v0.10.4+gpu

takana-v commented 2 years ago

以上のIssueの結論をメモしておきます。

ユーザー辞書機能について

必要なエンジン側の機能は実装済みです。

Hiroshiba commented 2 years ago

4月をまたいで新生活になった方もいらっしゃると思います。 もし @aoirint さんもお忙しくなられた感じでしたら、お気軽に仰って頂ければ幸いです!

Hiroshiba commented 2 years ago

こちら、ガシガシ進めていきたい気持ちになったので、僕も積極的にコーディングに参加したいと思います! もしよかったら @aoirint さん、そして @sevenc-nanashi さんも、ぜひ・・・!

(ちょっとまだ全容を把握し直しきれてないのですが、なんとなく7月半ばまでで、複数エンジンを正式に見られるようにできればという気概でいます。)

sevenc-nanashi commented 2 years ago

質問なんですが、詳しく仕様を決めてみたいなー、ってなったときはどこにIssueを建てるべきなんでしょうか? (voicevox/voicevox#840 でのmanifest.jsonの名前とか決めたい)

Hiroshiba commented 2 years ago

特に決まっていないのですが、少なくとも情報は集約したいので、それぞれのリポジトリにissueを建ててこのissueで言及する感じで・・・!

(ちなみになのですがmanifest.jsonはすでにあったりします)

誕生の経緯やお気持ちはこのあたり見るとわかるかもです

sevenc-nanashi commented 2 years ago

voicevox/voicevox_engine#362 の機能一覧とは別に、エンジンの名前とかを載せるファイルも必要かと思いました。( voicevox/voicevox#840 でのManifestがそう) プラグインのエンジンが起動してなくても(or 異常終了しても)最低限名前やドキュメントなどを見れるのが自分の想定しているものです。(Docker desktopのdocker-composeみたいな)

Hiroshiba commented 2 years ago

エンジンの名称、必要だと思います! 実際すでにその機構は存在しています。

ただ、外部からエンジンを起動していなくても見れるようにするのはまだ仕様に組み込まれていません。 たしかに便利そうなので、ぜひissue作ったりして頂けると・・・!!

sevenc-nanashi commented 2 years ago

外部からエンジンを起動していなくても見れるようにする

建てました: voicevox/voicevox_engine#425

Hiroshiba commented 2 years ago

エンジンをまたいでキャラを統合的に扱えるPR、作り直しました!! (スペシャルサンクス: @aoirint さん)

このPRがマージされたら、いろんなタスクをパラレルに実行できそうだと思っています。 とりあえず現状で把握している、TODOの一覧です・・・・・・・!!!!!

2022/08/24 2:11 わかりやすいように、このissueのトップに移しました!

sevenc-nanashi commented 2 years ago

UI/エンジン再起動、アーキテクチャ/エンジンの検出方法はローカルで作ってみたものがあるのでPRってもいいですか?

sevenc-nanashi commented 2 years ago

image エンジン再起動はこんな見た目ですね。 このためにメニューのボタンにアイコンを表示できるようにしてたりしますが。

Hiroshiba commented 2 years ago

良いですね!!PRお願いします!!! あ、もし https://github.com/VOICEVOX/voicevox/pull/883 の変更が含まれていたら、変更箇所が大きいと思うので、 #833 がマージされてからPR作成でも良いかも。

Hiroshiba commented 2 years ago

複数エンジン対応について↓が完了し、データ構造の設計が大体できました!!! thx @aoirint

ここからは、複数エンジン対応の多種多様なタスクをパラレルに実行できると考えています。 そこで、このコメントで書いていたタスクリストをこのissueのトップに掲げ、完了し次第チェックマークを付けていこうと思います。

ぱっと見でも凄まじい数ですが、可能ならバージョン0.14までに完了し、年内でのリリースを目指せると嬉しいです!!! プルリクエストお待ちしています!!!!

Hiroshiba commented 2 years ago

エンジンが持つ機能をもとにエディタ側の表示を操作するタスクについて、やらないといけないことをまとめました。

こんな感じで良さそうであればエンジン側やってみたいと思います。

raa0121 commented 2 years ago

UI周り少しずつ手を付けたいと思います

Hiroshiba commented 2 years ago

ありがとうございます!!!!!! アサインさせていただきます!!!

そういえばデータ設計部分が完了したので、一緒に @aoirint さんのアサインを外させて頂きました! (まだデータ設計周りが残っているので、もし担当頂けるのであれば再アサインさせてください!!)

Hiroshiba commented 2 years ago

@sevenc-nanashi さんもアサインさせていただきました!!よろしくお願いします!!

raa0121 commented 2 years ago

UI/エンジンの機能による違い は VOICEVOX/voicevox#919 で進行してるようです

Hiroshiba commented 2 years ago

@raa0121 ありがとうございます!! タスクリストにリンクを書き足しました!

raa0121 commented 2 years ago

UI/設定 ですが、エンジン毎に変更できるようになるのは、

の2つで良いでしょうか。 どこまで分けるべきか少し判断に迷いました。

Hiroshiba commented 2 years ago

@raa0121 難しいとこなのですが、それらの2つは一緒に変更できる今の形でも良いのかなと思いました! (とくにキャラ並び替えはエンジンを跨ぎたいこともありそう)

そちらの下に書いてある「設定の移動」に書いてあるのが対象になるかなと!! (UI/設定は消しておいた方が良さそうですね)

Hiroshiba commented 2 years ago

エンジンの検出方法(./engines/にあるディレクトリを総なめする)

こちらやってみたいと思います!

raa0121 commented 2 years ago

そちらの下に書いてある「設定の移動」に書いてあるのが対象になるかなと!! (UI/設定は消しておいた方が良さそうですね)

なるほど、やりたいことは把握できました。 ありがとうございます。

sevenc-nanashi commented 2 years ago

修正PR出しました: voicevox/voicevox#923

raa0121 commented 2 years ago

サンプリング周波数の複数エンジン対応の上モノを用意してみました。 こんな感じでどうでしょう? image

Hiroshiba commented 2 years ago

@raa0121 おー良いですね!!

この状態で3つ並ぶと横幅が狭くなるから2段にしたほうが良いかも? その辺りのレスポンシブがちゃちゃっと組めそうだったら横並びでよさそう! そこの実装が大変だったら縦並びが無難かも! と思いました!!

sevenc-nanashi commented 2 years ago

他の設定も増えてきそうなので、VSCodeの設定のように全体とエンジンごとでタブを変える、みたいなのも思いつきました

raa0121 commented 2 years ago

この状態で3つ並ぶと横幅が狭くなるから2段にしたほうが良いかも? その辺りのレスポンシブがちゃちゃっと組めそうだったら横並びでよさそう! そこの実装が大変だったら縦並びが無難かも! と思いました!!

レスポンシブルはちょっと面倒そうな感じでした。

他の設定も増えてきそうなので、VSCodeの設定のように全体とエンジンごとでタブを変える、みたいなのも思いつきました

タブ毎にやるなら、VueRoute に載せて、ページ遷移させるのが良さそうでした。 ただ、今は全部 Dialog 方式なので、ちょっとコスパ悪そうでした。

Hiroshiba commented 2 years ago

なるほどです!なるべくCSSやVueRouterのメンテナンスを避けたいという目的もあって、縦並びに実装が良い落とし所なのかなと感じました。 スクショ見させ頂いた感じ、縦並びでもおそらく全然綺麗だろうなーと!