VOICEVOX / voicevox

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

モーラごとに調整結果が転写される機能の評価・議論 #1644

Open Hiroshiba opened 11 months ago

Hiroshiba commented 11 months ago

質問の内容

こちらのプルリクエストで、テキストを変更した時に同じ文字(モーラ)のものの調整結果を継承するようになりました! 🎉 (thx @weweweok !)

ただ現状だと同じ文字が1文字であってもその調整結果が継承されるため、逆に使い勝手が悪くなるということもありえるかなと思っています。 このissueでは実際に使ってみた感想などを集めてみて、どうして行くのが良いのかなどを議論できればと思っています。

(ちなみに機能を使うためには実験的機能から「調整結果の保持」をオンにする必要があります)

VOICEVOXのバージョン

開発最新版が必要です https://github.com/VOICEVOX/voicevox/releases/tag/0.15.0-dev

その他

weweweok commented 9 months ago

@sevenc-nanashi さんの案を引用します。

今のところ、「AccentPhraseにoriginalを持たせる」と言う案が一番有効だと思われるようです。

しかし、originalが何を意味しているのかがちょっとわかりませんでした。

sevenc-nanashi commented 9 months ago

しかし、originalが何を意味しているのかがちょっとわかりませんでした。

エディタのStateに、「エンジンから持ってきた時の原本のAccentPhrase」を持たせる、の意ですね。 この原本との比較で「元のイントネーションからいじったかどうか」を判断する感じです。(いじってたら保持する、いじってなかったらテキスト変更時に変わる)

Hiroshiba commented 9 months ago

僕もほぼ同意見だったのですが、ちょっと問題があるポイントを思いつきました!

テキストが変わってAccentPhraseを再取得した際、いじったイントネーションと再取得したイントネーションが一致することがありそうです。 偶然一致してしまうといじったかどうかを誤判定してしまうなぁと。(一番ありそうなのが無声化の誤判定) まあでもこれ考え始めてしまうとややこしいのと、解決するにはoriginal+変更フラグの管理が必要なので、まずはoriginalを実装するのがいい気がしました!

originalを持っておくデータ構造が2種類考えられるのですが、どっちがいいですかね。。。 1つがAudioQuery.AccentPhrase.Mora内に、originalPitchとoroginalLengthを持たせるパターン。 もう1つがoriginalAudioQueryやoriginalAccentPhrasesを別で持っておくパターン・・・。 多分前者の方が楽なんですが・・・これで良いのかどうか若干自信がないです・・・・。

Hiroshiba commented 8 months ago

すみません、こちらの機能ですが十分に検証できていないので0.15のアップデートには含めない形に調整させてください 🙇

判断の理由としては、おそらく多くの人が期待する操作感と大きく乖離する可能性があるためです。 同じような機能に「疑問文の自動調整」(はてなマークがついていた時に末尾の音高を少しだけ上げる機能)があります。 こっちもうまくいかない可能性はあるのですが、この機能がうまくいってないことに気づきやすいのと、影響範囲が限定的なのでメリットとデメリットのバランスからギリギリOKという認識です。

一方で調整結果の転写はおそらくとても便利なのですが、同じモーラが偶然あった時に前の結果を引き継いでしまう仕様をなかなか想像できないことと、かつその時にこの機能が原因であることに気づきづらい可能性があると思います。 もちろんそうじゃないかもしれないので、十分に試してからであれば良いのですが、ちょっと時間を取れておらず検証が間に合いませんでした 🙇

なので大変申し訳ないのですが、一旦開発時のみこの設定が現れるようにし、本番ビルドでは必ずオフになるようにさせていただこうと思います。

機能自体はとても魅力的だと思います! もっと検証重ねたり、オリジナルを持たせて変更箇所のみ反映させる形にして、自信を持って出せればと思います! もしよかったらリリース目指してブラッシュアップできると嬉しいです・・・!

(関わってくださった方にメンションです @sevenc-nanashi @weweweok )

weweweok commented 5 months ago

提案なんですが、 voicevoxのユーザーはおそらくテキストを変更したら調整結果がリセットされるものという認識が強いと思われるので、調整結果を保持したい箇所を何かしらの記号で囲むと、使いやすくなるのではないかと思います。 具体的な利点としては

ちょっと、適当な記号で実装してみます。

Hiroshiba commented 5 months ago

@weweweok なるほどです、面白い切り口だと思います! ちょっと議論したく!

現状、テキストに再入力したものから記号の位置と読みの位置を対応付けるのはかなり難しそうです。 またテキストの文字1つが読みと1:1対応していない場合に対応が取れないなどの解決できない問題があるかもです。helloのelloだけ記号で囲った場合とか。

別アプローチとして、例えば「この部分だけ保存したい」と思うアクセント句をマークしてもらうとかも考えられるかもです。 これだったらアクセント句単位になるので実装しやすいかもしれません。 またこれさえ実装しておけば、将来的にテキストに記号を入れたときに固定されるアクセント句を自動で選ぶようにすることも可能かもと思いました。

weweweok commented 5 months ago

そちらの方が良いかもしれません!

ヒホさんの案で実装するとなると、

と言った感じになりそうです。

Hiroshiba commented 5 months ago

良い感じのUXに思いました!

・・・けど、よくよく考えてみると、そもそも1単語や区間だけイントネーションを保存したいということがあまり無いのではという気がしてきました・・・・・・。 ユースケース思いついてたらちょっと教えていただきたく・・・!!!

weweweok commented 5 months ago

ちょっと考えてみましたが、句点を区切れれば良いという認識だったため、この考え自体が間違っていました。

ユースケースもこの認識が前提だったので、私の確認不足でした。🙇

ちょっと改めて、またご相談させていただきます。

Hiroshiba commented 5 months ago

句点ごと、なるほどです!(読点ごとですかね?) 句読点ごとにマークというのはたしかに操作簡単かもですね。 まあでもおそらくなかなかマークを使われる方は珍しいだろうなーと感じました!すみません!!

アイデアまた思いついたらぜひコメントしてください🙏