feat(tts): CosyVoice rapide (hiftf16, RTF 0.88 + cache) + guard init — v0.1.10

Nouveau jeu CosyVoice livré par l'engine (mêmes 5 symboles JNI, façade inchangée,
toujours auto-contenu) : 2 .so swappés (libkazeia_cosyvoice + libcosyvoice ;
libomp/libc++_shared identiques). Modèle cv3_distilled_30k_hiftf16.gguf (953 Mo)
remplace cv3_distilled_30k.gguf — MODEL mis à jour dans l'adaptateur.

Validé device : charge OK, synthèse OK, cache de voix entre appels →
1er son tour 1 ~10,6s → tour 2 ~6,7s (-37%). (RTF dev annoncé 0.88 ; sur cette
tablette thermiquement saturée on mesure ~1,1-1,7 — à revérifier device froid.)

Bonus robustesse : guard `if (!::voiceCommands.isInitialized) return false` dans
handleVoiceCommand — une entrée arrivée avant la fin de l'init du service ne
crashe plus (UninitializedPropertyAccessException, vu en test en tirant un intent
trop tôt).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Kazeia Team 2026-06-15 23:50:42 +02:00
parent db0e56b26c
commit 3b58fcb467
4 changed files with 8 additions and 5 deletions

View File

@ -44,8 +44,8 @@ android {
applicationId = "com.kazeia" applicationId = "com.kazeia"
minSdk = 28 minSdk = 28
targetSdk = 36 targetSdk = 36
versionCode = 10 versionCode = 11
versionName = "0.1.9" versionName = "0.1.10"
// WebDAV de distribution — injecté depuis local.properties. // WebDAV de distribution — injecté depuis local.properties.
buildConfigField("String", "WEBDAV_BASE", "\"${localProp("webdav.base")}\"") buildConfigField("String", "WEBDAV_BASE", "\"${localProp("webdav.base")}\"")

View File

@ -1525,6 +1525,9 @@ Pas d'introduction, pas d'explication. Juste les 4 lignes en francais. /no_think
* Handle voice commands. Returns true if a command was matched (skip normal processing). * Handle voice commands. Returns true if a command was matched (skip normal processing).
*/ */
private fun handleVoiceCommand(text: String): Boolean { private fun handleVoiceCommand(text: String): Boolean {
// Robustesse : une entrée (texte/intent) arrivée avant la fin de l'init du
// service ne doit pas crasher sur le lateinit non encore posé.
if (!::voiceCommands.isInitialized) return false
val match = voiceCommands.match(text) ?: return false val match = voiceCommands.match(text) ?: return false
log("Voice command: ${match.command.action} (param=${match.param})") log("Voice command: ${match.command.action} (param=${match.param})")

View File

@ -50,7 +50,7 @@ class CosyVoiceTtsEngine(
const val DEFAULT_VOICE = "damien" const val DEFAULT_VOICE = "damien"
// 9 langues couvertes par CosyVoice3. Hors de cette liste -> Chatterbox (à venir). // 9 langues couvertes par CosyVoice3. Hors de cette liste -> Chatterbox (à venir).
val LANGS = setOf("fr", "en", "de", "es", "it", "ru", "zh", "ja", "ko") val LANGS = setOf("fr", "en", "de", "es", "it", "ru", "zh", "ja", "ko")
private const val MODEL = "cv3_distilled_30k.gguf" private const val MODEL = "cv3_distilled_30k_hiftf16.gguf" // streaming-cache, RTF 0.88 (2026-06-15)
} }
private var handle: Long = 0L private var handle: Long = 0L

View File

@ -4,7 +4,7 @@
# ExecuTorch build local (libexecutorch*, libqnn_executorch_backend, libfbjni), # ExecuTorch build local (libexecutorch*, libqnn_executorch_backend, libfbjni),
# QNN SDK 2.42 (libQnn*), Genie (libGenie), TTS pipeline (libtts_pipeline), libomp. # QNN SDK 2.42 (libQnn*), Genie (libGenie), TTS pipeline (libtts_pipeline), libomp.
# Les binaires ne sont PAS dans git ; ce manifest fait foi (verify en preBuild). # Les binaires ne sont PAS dans git ; ce manifest fait foi (verify en preBuild).
b260d40e2ad1e7923776b203c9c8743f5e4978e066dcc5dec59f7ab1614fbc7f libcosyvoice.so b0a52229e54bed2b074b38e6b6a6f2203a679f1b1fe7393912de7d7ec3e6196e libcosyvoice.so
d523468d62d9b603cb3354294d70d4b2feabf2c3f1e43b0c96c9aabf32813708 libc++_shared.so d523468d62d9b603cb3354294d70d4b2feabf2c3f1e43b0c96c9aabf32813708 libc++_shared.so
dd0506873aeb45e103ef0023678a7f14938a0f147f2348d1efc366f1dce40863 libexecutorch_jni.so dd0506873aeb45e103ef0023678a7f14938a0f147f2348d1efc366f1dce40863 libexecutorch_jni.so
0b6f86e114f0cf9f2940194797f06ded576e6b3272a5ffbb2c4b8cdc02850ef8 libexecutorch.so 0b6f86e114f0cf9f2940194797f06ded576e6b3272a5ffbb2c4b8cdc02850ef8 libexecutorch.so
@ -13,7 +13,7 @@ d49b53137f478b7b4ccbd58b9166d83e832c299b681609c70628291c61ae7204 libGenie.so
616fa830f6fd3396ea7f0ca92f348c2146efb0b1154ab6ed2e6709655905ead3 libggml-base.so 616fa830f6fd3396ea7f0ca92f348c2146efb0b1154ab6ed2e6709655905ead3 libggml-base.so
66ea0c948385d8060a7296285d7a85738c21318a88ef767986444a3d9683aeea libggml-cpu.so 66ea0c948385d8060a7296285d7a85738c21318a88ef767986444a3d9683aeea libggml-cpu.so
7aeb209ec5c1da8857779b8f3b4c3e7519ed69c6211491948d3c87349dbced57 libggml.so 7aeb209ec5c1da8857779b8f3b4c3e7519ed69c6211491948d3c87349dbced57 libggml.so
77efdb8f4c233009c05f34635ab62a60cfc9e9702d5450397c404c0cca3baf11 libkazeia_cosyvoice.so b92ca83a53dab49e212fba411b48fcceca4331b05fe881e2b9220efed45e70b1 libkazeia_cosyvoice.so
776f37e43433459a7350dc9d5d15dcb8eb3e17465a28fa78de92559bec3918bd libkazeia_engine.so 776f37e43433459a7350dc9d5d15dcb8eb3e17465a28fa78de92559bec3918bd libkazeia_engine.so
fdd730af3daf132d0819b3fc99abd8aae79800aab7a9aad371e117c16bd3a3aa libkazeia_stt.so fdd730af3daf132d0819b3fc99abd8aae79800aab7a9aad371e117c16bd3a3aa libkazeia_stt.so
114795bf0256c380dc87971598707e9e0b745a7fc868f3d1fb460e94cecdd69c libkazeia_tts.so 114795bf0256c380dc87971598707e9e0b745a7fc868f3d1fb460e94cecdd69c libkazeia_tts.so