Closed eyr1n closed 9 months ago
現時点で懸念しているのが,果たして一つのSynthesizerインスタンスに対してKanaAnalyzerとOpenJTalkAnalyzerが排他でいいのか?ということです.
今の段階ではそもそもSyhtnesizer内に二つのTextAnalyzerを持たせているので問題ありませんが,今後実装するであろうSynthesizer\<OpenJTalkAnalyzer>によって生成されたインスタンスでAquesTalk風記法(..._kana系API)が使えなくても良いのかどうかが疑問です.
pub struct Synthesizer<T: TextAnalyzer> {
pub(super) status: Status<InferenceRuntimeImpl, InferenceDomainImpl>,
text_analyzer: T,
use_gpu: bool,
}
上記の形での実装もすでに行っていますが,https://github.com/VOICEVOX/voicevox_core/pull/740#issuecomment-1921867649 について検討してから別でPRを出すつもりです.
state
をArc
に包んでSynthesizer
をclonableにし、Synthesizer::with_text_analyzer: fn(&self, T2) -> Synthesizer<T2>
みたいなのを用意すればstatus
を共有したまま併用できるかと思います。
返信ありがとうございます。 たしかに共有してしまえば良さそうですね、APIに変更が生じるのでまた別のPRとして現在作業中のものを出してみます。
内容
730 で話されている,
TextAnalyzer
interfaceを実装するための準備として,Rust側にTextAnalyzer
traitを生やしました.また,
を実装するためにSynthesizerからコードを移動し,これら2つのTextAnalyzerをSynthesizerに持たせました.
Issue全体の実装をする(_kana系APIとOpenJTalkの統合)を行うと,Synthesizerを触る部分全体にAPI変更が波及してしまうため,外から見たAPIの変更は現時点では全く行っていません.
関連 Issue
730
その他