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

ラベルファイルと音声ファイルの長さが一致しない #785

Open
1 of 3 tasks
Yosshi999 opened this issue Apr 13, 2022 · 3 comments
Open
1 of 3 tasks

Comments

@Yosshi999
Copy link
Contributor

不具合の内容

https://twitter.com/ekidenp/status/1514210801459945478

リップシンク用のラベルファイルを書きだしたとき、全体の長さが少しずれる

現象・ログ

上記ツイートから引用:

wav  lab
3.029秒 2.931秒(0.9675倍)
7.114秒 7.027秒(0.9877倍)
9.056秒 8.766秒(0.9679倍)
1.408秒 1.308秒(0.9291倍)

再現手順

「スーパーキラキラカラフルクッキリディスプレイ」を四国めたん(ノーマル)で書き出し

音声ファイル:2.613sec
ラベルファイル末尾:2.6492364 sec

期待動作

長さが一致する

VOICEVOXのバージョン

commit: 15763fc

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

たぶん
https://github.com/VOICEVOX/voicevox_engine/blob/master/voicevox_engine/synthesis_engine/synthesis_engine.py#L448
で音声側の長さがずれている。
長さをroundして256倍しているので、最大で 128frames ずれるため、おそらく1音素当たり 128/24k(Hz) = 5ミリ秒 の誤差が生じる

@Hiroshiba
Copy link
Member

issue化ありがとうございます!!

エディタ側で同じround処理するという手がありますが、エンジン側の仕様が変わってもエディタ側は気づけないので、この方法は避けたいです。

エンジン側に何らかの方法で、roundしても全部をsumした値があまり変わらないようにする手はあるかもと思いました。

あ!
それぞれの音素長をroundするのではなく、音素長の累和(cumsum)をとってからroundしたあとまた音素長求めなおす、という手を思いつきました。
どうでしょう。

@Yosshi999
Copy link
Contributor Author

それぞれの音素長をroundするのではなく、音素長の累和(cumsum)をとってからroundしたあとまた音素長求めなおす

なるほど、全体のframe数に対する各音素長の比率で割り当てていくんですね
確かにそれで一文あたりの誤差を一定のサイズに抑えられそうです。

ところで実はもう一つ懸念点があって、文章を結合して出力する場合に前文のlabの秒数から続けている ため、結合出力の際は各文章での誤差が蓄積する可能性があります

上の対策と同時に音声ファイル長とラベルファイル長を強引に合わせる対策をやった方がいいと思うんですがいかがでしょうか?具体的には各文の音声blob から音声長を取得しラベル末尾に代入する方法を考えています。

@Hiroshiba
Copy link
Member

たしかに音声を結合してlabを作る場合でも同じ問題が発生しますね!!
仰るとおり音声から音声長を得るとより正しくなると思います!

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

2 participants