VOICEVOX / voicevox_core

無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア
https://voicevox.hiroshiba.jp/
MIT License
844 stars 114 forks source link

モーフィング機能を追加する #713

Open qryxip opened 8 months ago

qryxip commented 8 months ago

内容

@White-Green さんのWhite-Green/WORLD_rsを利用してモーフィング機能を追加します。

関連 Issue

その他

qryxip commented 7 months ago

なんかわかりませんが、windows-2019でビルドできなくなるみたいですね… (2022だと多分通る)

qryxip commented 7 months ago

とりあえず設計はこんな感じです。

C/Python/Javaとかがまだですが、設計レベルで今のうちに何か意見を頂けるとと思っています。

Hiroshiba commented 7 months ago

設計では特に意見無いのですが、そもそもモーフィングをコアに実装すべきなのかどうかでかなり悩んでいます。 主にメンテコスト(数千行?)に合うだけの需要があるのだろうか、という観点で・・・。

今のところ、まあRust以外の言語でも使えるのであれば、断る理由は特にないのかなという気持ちでいます。 ただ可能であれば、ちょっと実験的機能という立ち位置にして、将来なくなる可能性もなくはないことを示唆できると良いのかなと思いました! (といってもメンテナンスできる人がいなくなったらとか、どれかの機能をオミットする必要が出てきてしまったとか、そういう場合にしか消えることはなさそうですが)

qryxip commented 7 months ago

C APIを除き、テストは今のところmorphable_targetsのみです。

synthesis_morphingの方のテストについては、base, target, モーフィングの出力WAVをPyWorldで読んでスペクトログラムがそれっぽい範囲になっているかを見るといったのもよいのではと思っています。

Hiroshiba commented 7 months ago

synthesis_morphingの方のテストについては、base, target, モーフィングの出力WAVをPyWorldで読んでスペクトログラムがそれっぽい範囲になっているかを見るといったのもよいのではと思っています。

もしwavファイルが完全一致しそうであれば、e2eテストのwavファイルのスナップショットテストとかどうでしょう。 試聴できますし、変更されていたときにgithub上で再確認できる(はず)なので便利かなと。 (あるいはスペクトログラム画像のスナップショットでも・・・。)

qryxip commented 7 months ago

ORTの推論が決定的ではないので、完全一致は厳しそうです。 ただWAVをスナップショットにするというのはありな気がしてきました。WAVを読んで[i16]の近似での比較をすればいいだけですし。

Hiroshiba commented 7 months ago

@qryxip

https://github.com/VOICEVOX/voicevox_core/pull/425#issuecomment-1426972183ので、完全一致は厳しそうです。 ただWAVをスナップショットにするというのはありな気がしてきました。WAVを読んで[i16]の近似での比較をすればいいだけですし。

あったしかに・・・。 wavは将来的な都合上、聴覚的には差がほぼ無いけど数値的には誤差があるように見えるようになるかもです。 (波形は周期構造で、その周波数に計算誤差があると誤差が蓄積して波形の周期が変わってきそう) なので誤差を許容する形での比較ならスペクトログラムのが目的に合いやすそうかもと思いました 🙇 テストフレームワークが許すなら、wavでスナップショットを取り、比較はスペクトログラムで行うみたいなのが最高かもです。

sevenc-nanashi commented 7 months ago

WORLD-rs、ライセンスがないので少し怖いです。(ライセンス関係はあまり詳しくないですが) White-Greenさんにライセンスを足してもらう必要がありそう?

White-Green commented 7 months ago

@qryxip @sevenc-nanashi いろいろご指摘等ありがとうございます