-
Notifications
You must be signed in to change notification settings - Fork 310
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
ADD: AudioItemにSpeakerIdを追加 #1092
Conversation
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.
PRありがとうございます!!
とりあえず実装しておくの、良いのかなと思いました!
レビュー前に、ちょっとモチベと相談なのですが、いくつか気になったことが・・・!
- プロジェクトファイルのSpeakerID追加マイグレーションに関して、MYCOEIROINKが大変そう
- エンジンから変換リストを作ろうとし、無理だったらフォールバックでビルトイン変換リストを使う、とか・・・?
COMMAND_CHANGE_STYLE_ID
など、Voiceを渡してるけど名前がSTYLE_IDになってる- 別にそのままでもまあ問題ないと言えば問題ない
- もしよければ、くらいです
COMMAND_PUT_TEXTS
など、engine/speaker/style IDをそれぞれ渡してるのもありそう- これも全く問題ないのですが、もしよければ統一しとくと便利かも、くらいです
- AudioItemにVoiceを持たせる・・・?
- 将来仮にVoiceVersionをもたせるときに楽そう
- なんか変なとこに影響範囲ありそうなので、まあこれももしよければくらい
大変そうなので複数エンジン実装までに入れられないかなと急いでPR作った感じですね。 |
複数エンジンリリースは月末で、その1週間くらい前まではバグフィックスとか含めると思います。そこまでにできると嬉しいなって感じですね…! 待機、良さそうに感じました。 スマホからなので色々情報不足ですが、参考になれば!! |
基本的に情報を足りなくて困る事はあっても、多くて困ることは可読性が悪くなるくらいだと思うので大丈夫でしょう。 ただ、ロジックの変更まで含めると時間も掛かりそうなので取り敢えずロジックはそのままに追加でもいいと思います。 |
@Segu-g さんコメントありがとうございます!!
こちらのコメントで課題点がはっきりしました!
まあ、個人的には一旦諦めてとりあえず実装でも良いかなと思います! その場合でも、Voiceを引数にしたり、engine/speaker/styleのペアだったり、関数名がSTYLE_IDだけど渡すのは前者どちらかだったりと、結構複雑度が増してしまっている印象があります。 正直どうすべきかとても迷っています 😇 |
COEIROINKのエディタのマイグレーションのことを完全に失念していました。 そうなると急いで複数エンジンに間に合わせる必要性は薄くなるのでエンジンに話者情報を問い合わせてマイグレーションするようにした方がいいかもしれません。 あとプロジェクトファイル以外の変更点ですがStyleIDを操作するときに同時にSpeakerIdも操作するように処理を付け加えただけですね。 |
src/store/audio.ts
Outdated
@@ -417,6 +418,7 @@ export const audioStore = createPartialStore<AudioStoreTypes>({ | |||
payload: { | |||
text?: string; | |||
engineId?: string; | |||
speakerId?: string; |
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.
GENERATE_AUDIO_ITEM
は引数がOptionalなのでそのままにしている。
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.
これご興味あればという感じなのですが、audio_itemもengine/speaker/styleではなくvoiceにするのどうでしょう…?
こうするとたぶんAudioCell辺りも↑の三変数管理する必要なくなったりと、結構コードがすらっとしそうだな〜と…!
マイグレーション周りもちょいいじらないとダメそうですが。。
でももう十分良い感じなので、もしよければ…!!
あ、確かに!!
あーーーなるほどです! |
voicevox/src/views/EditorHome.vue Lines 519 to 523 in 7292b6b
この辺りでbackground.tsにエンジンの起動が完了したことを通知する必要があるかもしれません。 |
あーーーーーーー そのとおりでした、VUEX作りが完了したタイミングだからダメですね。。 🙇♂️
仰るとおりだと思います。VUEX_INITなどと同じく、ON_ENGINE_READYとかENGINE_INITとかですよね。 あるいはデータの流れをよりわかりやすくするなら、セーフモード引数と同様にvvprojのパスをbackground.tsからvuex側渡し、エンジン起動後にEditorHomeでそのパスがあればloadする、というのもありだと思います。 |
どちらにせよちょっとややこしく、このPR内でやるのは範囲外かもですね。。。 プロジェクトファイルのマイグレーションの流れを正確にする意図でまず必ず起動後にvvprojが読まれるようにしたあと、今のPRを進めるのがまあきれいかもです。 (修正範囲がそこまで大きくなさそうであれば、このPRで一緒に修正でもまあ大丈夫です!) |
もう少し進めてみようとおもいます。 |
StyleIdの取得をUSER_ORDERED_CHARACTER_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.
おー!!面白いですね!!!
SET_PROJECT_FILEPATH
がきれいに機能している印象です。
プロジェクトファイルを読み込む部分だけプルリクにする、というのはどうでしょう。
このプルリクのタイトルと内容が若干乖離していることと、なによりこれだけで有用なので提案してみた次第です。
プロジェクトファイルの読み込み部分のみのプルリクエストを作成します。 |
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.
一通り完了。
#1147 がマージされることが前提。
const speakerIdComputed = computed(() => { | ||
if (!store.getters.USER_ORDERED_CHARACTER_INFOS) | ||
throw new Error("assert USER_ORDERED_CHARACTER_INFOS"); | ||
return store.getters.USER_ORDERED_CHARACTER_INFOS[0].metas.speakerUuid; | ||
}); |
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.
ここvoiceComputedにできそうだなと思いました!
まあ修正範囲広くなっちゃうのでこのままでも良さそう。FIXME書いても良いかも?
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.
voiceComputedにしました。
const engineId = payload.engineId ?? state.engineIds[0]; | ||
|
||
// FIXME: engineIdも含めて探査する | ||
const styleId = | ||
payload.styleId ?? | ||
state.defaultStyleIds[ | ||
state.defaultStyleIds.findIndex( | ||
(x) => | ||
x.speakerUuid === userOrderedCharacterInfos[0].metas.speakerUuid // FIXME: defaultStyleIds内にspeakerUuidがない場合がある | ||
) | ||
].defaultStyleId; | ||
const defaultStyleId = state.defaultStyleIds[0]; | ||
const voice = payload.voice ?? { | ||
engineId: defaultStyleId.engineId, | ||
speakerId: defaultStyleId.speakerUuid, | ||
styleId: defaultStyleId.defaultStyleId, | ||
}; |
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.
レビューメモです。
ここ問題ないか処理を追いかけてみてたのですが、
・voiceがない場合の処理以外は大丈夫
・voiceがない場合は起動後のaudioCell作成だけ
・デフォルトスタイルIDの0番はエンジン起動後に必ず作られる
・最初のaudioCell作成はエンジン起動・デフォルトスタイル作成後
なので大丈夫そうでした!
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.
LGTM!!!!
差分を極力少なくしてくださっているのを感じました、とても見やすかったです!!!
audioItemの~~id系はundefinableじゃなくせたんですね!!気づきませんでした。
そこプラスVoice統合でかなりコードが扱いやすくなったように感じました、改良ありがとうございます!!
Co-authored-by: Hiroshiba <[email protected]>
Co-authored-by: Hiroshiba <[email protected]>
Co-authored-by: Hiroshiba <[email protected]>
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.
@Segu-g さん すみません!
もしお時間あったら「AudioItemにSpeakerIdを追加する」点に関して問題点がありそうかご意見だけもらっても良いですか・・・? 👀
(コードレビューは無しで大丈夫です!忙しかったら難しいとおっしゃって頂ければ!!)
指摘点を直しました |
卒論書いてる最中なので流し読みした程度ですが、話者に関する情報が纏められてかなり読みやすくなったと思います!取りあえずSpeakerIdを追加しておくのはCharactersから情報を取ってき易くなるのでやり得だと思いました! ただ自分は詳しくないので何とも言えないのですが、キャラを追加するタイプのエンジン(マイコエとか?)やバージョン違いが実装された場合、 |
たしかにバージョン情報を足したくなる気がします。 あ、engineは既に足されてる感じです! |
問題ないと思うのでマージしたいと思います!! |
変更しなければいけない可能性があるのは |
内容
AudioItemにSpeakerID(SpeakerUUID)を追加します。
その他
複数エンジンが実装されるとマイグレーションが複雑になる可能性があるためとりあえず追加だけしました。