「不正な(Frame)AudioQuery」を定義し、明示的に拒否する
Opened this issue · 1 comments
qryxip commented
内容
現在VOICEVOX COREにこのようなAudioQueryを与えると、内部の添字アクセスのとこなどでRustのパニックが起きます。
(VOICEVOX ENGINEも同様で、例外がそのまま500 Internal Server Errorになるという記憶)
consonantとconsonant_lengthの有無が一致していないaccent位置がモーラ数を超過している- 音素が不正 (これについては、
Phoneme型を導入すればいいはずではある) - 浮動小数点数が負やNaN (これも同様にnewtypeにすればよいはずだが、利便性を損いそう)
- 他にも色々あるかも
これらの不正な状態を早い段階で検知し、InvalidAudioQueryErrorのようなエラーをユーザーに返します。
ソング機能 (#1073)におけるFrameAudioQueryおよびScoreと合わせて考えたいです。
Pros 良くなる点
- UXの向上。ユーザーがAudioQueryを編集したときに体験を損ねずにすむ。
Cons 悪くなる点
実現方法
VOICEVOX COREの内部で、次のうちどちらかを行う。
AudioQueryなどにfn validate(&self) -> anyhow::Result<()>を生やし、その"validate"を信頼する。NormalizedAudioQueryのようなものを考える。
RustのようなParse, don't validateの文化だと、パブリックにValidatedAudioQueryみたいなのを用意した方がよいかもしれない。
VOICEVOXのバージョン
OSの種類/ディストリ/バージョン
- Windows
- macOS
- Linux
- Android
- iOS
その他
#762 の実装がまだなので、output_sampling_rateが24kHzの倍数じゃないのもまずそう。
Hiroshiba commented
良さそうに思いました!!
目的を整理すると「わかりやすいエラーを返してたげたい」とかになりそう。