WIP almost there... trait objects have lifetime

This commit is contained in:
Brandon Thomas committed 2020-06-21 06:33:48 -04:00
1 parent 1c37e79e12
commit 5ec1395b82
2 files changed
+17 -7

No files matched your search

+2 -2
View File
@@ -9,7 +9,7 @@ pub trait InferencePipelineStart <'a> {
type VocoderModel;
//fn infer_mel<'b>(self, text: &'b str, speaker_id: i32) -> AnyhowResult<Box<dyn InferencePipelineMelDone<'a> + 'a>>;
fn next(self)
fn infer_mel(self, text: &str, speaker_id: i64)
-> AnyhowResult<Box<dyn InferencePipelineMelDone<'a, TtsModel = Self::TtsModel, VocoderModel = Self::VocoderModel>>>;
}
@@ -18,7 +18,7 @@ pub trait InferencePipelineMelDone <'b> {
type VocoderModel;
fn next(self: Box<Self>)
-> AnyhowResult<Box<dyn InferencePipelineAudioDone<'b, TtsModel = Self::TtsModel, VocoderModel = Self::VocoderModel>>>;
-> AnyhowResult<Box<dyn InferencePipelineAudioDone<'b, TtsModel = Self::TtsModel, VocoderModel = Self::VocoderModel> + 'b>>;
//fn infer_audio(self) -> AnyhowResult<Box<dyn InferencePipelineAudioDone + 'a>>;
//fn infer_audio(&'a self);
@@ -37,7 +37,7 @@ impl <'a> InferencePipelineStart<'a> for GlowTtsMultiSpeakerMelganPipeline<'a> {
type TtsModel = &'a ArpabetGlowTtsMultiSpeakerModel;
type VocoderModel = &'a MelganModel;
fn next(self) -> AnyhowResult<Box<dyn InferencePipelineMelDone<'a, TtsModel = Self::TtsModel, VocoderModel = Self::VocoderModel>>> {
fn infer_mel(self, text: &str, speaker_id: i64) -> AnyhowResult<Box<dyn InferencePipelineMelDone<'a, TtsModel = Self::TtsModel, VocoderModel = Self::VocoderModel>>> {
unimplemented!();
}
@@ -65,12 +65,22 @@ impl <'a> InferencePipelineStart<'a> for GlowTtsMultiSpeakerMelganPipeline<'a> {
}*/
}
impl <'a> InferencePipelineMelDone<'a> for GlowTtsMultiSpeakerMelganPipelineMelDone <'a> {
impl <'a> InferencePipelineMelDone<'a> for Box<GlowTtsMultiSpeakerMelganPipelineMelDone<'a>> {
type TtsModel = &'a ArpabetGlowTtsMultiSpeakerModel;
type VocoderModel = &'a MelganModel;
fn next(self: Box<Self>) -> AnyhowResult<Box<dyn InferencePipelineAudioDone<'a, TtsModel = Self::TtsModel, VocoderModel = Self::VocoderModel>>> {
unimplemented!()
fn next(self: Box<Self>) -> AnyhowResult<Box<dyn InferencePipelineAudioDone<'a, TtsModel = Self::TtsModel, VocoderModel = Self::VocoderModel> + 'a>> {
let glow_tts : &'a ArpabetGlowTtsMultiSpeakerModel = self.glow_tts;
let melgan : &'a MelganModel = self.melgan;
let boxed : Box<GlowTtsMultiSpeakerMelganPipelineAudioDone<'a>> = Box::new(GlowTtsMultiSpeakerMelganPipelineAudioDone {
glow_tts,
melgan,
mel: None,
wave_audio: None
});
Ok(boxed)
}
/*fn infer_audio(&'a self) {
unimplemented!()
@@ -100,7 +110,7 @@ impl <'a> InferencePipelineAudioDone<'_> for GlowTtsMultiSpeakerMelganPipelineAu
fn test(glow: &ArpabetGlowTtsMultiSpeakerModel, melgan: &MelganModel) {
let pipeline = GlowTtsMultiSpeakerMelganPipeline::new(glow, melgan)
.next()
.infer_mel("test", 1)
.unwrap()
.next()
.unwrap()