void speech_processor::process(sample_ptr samples,std::size_t count) { sample_ptr start=samples; sample_ptr end=start+count; while(fill_input_buffer(start,end)) { on_input(); input.clear(); if(is_stopped()) return; on_output(); if(is_stopped()) return; if(!next) continue; if(!insertion.empty()) { next->insert(&insertion[0],insertion.size()); insertion.clear(); if(is_stopped()) { output.clear(); return; } } if(output.empty()) continue; next->process(&output[0],output.size()); output.clear(); if(is_stopped()) return; } }
void speech_processor::finish() { if(!input.empty()) { on_input(); input.clear(); if(is_stopped()) return; } on_end_of_input(); if(is_stopped()) return; on_output(); if(is_stopped()) return; if(!next) { on_finished(); return; } if(!insertion.empty()) { next->insert(&insertion[0],insertion.size()); insertion.clear(); if(is_stopped()) { output.clear(); return; } } if(!output.empty()) { next->process(&output[0],output.size()); output.clear(); } if(is_stopped()) return; next->finish(); if(is_stopped()) return; on_finished(); }
inline void output(std::iostream &_output) const { if(!mHasValidated) throw exception("output called before successful validate call"); on_output(_output); }