VOICEVOX / voicevox_core

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

TextAnalyzer traitにstring->AccentPhraseModel[]を移動 #740

Closed eyr1n closed 6 months ago

eyr1n commented 6 months ago

内容

730 で話されている,TextAnalyzer interfaceを実装するための準備として,Rust側にTextAnalyzer traitを生やしました.

また,

を実装するためにSynthesizerからコードを移動し,これら2つのTextAnalyzerをSynthesizerに持たせました.

Issue全体の実装をする(_kana系APIとOpenJTalkの統合)を行うと,Synthesizerを触る部分全体にAPI変更が波及してしまうため,外から見たAPIの変更は現時点では全く行っていません.

関連 Issue

730

その他

eyr1n commented 6 months ago

現時点で懸念しているのが,果たして一つのSynthesizerインスタンスに対してKanaAnalyzerとOpenJTalkAnalyzerが排他でいいのか?ということです.

今の段階ではそもそもSyhtnesizer内に二つのTextAnalyzerを持たせているので問題ありませんが,今後実装するであろうSynthesizer\<OpenJTalkAnalyzer>によって生成されたインスタンスでAquesTalk風記法(..._kana系API)が使えなくても良いのかどうかが疑問です.

eyr1n commented 6 months ago
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を出すつもりです.

qryxip commented 6 months ago

stateArcに包んでSynthesizerをclonableにし、Synthesizer::with_text_analyzer: fn(&self, T2) -> Synthesizer<T2>みたいなのを用意すればstatusを共有したまま併用できるかと思います。

eyr1n commented 6 months ago

返信ありがとうございます。 たしかに共有してしまえば良さそうですね、APIに変更が生じるのでまた別のPRとして現在作業中のものを出してみます。