-
Notifications
You must be signed in to change notification settings - Fork 245
Open
Labels
Description
内容
VOICEVOX Songは実装当初から、いくつかの種類の入力を弾いて400 Bad Requestを返すようになっています。しかしながら次のような場合において500 Internal Server Errorもしくは異常挙動が起こりうる状態です。
ScoreもしくはFrameAudioQueryのframe_lengthが負だと、np.reshapenp.repeatの失敗により500 Internal Server Errorが返される。/sing_frame_audio_queryの入力の、一つ先のものが子音モーラであるようなNoteにおいて、frame_lengthが1以下だと_calc_phoneme_lengthsがバグって(?)500 Internal Server Errorが返される。/sing_frame_audio_queryの入力の先頭Noteはpau ("")であると期待されているが、適当な母音モーラも受理してしまう。"notes": []や"phonemes": []を与えると、ONNXモデルが空の入力を拒否することで500 Internal Server Errorが返される。/sing_frame_volumeに負の値のf0を与えると、ONNXモデルがNaNを返すことでJSONシリアライズに失敗して500 Internal Server Errorが返される。f0やvolumeのサイズがframe_lengthの合計値よりも大きい場合、超過した分が無視されて処理される。f0やvolumeのサイズがframe_lengthの合計値よりも小さい場合、足りない分は未初期化メモリが読み出され、場合によっては下記画像のような音声が出力される。もしかしたらSEGVしたりする可能性もあるかもしれない。

/sing_frame_audio_queryにてoutputSamplingRateを0以下にすると、soxrが拒否するため500 Internal Server Errorが返される。keyが[-301, 298]の範囲から外れると推論が失敗して500 Internal Server Errorが返される。
これらをSongInvalidErrorで拒否するようにします。なおとりあえずはPydanticの層で弾かなくてもよいこととします。ただしその前に1., 2., 3., 8.の扱いを議論したいです。
VOICEVOX CORE側での議論: VOICEVOX/voicevox_core#1234
なおトークの方は現在、TalkInvalidInputErrorが完全に未使用状態であることを補足しておきます。COREの方では「不正なAudioQuery」というのを定義済みです。
Pros 良くなる点
Cons 悪くなる点
実現方法
VOICEVOXのバージョン
OSの種類/ディストリ/バージョン
- Windows
- macOS
- Linux
その他
Reactions are currently unavailable