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

split decoder into spectrogram and vocoder without changing API #851

Merged
merged 3 commits into from
Oct 12, 2024

Conversation

Yosshi999
Copy link
Contributor

内容

ストリーミング処理を見据え、decoderからvocoderを切り離す
cf. Hiroshiba/vv_core_inference#28

一部テスト更新してないかも

関連 Issue

その他

qryxip added a commit to qryxip/voicevox_core that referenced this pull request Oct 9, 2024
 VOICEVOX#737 に向け。また VOICEVOX#851 の後にdecode.onnx入りのVVMに対応するときも同様に
役に立つはず。
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CIのうちrust-lintが落ちてるのはcargo fmtで直るはず。

cargo fmtgit diff --stat
 crates/voicevox_core/src/infer/domains.rs |  5 +++--
 crates/voicevox_core/src/synthesizer.rs   | 15 ++++++---------
 crates/voicevox_core/src/voice_model.rs   | 11 ++++++++---
 crates/voicevox_core_macros/src/lib.rs    |  2 +-
 4 files changed, 18 insertions(+), 15 deletions(-)

let RunVocoderOutput { wave: output } = self.status.run_session(
model_id,
RunVocoderInput {
spec: interm,
Copy link
Member

@qryxip qryxip Oct 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この分野に詳しくないため"interm"の意味が掴めていないのですが("intermediate"とか?)、typosに引っ掛かっているようです。_typos.tomlに追加すれば除外することができます。

 [default.extend-identifiers]
 NdArray="NdArray" # onnxruntime::session::NdArray
+interm="interm"

[追記] ちなみにspecという名前で良いのなら、spec: specspecと書けたりします。

[追記] なんかtyposにissue立ってた。
crate-ci/typos#1033

qryxip added a commit to qryxip/voicevox_core that referenced this pull request Oct 9, 2024
 VOICEVOX#737 に向け。また VOICEVOX#851 の後にdecode.onnx入りのVVMに対応するときも同様に
役に立つはず。
Comment on lines 8 to 9
"predict_spectrogram_filename": "predict_spectrogram.onnx",
"vocoder_filename": "vocoder.onnx",
Copy link
Member

@Hiroshiba Hiroshiba Oct 9, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

命名めちゃくちゃ迷いますね!!!!!!!

というのも、ここ以外の他のファイル名は全部「作りたい何か」がある状態なんですよね。
でもここの2分割の目的は作るものを分けるためではなく、「入力全体から中間表現全体を作るもの」と「一部の中間表現から一部の音声を作るもの」に分けたいからなんですよねーーーーーーー。

その結果として、今偶然中間表現がスペクトログラムになってるだけなので、これを命名してしまうと将来名前と実態が合わなくなる可能性があるから、目的の方を名前にしたいなぁと。
もうちょっと局所的に言うと、「スペクトログラム」は避けたい。

でも名前が思いつかない。。。。。。。。。
例えばpredict_global_featurepartial_decodeとかですが・・・・・featureが良いかというと・・・・・・・。

あるいはstepwise_decodeと・・・・・・なんだろう、polish_decode・・・?
まあ後者はvocodeでも。。。良いかも。。。
(音声に限るとdecodeとの意味の違いが一切ないので、ソングの方とで二種あると混乱しそう)

もうdecode_step1decode_step2でも。。。。

でもまあとりあえず名前は何でもいいかも!!!後でいい感じに変更させていただく感じでも!!!
特に思いつかなかったら。。。。decode_global_step1decode_partial_step2とかで・・・・・・!!!!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

generate_full_intermediaterender_audio_segment でどうですか

Copy link
Member

@Hiroshiba Hiroshiba Oct 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

そちらの名前素敵だと思います!!!
その2つが良さそうに感じました!!

(以下色々考えたこと)

predictを使わずに新しい動詞を使うべきか考えました。
predictは意味のある値を推論する時に使う・・・・・・・気がする・・・・ので、意味がない中間特徴量を作るのは動詞を分けても良さそう。
renderは気になるところから生成していける雰囲気があるので、動詞としてはかなり良さそう。predictでも良いけど、まあ全体のうち一部を生成する時はrenderと呼ぶ、みたいな感じでも良さそう!
(だからsegmentはつけなくてもいいかも。別につけても良さそう。)

@qryxip さんのprecomputeも良いと思うのですが、この動詞を使うとintermediate が不要になっちゃって、precompute_fullとかglobalとかになり、preなのかfullなのかわからんってなるかもとか思った感じです!!!

まあでもぶっちゃけこの辺の語句はユーザーに露出しないので、割となんでもいいんですけどね!!!

Copy link
Member

@qryxip qryxip Oct 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

まあでもぶっちゃけこの辺の語句はユーザーに露出しないので、割となんでもいいんですけどね!!!

よくわかっていないのですが、将来的にENGINEレイヤーからAPIを生やす際は別の名前になる感じですかね?


"render"は良い名前だと思います。Web API (ENGINE)やプログラミング言語用API (CORE)の命名レベルでもいけそう。

audio = await synth.generate_full_intermediate(...)
wav_seg = await audio.render_segment(...)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

よくわかっていないのですが、将来的にENGINEレイヤーからAPIを生やす際は別の名前になる感じですかね?

はい!
ENGINEリポジトリのweb APIも、synthesizerのメソッド名も、別の名前になりうると感じてます!

onnxファイル名はコミッターたちにとって分かりやすいのがベストで、API の名称はAPI ユーザーにとってわかりやすい形がベスト、そしてその2つは違うだろうなと・・・!

今までのdecode.onnxがAPIではsynthesisになってたような感じで。

qryxip added a commit that referenced this pull request Oct 10, 2024
#737 に向け。また #851 の後にdecode.onnx入りのVVMに対応するときも同様に
役に立つはず。
Copy link
Member

@qryxip qryxip left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!!!

render_audio_segmentは、audioではなくwaveが良いかも。
audioは(狭義には)「人が聞ける範囲の音」くらいの感じなんですが、実際作ってるのは波形なのでこっちのほうが事実に即してるかな、くらい。
ちなみにvoiceは人が出す音声。

まあリリースするまでに気が向いたら変更するかも、くらいで良いかなと!!!

@qryxip qryxip merged commit 4547925 into VOICEVOX:main Oct 12, 2024
30 checks passed
qryxip added a commit that referenced this pull request Oct 29, 2024
この本文は @qryxip が記述している。

#851 で生まれた`generate_full_intermediate`と`render_audio_segment`を用
いて次の公開APIを作る。`precompute_render`で`AudioFeature`を生成し、
`AudioFeature`と区間指定を引数とした`render`で指定区間のPCMを生成する
形。

- `voicevox_core::blocking::Synthesizer::precompute_render`
- `voicevox_core::blocking::Synthesizer::render`
- `voicevox_core::blocking::AudioFeature`

また`render`で生成したPCMをWAVとして組み立てるため、次の公開APIも作る。

- `voicevox_core::wav_from_s16le`

ただしこのPRで実装するのはRust APIとPython APIのみ。非同期API、C API、
Java APIについては今後実装する。Python APIのtype stubも今後用意する。ま
たテストも今後書く。

Refs: #853

Co-authored-by: Ryo Yamashita <[email protected]>
Co-authored-by: Hiroshiba <[email protected]>
Co-authored-by: Nanashi. <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants