diff --git a/kazeia-android/app/src/main/java/com/kazeia/tts/CosyVoiceTtsEngine.kt b/kazeia-android/app/src/main/java/com/kazeia/tts/CosyVoiceTtsEngine.kt index 3bb524f..a6c7b08 100644 --- a/kazeia-android/app/src/main/java/com/kazeia/tts/CosyVoiceTtsEngine.kt +++ b/kazeia-android/app/src/main/java/com/kazeia/tts/CosyVoiceTtsEngine.kt @@ -104,8 +104,18 @@ class CosyVoiceTtsEngine( private fun voiceHandleOrThrow(): Long { require(handle != 0L) { "CosyVoice: not loaded" } - val v = voices[currentVoiceId] ?: ensureVoice(currentVoiceId) - require(v != 0L) { "CosyVoice: aucune voix chargée ('$currentVoiceId')" } + var v = voices[currentVoiceId] ?: ensureVoice(currentVoiceId) + // Repli gracieux : une voix configurée mais non déployée (.cvps absent) ne + // doit JAMAIS rendre le TTS muet — on bascule sur la voix par défaut + // (toujours livrée). Sinon un profil pointant une voix manquante coupe + // toute parole en silence (cf. incident "zelda" non déployé). + if (v == 0L && currentVoiceId != defaultVoiceId) { + log("voix '$currentVoiceId' indisponible → repli sur défaut '$defaultVoiceId'") + v = voices[defaultVoiceId] ?: ensureVoice(defaultVoiceId) + } + require(v != 0L) { + "CosyVoice: aucune voix chargée ('$currentVoiceId' ni défaut '$defaultVoiceId')" + } return v }