NeuroVoice, ViseMe, SSML Bookmarks and Avatars
Les DeepVoices ne sont pas seulement des contenus audio, elles permettent de donner vie et une personalité à un Avatar en animant ses expressions faciales et physiques.
Dans un précédent article je vous expliquais comment créer des voix personalisée de marque. Voici maintenant une démo d'intégration poussée avec un avatar.
Les Visèmes
Les Visèmes sont la représentation labiale d'un phonème. Ils sont extrêmement dépendant du locuteur et de la langue. Les APIs de Text-to-Speech des Microsoft NeuroVoice permettent d'obtenir en streaming le Visme associé à un timecode sur une durée.
Dans le cas de Reflets je cache l'audio et le viseme pour ensuite le renvoyer aux miroirs. Côté client un code javascript va jouer l'animation correspondante au détail prêt qu'il n'y a pas forcément de normes entre Occulus / Unity et Microsoft.

Les avatar de ReadyPlayer.me sont déja rigué (avec un squelette) avec les fonctionnalité de morphTargetInfluences()
VISME d'Occulus.
Le SSML et les Bookmarks
Le Text2Speech n'est pas QUE du texte. Le langage SSML permets de préciser la manière dont il faut prononcer les mots (sentiments, vitesse, pitch, …) Microsoft fournit même un éditeur en ligne !

Mais il est possible de jouer des sons ou de la musique comme je le fait dans GooGoo ou placer des bookmarks qui seront rappelé excatement comme les Visèmes. Je m'en sert pour déclencher des animation du corps, la position du regard ou des déplacements.
La guerre des Avatars
Une guerre car c'est assez complexe de réussir (de manière simple, réplicable et générique) à brancher un avatar personnalisé, avec des animations et des visèmes. Voici un excellent tuto ThreeJS qui rappelle les bases (oui désolé ThreeJS et non pas BabylonJS :-().

- Il faut commencer par ReadyPlayer.me qui permets d'un peu customiser un Avatar qui aura le VisMe.
- Ensuite le convertir dans Blender en FBX.
- L'importer dans Mixamo pour y associer des animations.
- Fusionner le tout dans Blender à nouveau sans rien perdre.
C'est un bon départ mais il y aurait énormément d'optimisations à faire dans ce workflow très très lourd.
Reflets.io en LowCode
Voici une partie du flow Node-RED utilisé dans la vidéo pour afficher l'avatar, aligner les yeux (qui suivent la souris), le faire avancer du centre vers l'avant puis le faire parler en utilisant du SSML (une action pour dire bonjour).

En réalité, dans Reflets, la fonctionnalité de Text2Speech est un webservice qui retourne les Visemes et Bookmark. Ce qui permet au plugin Puppet (qui affiche un avatar) de réagir à tous les textes qui sont vocalisés.
The Sky the Limit ! Il est maintnant super simple d'intégrer un avatar qui va se déplacer d'un côté à l'autre du miroir pour présenter des objets, gérer une garde robe ou proposer une séance de sport. Reste la question de savoir si la voix "seule" n'est pas plus forte dans l'imaginaire (qu'avec un avatar) ?