VOICEVOX / voicevox_core

無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのコア
https://voicevox.hiroshiba.jp/
MIT License
871 stars 117 forks source link

refactor: `Synthesizer`の実装を`Inner<_, A: Async>`の形にする #865

Closed qryxip closed 3 weeks ago

qryxip commented 3 weeks ago

内容

831 で残した次のTODOのうち、Synthesizerについてだけ解決します。

// TODO: `VoiceModelFile`のように、次のような設計にする。
//
// ```
// pub(crate) mod blocking {
//     pub struct Synthesizer(Inner<SingleTasked>);
//     // …
// }
// pub(crate) mod nonblocking {
//     pub struct Synthesizer(Inner<BlockingThreadPool>);
//     // …
// }
// ```

687 のようなことを行うのを円滑にする目的です。今後ソングとかストリーミングとかでSynthesizerに手を入れることが予定されているので、その前に早めにやった方がよいと思った次第です。

なんかパフォーマンス的にはもしかしたら破壊的になってるかもですが、もしそうでもパフォーマンスだけならということでcommit typeはrefactor:としてしまいました。

関連 Issue

Refs: #831, #687

その他

そこそこ大きく手を入れているので、今度こそスナップショットテストを作った方がよいかも?

qryxip commented 3 weeks ago

けどまあ、このprくらいなら気合いで目でチェックも不可能ではなさそうなのと、あとは @Yosshi999 さんが作ってくださったpython用チェックコードを手元で動かしてみるとかでも良さそう!!

mainと比較しましたが、Yosshi999さんのスクリプトを使うまでもなくWAVが完全一致しました。 (というのも、処理自体は一切変わっていないはずなので)

❯ diff {a,b}.wav; echo $?
0
qryxip commented 3 weeks ago

割とありかなと思います。synthesizer.rsとは別ファイルの、engine/synthesis.rsとかでimpl Status<_>の延長(あるいはtrait StatusExt)を書くという形がよいかなと。実質的な「層」にはなるかもですが、Synthesizerから直接Statusが透けて見える分認知負荷は抑えられるはず?

qryxip commented 3 weeks ago

c941504 (#865)を入れてしまいましたが、マージしちゃおうと思います!