Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
32 of 61 tasks
Hiroshiba opened this issue Dec 2, 2021 · 135 comments
Assignees

Comments

@Hiroshiba
Copy link
Member

Hiroshiba commented Dec 2, 2021

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

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

タスクリスト

@Hiroshiba
Copy link
Member Author

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

@Hiroshiba Hiroshiba changed the title エンジンのプラグイン化 エンジンのプラグイン化(複数のエンジンを同時に見れるようにする) Dec 2, 2021
@qwerty2501
Copy link

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

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

@qwerty2501
Copy link

qwerty2501 commented Dec 30, 2021

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

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

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

@Hiroshiba
Copy link
Member Author

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

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Jan 23, 2022

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

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

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

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

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

@aoirint
Copy link
Member

aoirint commented Jan 23, 2022

@Hiroshiba

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

@Hiroshiba
Copy link
Member Author

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

@Hiroshiba
Copy link
Member Author

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

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

  • エンジン側に、対応しているパラメータを取得できるAPIを作る
  • エディタ側で、非対応なパラメータに合わせてUIを非表示にする
  • 「エンジンのデフォルトの周波数を使う」というオプションを追加する

ref

@takana-v
Copy link
Member

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

  • 話速
  • 声高
  • 抑揚
  • アクセント調整
  • イントネーション調整
  • 長さ(音素長)調整
  • 再生位置追従
  • labファイル書き出し
  • サンプリングレート
  • 疑問文

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

  • エンジンの依存ライブラリのライセンスを表示

@Hiroshiba
Copy link
Member Author

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

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

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Mar 8, 2022

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

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

@aoirint
Copy link
Member

aoirint commented Mar 8, 2022

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

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

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

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

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

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

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Mar 8, 2022

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

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

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

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

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

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

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

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

@takana-v
Copy link
Member

takana-v commented Mar 9, 2022

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

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

@Hiroshiba
Copy link
Member Author

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

@Hiroshiba
Copy link
Member Author

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

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

@aoirint
Copy link
Member

aoirint commented Mar 12, 2022

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

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

image

@aoirint
Copy link
Member

aoirint commented Mar 12, 2022

#2 (comment)

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

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

image

image

@aoirint
Copy link
Member

aoirint commented Mar 12, 2022

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

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

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

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Mar 12, 2022

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

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

  • OSSライセンス情報・エンジン利用規約・アップデート情報を返すAPIを作る

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

@ssohsn
Copy link

ssohsn commented Jan 16, 2023

すみません。LMROIDエンジンの試験用vvppを用意できたのですがエンジンの追加からインストールできなくて困っています。
ご教示いただけますでしょうか……!

フォルダでは読み込めますがvvppだとエラーが返ってきてしまいます。
vvppファイルはエンジンのディレクトリをzip圧縮し、拡張子をvvppにリネームしています。
vvppでインストールに失敗した.tmpの中に入っているフォルダをそのまま読み込んでもエンジンとして読み込まれ、読み上げなども機能するのでファイルの内容やルートディレクトリは問題ないと思いますが、何か間違えているのでしょうか?

VOICEVOX上では「インストールに失敗しました」等のエラーは表示されず、追加中~の表示が待ってる間に消えてしまいます。
コマンドプロンプトから見てみるとエラーが出ていたのですが調べてもよくわからず詰まっております。
返ってきたエラーは『 ERROR:gpu_init.cc(486)] Passthrough is not supported, GL is disabled, ANGLE is 』でした。
画像を添付します。
bandicam 2023-01-17 03-58-53-334

issuesどころかgithubの機能をほとんど使ったことがなく不慣れなため、不手際がございましたらご指摘頂けますと幸いです!
お忙しいところ大変恐縮ですが宜しくお願いします💦

@sevenc-nanashi
Copy link
Member

大きすぎてタイムアウトした説…?

もしその開発版ビルドがあれば配布していただけるとこちらでも確認できるので助かります。

@ssohsn
Copy link

ssohsn commented Jan 17, 2023

コメントありがとうございます……!大きすぎてアップロード場所が見つからないためギガファイル便にアップしました。
https://36.gigafile.nu/0124-ocab618538716b84edec6bddf152a11cb

ダウンロードに時間がかかってしまうと思われますが、どうかよろしくお願いいたします。

@shirowanisan
Copy link

shirowanisan commented Jan 17, 2023

自分の環境で出たエラーを共有しておきます。
preview.1の起動経験があるというところが原因の可能性が高そうですが、詳細まではわかりませんでした。

appdataのvoicevoxフォルダを削除すると起動できました。
(user名も貼っちゃったけど、windowsのwinchanなのでまぁ大丈夫かな)

[01:37:13.005] [error] Error: Config schema violation: `savingSetting/outputSamplingRate` must be number; `savingSetting/outputSamplingRate` must be equal to constant; `savingSetting/outputSamplingRate` must match a schema in anyOf
    at e.exports._validate (C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:8:76518)
    at get store [as store] (C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:8:75239)
    at new $ (C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:8:72972)
    at new e.exports (C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:14:123476)
    at 82497 (C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:14:710061)
    at r (C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:14:932106)
    at C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:14:932449
    at Object.<anonymous> (C:\Users\winchan\Downloads\voicevox-windows-cpu-0.14.0-preview.4\VOICEVOX\resources\app.asar\index.js:14:932463)
    at Module._compile (node:internal/modules/cjs/loader:1120:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1175:10)
    at Module.load (node:internal/modules/cjs/loader:988:32)
    at Module._load (node:internal/modules/cjs/loader:829:12)
    at c._load (node:electron/js2c/asar_bundle:5:13343)
    at Object.<anonymous> (node:electron/js2c/browser_init:185:3104)
    at ./lib/browser/init.ts (node:electron/js2c/browser_init:185:3308)
    at __webpack_require__ (node:electron/js2c/browser_init:1:128)

@Hiroshiba
Copy link
Member Author

@shirowanisan ありがとうございます!!!
おそらく仰る通り、以前の何処かのタイミングで開発版VOICEVOXを起動したためだと思われます。ありがとうございます!!!

@shirowanisan
Copy link

まだ仮説の段階ですが、icon画像のbase64が「/」から始まる際にUIで表示されない不具合がありそうです。
ちなみにvoicevoxが0.12.3のときには起きていませんでした。

自分でプルリクまでやりたいのですが、ちょっとそこまで手が回らないかもしれません💦
取り急ぎUIのバグ報告をmm

@sevenc-nanashi
Copy link
Member

icon画像のbase64が「/」から始まる際

画像タイプの推測が間違っているようです。修正PR出します

@ssohsn
Copy link

ssohsn commented Jan 18, 2023

エンジンがインストールできない問題ですがモデルを減らしたものをzip可→vvpp化で正常に読み込めました。
そのあとにvvppで読み込んだフォルダを開いて個別に『model』『speaker_info』をコピーして「bridge_config.yaml」に情報を書き加えれば容量が10GB超えても読み込めますね。
大きすぎるzipを読み込もうとしたことが原因になっていたようです。

https://drive.google.com/file/d/1mcmJxZLTb8yFTiNx_ummna8-2Progl0g/view?usp=sharing
試験版のvvppファイルお置いておきます。
コメントくださった方ありがとうございます!

@Hiroshiba
Copy link
Member Author

@ssohsn ご報告ありがとうございます!!
なるほど、サイズ…。そういえばzipファイルは4GBを超えると何か制限があった気がします。それかも…?

@Hiroshiba
Copy link
Member Author

起動が長いエンジンが場合にどれが長いか気づけると良さそうに思いました!
ということでタスクにオプション:どのエンジンが起動中かわかるようにするを追加してみました。

@sabonerune
Copy link

エンジンがインストールできない問題ですがモデルを減らしたものをzip可→vvpp化で正常に読み込めました。 そのあとにvvppで読み込んだフォルダを開いて個別に『model』『speaker_info』をコピーして「bridge_config.yaml」に情報を書き加えれば容量が10GB超えても読み込めますね。 大きすぎるzipを読み込もうとしたことが原因になっていたようです。

https://drive.google.com/file/d/1mcmJxZLTb8yFTiNx_ummna8-2Progl0g/view?usp=sharing 試験版のvvppファイルお置いておきます。 コメントくださった方ありがとうございます!

多分原因が特定できました。
恐らくvvppの展開に利用しているunzipperの不具合のようです。
ZJONSSON/node-unzipper#244
このPRは既にマージされているようですがまだnpmにリリースされていないようです。

試しにgithubのmasterブランチのものにバージョンを上げたところインストールに成功しました。

@Hiroshiba
Copy link
Member Author

@sabonerune おー!!!!!いいですね!!
もしよければプルリクも頂けると…!!!

@sabonerune
Copy link

@Hiroshiba 単純にバージョンを上げるのではなくgithubのリポジトリからインストールする必要があるのですよね…
単純に更新して解決としていいのでしょうか?(npmにリリースされているバージョンは3年前の0.10.11で止まっている)

@Hiroshiba
Copy link
Member Author

@sabonerune あー…。npmにリリースしませんかみたいなissueあるけど、音沙汰ないですね…。
ちょっとコメントしてきます。

@sevenc-nanashi
Copy link
Member

最終手段(?)として、コミットを指定してGitHubインストールでも良さそうです。

@Hiroshiba
Copy link
Member Author

VOICEVOX Nemoの開発が進んでいるのですが、その一環としてマルチエンジン機能を実験的機能から通常機能にランクアップしたいと思います 🙏
こんな感じの予定です。

  • エディタのパッチバージョンアップさせてVOICEVOX 0.14.9とし、そのタイミングで通常機能へ
  • 設定→オプション→高度な設定辺りに移動
  • 安全性を考慮して、デフォルトでマルチエンジンは引き続きOFFにしておく

@iTahobi
Copy link

iTahobi commented Oct 30, 2023 via email

@ssohsn
Copy link

ssohsn commented Oct 31, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests