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

ソング・ハミングで口パクデータ(.labファイル)を出力したい #2107

Open
Hiroshiba opened this issue May 29, 2024 · 3 comments

Comments

@Hiroshiba
Copy link
Member

内容

トークソフトにはよくある .lab ファイルの出力機能がソング側にもあると面白そうです。
実際の需要の声↓

https://x.com/Sazanami_ch35/status/1795808363064013058

VOICEVOXは原理的に、音声合成の途中で音素列を求めます。
その情報はエディタ内にもあるので、どうにかしてファイル出力まで持っていけば可能だとは思います。

phonemes: Array<FramePhoneme>;

Pros 良くなる点

口パクで歌えるようになるので動画映えする

実現方法

音素列を取得し、labに加工してファイル保存すればOKなはずです。

labに加工する方法はトーク側にあります。

export async function generateLabFromAudioQuery(

ファイル保存は、wav保存時に同じファイル名.labを保存すればOK。

問題はどうやって音素列を保存関数まで持っていくかだと思います。
現状音声合成はリアルタイム性を加味するためにRENDER関数で閉じていて、音素列を持ってこれないはずです。
また給付ごとに区切ったフレーズごとに音声合成しているので、フレーズごとに散らばっている音素列をどうにかして集約する必要もありそうです。

このあたりの設計を整理するところからなのかなと思います。

その他

設計だけでもコメントウェルカムです!
不明な点などあれば気軽にお聞きください 🙏

@sigprogramming
Copy link
Contributor

sigprogramming commented May 30, 2024

EXPORT_WAVE_FILEレンダリング完了を待ってから書き出すようになっていて、これと同じようにレンダリング完了を待つようにすれば音素列を持ってこれると思います。
音素列はstate.singingGuides.get(phrase.singingGuideKey)してsingingGuide.query.phonemesで取得できます。

フレーズごとに散らばっている音素列は、以下の流れで集約できると思います。

  1. 各音素の位置(曲の先頭から何秒のところにあるか)を求める
  2. フレーズごとに散らばっている音素列を一つにまとめる
  3. pauが連続しているところを一つのpauにまとめる
  4. 各音素の位置を $t_0, t_1, t_2, \ldots, t_{n-1}$ として、 $t_i &gt; t_{i+1}$ の場合に $t_{i+1}$$t_i$ に設定する

@Hiroshiba
Copy link
Member Author

この機能の要望を結構見かけるので、優先度中にしたいと思います!挑戦者求む!
https://x.com/roxtarland/status/1819718592163918197

@sigprogramming
Copy link
Contributor

#2356 で実装した処理を使用すれば、こちらすぐ実装できそうです、取り組みます。

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