50 lines
1.7 KiB
C++
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;
|
|
}
|