Trois bugs introduits/exposés par la bascule CosyVoice (66e81f0) :
#3 orbe figé "réflexion" même fini — KazeiaService.finally : le reset du
visualizer était conditionné à !_isListening → en écoute continue l'orbe ne
quittait jamais Thinking. Reset VisualizerSignal.Idle désormais inconditionnel.
#2 texte non affiché pendant le TTS + #3 orbe non animé — cause commune : le
callback onSegmentPlaying était accepté puis JETÉ par KazeiaPipeline.speakText
(la branche streaming Qwen3 qui le câblait avait été retirée). Rebranché :
- core.TtsEngine.synthesizeAndPlay(..., onSegment) ;
- CosyVoiceTtsEngine émet onSegment(phrase, durée, enveloppe, spectro) par
phrase au démarrage de sa lecture ;
- nouvel util tts/AudioFeatures (enveloppe RMS + spectrogramme 12 bandes via
FFT radix-2 maison, sans dépendance) remplaçant le calcul perdu du chemin
Qwen3 ; le reveal mot-par-mot et l'orbe Speaking refonctionnent.
#1 1ère phrase ratée — boucle de capture KazeiaService :
- pré-roll (~300 ms d'anneau sous-seuil préfixé au buffer) → l'attaque
consonantique n'est plus clippée ;
- tail buffer anti-écho 800→300 ms : 800 ms visait la queue MediaPlayer
(disparue) ; CosyVoice draine via marker AudioTrack → 300 ms suffit et ne
mange plus le début de la réponse après que Kazeia a parlé.
Build release vert + installé OPD2415 (vc15, données préservées). À valider à
l'usage : synchro texte, orbe, capture début de phrase, absence de larsen.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>