Trois fixes pour que le pipeline engine TTS tourne dans l'app réelle :
- cp_inference: cp_keep_f16() retourne false par défaut. Garder les poids
matmul CP en F16 faisait overflow les massive activations Qwen3 (>65504)
-> NaN -> codes 0 -> audio inaudible. F32 = ref cp_runner bit-exact.
KZTTS_CP_KEEP_F16=1 réactive l'ancien path (debug perf).
- tts_engine: arming EOS naturel gated derrière KZTTS_EOS_NATURAL (off par
défaut). C'était un workaround de l'ère NaN qui tronquait la fin de phrase
(frames 33/37). Depuis le fix F32 le talker se termine seul (cb0==codec_eos),
frames 40/42. Masking + anti-repeat + hard-fallback conservés.
- kazeia_tts_jni: freopen stderr gated derrière KZTTS_STDERR_LOG (plus de
redirection /sdcard par défaut en prod).
- build_kazeia_tts.sh: speaker_encoder.cpp + kazeia_mel.cpp ajoutés aux SRCS.
Validé E2E in-app : LLM lib (q35-lmq4 GGUF) + TTS lib coexistent sans
collision libllama, réponse FR audible jouée via AudioTrack 24kHz.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>