-
Notifications
You must be signed in to change notification settings - Fork 313
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
ソング:frameAudioQueryの音高をオクターブ(あるいはキー)変更できるようにしたい #1838
Comments
ひとまず処理だけ実装してみます…! |
ざっくりデザイン案(シンガーの場合のみ): https://xd.adobe.com/view/e2dd1809-cb0e-4f09-8cb9-6a1434ffb249-b78e/ すでにDiscordでみなさまに案出されておりまして、 1つだけ追加するとしたら「シンガー」の「キーシフト?」「歌い方?」に見える形がいいかも |
「歌い方」なるほどです!!良さそう感。 これ本当はハミングキャラクターと、歌い方を生成するキャラクターが別なんですよね。 |
↓にも書いたのですが、やっぱり UX で迷っています 😇 現状「f0」がユーザーが入力したスコア、キーシフトしたスコア、生成したf0、その後 キーシフトしたf0、実際になっている音のf0と数多あって、認識がもしかしたらずれてるかもと思ったのでちょっと詳しく紹介する動画を撮ってみました!! hoge.mp4 |
あ、個人的に1番良いのは、各スタイルの得意音域を予め持っておき、歌い方キャラとハミングキャラの音域のずれを勝手に補正する形だと思ってます。 |
#1842 でトランスポーズ機能が実装されました! 今のところ自分の中で考えてる UX をまとめてみます。
|
#1842 でピッチをトランスポーズする機能を実装しましたが、表示が「トランスポーズ」だけだと、(ピッチの推論時に入力する)ノートはトランスポーズされない(単純なトランスポーズではない)ことにユーザーは気づけないかもと思いました…! 一応表示を「ピッチのトランスポーズ」にすることで、ノートではなくピッチのトランスポーズであることはユーザーに伝わると思いますが、@romot-coさんがおっしゃる通り、UIの表示だけで「値を変更したときに起こること」や「何のための機能なのか」をユーザーに伝えることは難しく、「機能・ソングのスタイル周りの説明」が必要になりそうです。 手動補正で、ユーザーに伝える必要があるのは、以下の4つかなと思います。
4の、一致させるかどうか(1つのパラメーターでノートとピッチの両方をトランスポーズするか)はまだ決まっていません(#1842)が、一致させて、使い方やツールチップで機能の説明を行うことを前提に表示を「音域の補正」にすると、UIはシンプルになるかもと思いました。 |
@Hiroshiba @sigprogramming 無理にやるとすれば、案としては以下のような形でどうでしょうか(悩み苦しんでいる感じですが…)
ただ、これだと意味が違う・なんだかわからない気もしており、やはり機能説明はいるかも… |
→ 今回はとりあえずシフトする機能あればよさそう |
初期分を考えると、 トランスポーズ相当の場合キーを [+1] して歌う ピッチ戻す場合歌い方を [+1] キーにする みたいな感じのをもういっそUIに書いてしまえば([+1]あたりは入力)いちおう起こることはわかりそう…? |
なるほどです!!!
にするのが丸いかなと思いました! (リリース前のちょっとワークアラウンド的な微調整は主に僕がやっちゃって、そもそもの抜本的な解決を @romot-co さん主体で取り組んでいただくとうまく回るかもとちょっと思ってます!) それはさておき 最高の UI も考えてました。 僕も @romot-co さんと似ていて、2者の音域を合わせるような UI が良いかなと! で、得意音域外のピアノロールが暗くすれば音域を変えた時に見た目が分かりやすそう。 |
@Hiroshiba
おなじくで、悩んでみた軌跡を置いておきます…叩き台になれば…!(良いアイデア求む ラインがいちばんマシに思えますが、それでもよくわからない気がしております |
@romot-co 眺めさせていただきました!! 鍵盤のとこにアイコン表示、いい感じな方向に思いました!!! 音域補正をGUI上でも動かせるのなるほどでした!! アイデアの足し程度ですが、シンガーの音域はスコア上の色で表現して、ガイドの音域だけピアノ鍵盤あたりに表示するとか思いつきました! |
完璧なUIが何なのかの探索と、とりあえずラベルを変える部分がまだですが、issueの目的は達成できたと思うのでcloseします! UIの方は引き続きここで議論するもよし、別issueでリスタートするもよしだと思います! @sigprogramming さん、実装ありがとうございました!! |
内容
VOICEVOXのハミングの仕組みは、最初歌が歌えるスタイルで歌い方(音高やパワーなど)を生成し、成果物をハミングに入力して音を生成しています。
歌が歌えるキャラクターの得意音域と、ハミングのキャラクターの得意音域が違う場合、音声合成がかなりうまくいかないことが分かりました。
特に現状歌が歌えるキャラクターは波音リツのみで、音域的にどうしても男性領域をカバーできないので、男性ハミングがうまくいかない状況です。
解決策は色々あるのですが、中でもエディタの変更だけである程度迂回できる方法があります。
歌い方を生成した後、生成された音高のオクターブやキーを変更してあげることです。
このissueではオクターブや変更ができるようになったり、あるいは問題がそもそも解決したら完了だと思います。
現状男性キャラクターをリリースできない状況なので、優先度が最大になっています。
やり方を詳しく実現方法のところに書いているので、もし誰か取り組めたら是非取り組んでみてほしいです!
Pros 良くなる点
カバーできない音域をカバーできる。
得意音域が若干違っている時も調整ができるようになる。
Cons 悪くなる点
UI が1つ増える。
実現方法
frameAudioQuery
はこの辺りで取得しています。voicevox/src/store/singing.ts
Line 927 in fb78789
中に
.f0
パラメーターがあり、その中に周波数がフレームレベルで入っています。f0(ちなみに基本周波数です)を変調してあげればオクターブやキーシフトができます。
変調する時の計算式は
f0 = f0 * 2 ** (key / 12)
です。**
は累乗です。例えば1オクターブ下げる場合は
key=-12
で、f0 = f0 * 2 ** (-12 / 12) = f0 / 2
です。ここでいうkeyはカラオケとかでよく見るキーのことです。
あとはどれぐらいシフトするかの量を UI で選べるようにし、↑の計算式に従って計算すれば終わりだと思います。
UIは例えば「オクターブ2つ下・1つ下・変更しない・1つ上・2つ上」みたいな選択リストを作って選べるようにすれば完了かなと!
その他
実際には関係ないのですが、この機能をどう案内しようか結構迷ってます。
ピッチシフトだと出力音量の周波数がシフトされるイメージですが、実際は入力ピッチなので・・・。
得意音域のシフト、とか・・・?
The text was updated successfully, but these errors were encountered: