Kazeia-engine/dist/jni/test_engine_2calls.cpp

50 lines
1.7 KiB
C++

// 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 <cstdio>
#include <cstdlib>
#include <cstring>
int main(int argc, char** argv) {
if (argc < 5) {
printf("usage: %s <talker_gguf> <vocab_gguf> <dump_dir> <out_dir>\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;
}