// Vérifie qu'on peut load une fois puis synthesize 2 fois sur la même instance, // avec KV cache talker resetée entre les deux. Critère : // - 2e appel sur la même phrase doit produire le même WAV md5 que le 1er // (= la KV reset a bien tout effacé). // - 2e appel sur une phrase différente doit produire des codes différents // (= la nouvelle phrase est bien tokenisée et synthétisée fresh). #include "tts_engine.h" #include #include #include int main(int argc, char** argv) { if (argc < 5) { printf("usage: %s \n", argv[0]); return 1; } TtsEngineLoadCfg lc; lc.talker_gguf = argv[1]; lc.vocab_gguf = argv[2]; lc.dump_dir = argv[3]; lc.use_htp = false; lc.n_threads = 6; lc.cp_use_cache = true; std::string OUT = argv[4]; auto * eng = tts_engine_load(lc); if (!eng) return 2; auto run = [&](const char* text, const char* fname) { TtsSynthesizeCfg sc; sc.text = text; std::string path = OUT + "/" + fname; sc.out_wav_path = path.c_str(); sc.max_steps = 256; sc.seed = 42; auto R = tts_engine_synthesize(eng, sc); printf("[%s] err=%d frames=%d audio=%.2fs total=%.2fs RTF=%.2f\n", fname, R.err, R.frames, R.audio_s, R.total_s, R.audio_s > 0 ? R.total_s / R.audio_s : 0); return R.err; }; int e1 = run("Bonjour je m'appelle Kazeia", "out_call1.wav"); int e2 = run("Bonjour je m'appelle Kazeia", "out_call2.wav"); int e3 = run("Bonsoir, comment tu te sens ce soir ?", "out_call3.wav"); tts_engine_free(eng); return (e1 == 0 && e2 == 0 && e3 == 0) ? 0 : 3; }