Skip to content

Streaming response#1823

Open
Yosshi999 wants to merge 6 commits intoVOICEVOX:masterfrom
Yosshi999:streaming-response
Open

Streaming response#1823
Yosshi999 wants to merge 6 commits intoVOICEVOX:masterfrom
Yosshi999:streaming-response

Conversation

@Yosshi999
Copy link
Contributor

内容

指定時間単位で音声合成を行いストリーミングでレスポンスを返すエンドポイントを実装。

関連:
#1542

関連 Issue

#1492

TODO

stream対応VVMのmetas.jsonを変更する

ストリーム生成に対応しているvvmを読み込むことでストリーム生成を有効化する という設計であるため、非対応のvvmは generate_full_intermediate render_audio_segment 関数を持っておらず、そのまま叩くと以下のpanicを起こしてしまう。

thread '<unnamed>' panicked at crates\voicevox_core\src\core\status.rs:219:17:
missing session set for `ExperimentalTalkDomain` (should be checked in `VoiceModelHeader::new` and `ids_for`)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

また、PythonのCDLLからは関数のリストが取れなさそうなので、叩いてみるまでpanicするかが分からない。

そこで、メタデータのsupported_featuresにstreaming_synthesis項目を追加し、ストリーム生成対応のvvmにはTrueが明示的に埋め込まれていることを仮定している。

この方法がまずかったら指摘してください。resources/character_info/<uuid>/metas.json をいじる羽目になるため筋が良くないかも... ただいずれにせよ、エディタからも各styleの対応状況を知りたいはず(エディタ利用者がやることはストリーム対応VVMのダウンロードとチャンクサイズの設定だけで、普通の生成かストリーム生成かは自動で切り替えてほしいはず?)

@Yosshi999
Copy link
Contributor Author

メモ:マシンにとって最適なチャンクサイズ(秒)は RTF (1秒の音声を処理する時間)に対して

chunk_length = round(2 * margin_width * RTF / (1 - min(1,RTF))) * 256/24000

@Hiroshiba
Copy link
Member

Hiroshiba commented Nov 22, 2025

@Yosshi999

非対応のvvmは generate_full_intermediate render_audio_segment 関数を持っておらず、そのまま叩くと以下のpanicを起こしてしまう。
エディタ利用者がやることはストリーム対応VVMのダウンロードとチャンクサイズの設定だけで、普通の生成かストリーム生成かは自動で切り替えてほしいはず?

!!!!!!! たしかに、問題ですね!!!
整理するとこう?

  • エンジンは原理上いろんなVVMを突っ込める、streaming非対応VVMも。
  • 課題1:現状だとVVMの各スタイルがstreaming対応しているかわかる方法がない
  • 課題2:streaming非対応スタイルで関数を叩くとpanicになる(ので課題1の解決にならない)
  • 課題3:エディタ側でstreaming対応スタイルなのか分かる方法が必要にもなる

課題1と2に関してコア側にissue作りました!!

課題3に関しては、課題1次第で実装が変わってくるかなと思っています。

このPRで書いてくださった @Yosshi999 さんの方法(ENGINEのmetas.jsonに対応有無を書く)もかなり良いのですが、過去のVVMを入れた場合に課題となりそうに感じました!
(ENGINEのmetas.jsonはストリーミングトーク対応と書いてるけど、VVM側は非対応な状況が起こり得る)
あとキャラクター内のスタイルごとに対応している・していないが分かれる可能性があるので、キャラクター単位で可否を書くのも課題になりえそうです!

なんとなくですが、個人的にはスタイルごとのtypetalkになっているとこを、ストリーミング対応のスタイルだけstreaming_talkとするのが良いかも?と思ってます。
この実装ならコア側もエンジン側も、あとエディタ側も変更少なめに実装できるかな~~~とか。

ただちょっとコア側の議論次第なので、またになってしまうのですがお待ちいただくことになりそうです。。。 🙇 🙇 🙇

あ! 課題の指摘すごくありがたかったです!!!

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.

2 participants