Skip to content

SongInvalidErrorを返す対象を拡大する #1829

@qryxip

Description

@qryxip

内容

VOICEVOX Songは実装当初から、いくつかの種類の入力を弾いて400 Bad Requestを返すようになっています。しかしながら次のような場合において500 Internal Server Errorもしくは異常挙動が起こりうる状態です。

  1. ScoreもしくはFrameAudioQueryframe_lengthが負だと、np.reshape np.repeatの失敗により500 Internal Server Errorが返される。
  2. /sing_frame_audio_queryの入力の、一つ先のものが子音モーラであるようなNoteにおいて、frame_length1以下だと_calc_phoneme_lengthsがバグって(?)500 Internal Server Errorが返される。
  3. /sing_frame_audio_queryの入力の先頭Noteはpau ("")であると期待されているが、適当な母音モーラも受理してしまう。
  4. "notes": []"phonemes": []を与えると、ONNXモデルが空の入力を拒否することで500 Internal Server Errorが返される。
  5. /sing_frame_volumeに負の値のf0を与えると、ONNXモデルがNaNを返すことでJSONシリアライズに失敗して500 Internal Server Errorが返される。
  6. f0volumeのサイズがframe_lengthの合計値よりも大きい場合、超過した分が無視されて処理される。
  7. f0volumeのサイズがframe_lengthの合計値よりも小さい場合、足りない分は未初期化メモリが読み出され、場合によっては下記画像のような音声が出力される。もしかしたらSEGVしたりする可能性もあるかもしれない。
    Image
  8. /sing_frame_audio_queryにてoutputSamplingRate0以下にすると、soxrが拒否するため500 Internal Server Errorが返される。
  9. 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

その他

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions