Reveil vocal & Push-to-Talk
Modes
- Mode mot declencheur (par defaut) : le reconnaisseur vocal toujours actif attend des jetons declencheurs (
swabbleTriggerWords). A la detection, il demarre la capture, affiche la superposition avec le texte partiel et envoie automatiquement apres un silence. - Push-to-talk (maintien Option droite) : maintenez la touche Option droite pour capturer immediatement — aucun declencheur requis. La superposition apparait tant que la touche est maintenue ; le relachement finalise et transmet apres un court delai afin que vous puissiez ajuster le texte.
Comportement a l’execution (mot declencheur)
- Le reconnaisseur vocal s’execute dans
VoiceWakeRuntime. - Le declencheur ne s’active que s’il y a une pause significative entre le mot declencheur et le mot suivant (~0,55 s d’intervalle). La superposition/le carillon peut demarrer pendant la pause, avant meme que la commande ne commence.
- Fenetres de silence : 2,0 s lorsque la parole est continue, 5,0 s si seul le declencheur a ete entendu.
- Arret force : 120 s pour eviter les sessions incontrôlées.
- Anti-rebond entre sessions : 350 ms.
- La superposition est pilotee via
VoiceWakeOverlayControlleravec une coloration engagee/volatile. - Apres l’envoi, le reconnaisseur redemarre proprement pour ecouter le prochain declencheur.
Invariants du cycle de vie
- Si le reveil vocal est active et que les autorisations sont accordees, le reconnaisseur de mot declencheur doit etre a l’ecoute (sauf pendant une capture push-to-talk explicite).
- La visibilite de la superposition (y compris la fermeture manuelle via le bouton X) ne doit jamais empecher la reprise de l’ecoute par le reconnaisseur.
Mode de defaillance de superposition « collante » (precedent)
Auparavant, si la superposition restait visible et que vous la fermiez manuellement, le reveil vocal pouvait sembler « mort » car la tentative de redemarrage du runtime pouvait etre bloquee par la visibilite de la superposition et aucun redemarrage ulterieur n’etait planifie. Renforcement :- Le redemarrage du runtime de reveil n’est plus bloque par la visibilite de la superposition.
- La fin de la fermeture de la superposition declenche un
VoiceWakeRuntime.refresh(...)viaVoiceSessionCoordinator, de sorte qu’une fermeture manuelle par X reprend toujours l’ecoute.
Specificites du push-to-talk
- La detection du raccourci utilise un moniteur global
.flagsChangedpour Option droite (keyCode 61+.option). Nous observons uniquement les evenements (aucune interception). - La pipeline de capture reside dans
VoicePushToTalk: demarre immediatement la reconnaissance vocale, diffuse les partiels vers la superposition et appelleVoiceWakeForwarderau relachement. - Lorsque le push-to-talk demarre, nous mettons en pause le runtime de mot declencheur pour eviter des prises audio concurrentes ; il redemarre automatiquement apres le relachement.
- Autorisations : Microphone + Reconnaissance vocale requis ; la visualisation des evenements necessite l’autorisation Accessibilite/Surveillance des entrees.
- Claviers externes : certains peuvent ne pas exposer Option droite comme prevu — proposer un raccourci de secours si les utilisateurs signalent des ratés.
Parametres visibles par l’utilisateur
- Reveil vocal : active le runtime de mot declencheur.
- Maintenir Cmd+Fn pour parler : active le moniteur push-to-talk. Desactive sur macOS < 26.
- Selecteurs de langue et de micro, vu-metre en direct, table des mots declencheurs, testeur (local uniquement ; ne transmet pas).
- Le selecteur de micro conserve la derniere selection si un appareil se deconnecte, affiche un indice de deconnexion et bascule temporairement sur le micro systeme par defaut jusqu’a son retour.
- Sons : carillons a la detection du declencheur et a l’envoi ; par defaut, le son systeme macOS « Glass ». Vous pouvez choisir n’importe quel fichier chargeable par
NSSound(p. ex. MP3/WAV/AIFF) pour chaque evenement ou choisir Aucun son.
Comportement de transfert
- Lorsque le reveil vocal est active, les transcriptions sont transmises au gateway/agent actif (le meme mode local vs distant que le reste de l’application mac).
- Les reponses sont delivrees au dernier fournisseur principal utilise (WhatsApp/Telegram/Discord/WebChat). En cas d’echec de livraison, l’erreur est consignée et l’execution reste visible via WebChat/journaux de session.
Charge utile de transfert
VoiceWakeForwarder.prefixedTranscript(_:)prepend l’indication de machine avant l’envoi. Partage entre les parcours mot declencheur et push-to-talk.
Verification rapide
- Activez le push-to-talk, maintenez Cmd+Fn, parlez, relachez : la superposition doit afficher des partiels puis envoyer.
- Pendant le maintien, les oreilles de la barre de menus doivent rester agrandies (utilise
triggerVoiceEars(ttl:nil)) ; elles se reduisent apres le relachement.