-
Notifications
You must be signed in to change notification settings - Fork 309
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
複数エンジン対応: すべてのエンジンからキャラクター情報を取得する #743
Conversation
こちら、ぜひぜひPRを見てみたいです。 |
…patch-multiple-engine-api
コンフリクト解消しました! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
コンフリクト解消ありがとうございます!!
ちょっと最初に1点だけコメントしました!
`No engineKey for target character style (speakerUuid == ${speakerUuid}, styleId == ${styleId})` | ||
); | ||
|
||
const engineId = getEngineIdByEngineKey(store.state, engineKey); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
たしかにengineKeyとengineIdの使い分けがなかなか難しそうな気がしました!
ちょっと何度も聞いてしまっていて申し訳ないのですが、どういう使い分けが想定されていたんでしたっけ・・・🙇
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
engineIdは、エンジンの種類(VOICEVOX ENGINEやCOEIROINK ENGINE)に対して、エンジンの提供者が割り振るIDです。バージョンが変わっても同じIDを使うことを想定しています。
engineKeyは、エディタに登録されたエンジンの登録項目(ユーザ登録エンジン1、ユーザ登録エンジン2のような)に対して、エディタが自動的に割り振るIDです。
例えば、以下を区別するためのものです。
- ローカルで実行されているVOICEVOX ENGINE 0.12.3
- ローカルで実行されているVOICEVOX ENGINE 0.7.5
- VPSで実行されているVOICEVOX ENGINE 0.7.5
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ただ製品版VOICEVOX(エディタとエンジンが同梱配布)では、エディタ初回実行時にengineKeyを決定するような仕組みを入れるのは複雑かなと思ったので、配布時に既に割り振られている(.env.productionに記述されている)形を想定しています(DEFAULT_ENGINE_INFOS
では決め打ちの値ということ)。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
VOICEVOX 0.12.3では、キャラクター+スタイルの情報は、AudioCellがstyleIdとして持っています。
AudioCellの内容はプロジェクトファイルに保存されます。
複数エンジン対応後、キャラクター+スタイルを一意に識別するには、少なくとも(engineId, styleId)または(speakerUuid, styleId)が必要です(エンジンバージョンによる違いは無視)。
#609 (comment) で(engineId, styleId)がよさそうということだったと思うので、このPRではAudioCell(プロジェクトファイル)が(engineId, styleId)をもつように変更しています。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
engineKeyからengineIdを引く処理、またはengineIdからengineKeyを引く処理が必要になっていて、この変換が挟まること、どの関数でどちらを受け取るべきなのかを決めること、が複雑(わかりにくい)と思っています。
このPRでは、実装を簡単にするためにengineKey == engineId
を想定していて、このロジックが分散しないようにgetEngineIdByEngineKey
、getDefaultEngineKeyByEngineId
で共通化しています(インタフェースは暫定的なものです)。
例えば、エンジン設定UIでengineIdに対するデフォルトのengineKeyを設定できるようにして、それをgetDefaultEngineKeyByEngineId
が返すことで、シンプルなエンジン切り替え(バージョン切り替え)の仕組みが作れると思っています(いろいろな初期化が必要そうなので再起動を促すと楽そう)。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ありがとうございます!!非常によくわかりました!!!
AudioCellでengineIdを使うのは、現行と同じ挙動になって、少なくとも使い勝手が悪くなることは無く、かつ実装もそこそこシンプルなので、やっぱり良い方法だと感じました。
将来的にはAudioCell(よいうよりAudioInfo)にengineKeyも保存する形を目指す感じになる感じでしょうか。
(過去バージョンのエンジンと今のエンジンを統一的に使えるように)
engineIdとengineKeyを分けたいのは賛成なのですが、今は同一に扱っているため、潜在的なバグに気づきにくく、かつ実装方針もなかなか定まりにくいのかなと感じています。
もうAudioInfoにengineKeyも持たせちゃうのはどうでしょう 👀
getDefaultEngineKeyByEngineId
とgetEngineIdByEngineKey
を用意するのは賛成です!
でももしかしたらgetDefaultEngineKeyByEngineId
とgetEngineIdByEngineKey
を呼ぶべき機会はとても少なくて、
前者は「AudioInfoにあるengineKeyがengineInfosにないので仕方なくデフォルトのを使うとき」のみ、
後者は「AudioInfoに登録するためにengineIdを得るとき」のみにできるのかなと思っています。
なんか見落としや気づいてない点がありそうなので、ご指摘頂けると。。。🙇
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
もしくは、engineId周りを一旦コードから外しちゃうというのはどうでしょう 👀
一旦外すことを提案している理由はもう2つあります。
理由の1つは、上述のような、engineIdをどう扱うか・どう実装するかの議論が発生してしまうためです。
結構大きな変更コード量なので、差分を明確にしたいという気持ちがあります。
もう1つの理由は、このプルリクエストが、エディタ側の複数エンジン対応に必須な最後のコードだからです。
この最後のキャラクター統合さえ完了すれば、他のコードを一気に組み込んで行けるため、ぜひ早く取り込みたいという気持ちがあります・・・!!!
もしよければ・・・!!
engineIdどうするかさえ決まれば…!! |
こちらいかがでしょう 👀 今頂いている2つのPRの機能が揃うと複数エンジン対応を多人数でガツガツ進められそうな気がしています。 |
ちょっとお返事がないので、頂いたPRを派生して実装して別のRPを作ってみます! |
に引き継いでいただいて、マージされたのでこちらはクローズします! |
レビューありがとうございました!! |
内容
#741, #742, #754, #755 の差分を含んでいます。そちらを先に確認おねがいします。これまで、DEFAULT_ENGINE_INFOSに登録されたエンジンを起動し、接続テストを待機するようになっていました。
このPRでは、エディタ起動時にすべてのエンジンからキャラクター情報を取得するようにします。
AudioCellにengineIdの追加が必要になったので、変更量が多めな気がします(概念としてengineKeyとengineIdが混じりあっていてややこしい実装になっていると思っているし、適切に使い分けられているか自信がない...)。
TODO
動作確認手順
Windows上で、VOICEVOXエンジン・COEIROINKエンジンを適当なディレクトリに配置後、.envファイルを以下のように書き換えてください(engineKeyはランダム)。
関連 Issue
スクリーンショット・動画など
その他