Reporte sobre Lip Sync con Three.js Fiber
Introducción
Este documento presenta una investigación sobre la implementación de lip sync en aplicaciones desarrolladas con Three.js y React Three Fiber. Se abordan herramientas como ElevenLabs, Rhubarb Lip Sync y Lyisinc, así como las ventajas de utilizar Three.js Fiber para mejorar el rendimiento y la calidad de las animaciones.
Ventajas de Three.js Fiber
Three.js Fiber ofrece una manera eficiente de desarrollar aplicaciones en 3D dentro del ecosistema de React. Sus principales ventajas incluyen:
- Rendimiento optimizado: Gracias al uso de reconciliación con React, permite manejar escenas complejas sin afectar el rendimiento.
- Simplicidad: Proporciona una API declarativa más intuitiva para manejar gráficos en 3D.
- Soporte para animaciones y estilos: Facilita la integración de animaciones, estilos y modelos importados.
Generación de modelos y animaciones
Los modelos 3D utilizados en Three.js Fiber pueden ser generados con la herramienta gltfjsx. Un ejemplo de generación de modelo sería:
npx gltfjsx public/models/abraham.glb -o src/components/Abraham.jsx -r public
Este comando genera un componente React con el modelo 3D listo para ser utilizado en una escena.
Código de animación en Three.js Fiber
A continuación, un ejemplo de código en React con Three.js Fiber para animar un modelo:
import React, { useEffect, useRef, useState } from "react";
import { useGraph } from "@react-three/fiber";
import { useAnimations, useFBX, useGLTF } from "@react-three/drei";
import { SkeletonUtils } from "three-stdlib";
export function Abraham(props) {
const { scene } = useGLTF("/models/abraham.glb");
const clone = React.useMemo(() => SkeletonUtils.clone(scene), [scene]);
const { nodes, materials } = useGraph(clone);
const { animations: happyAnimation } = useFBX("/models/happy.fbx");
const { animations: idleAnimation } = useFBX("/models/idle.fbx");
idleAnimation[0].name = "Idle";
happyAnimation[0].name = "happy";
const [animation, setAnimation] = useState("happy");
const group = useRef();
const { actions } = useAnimations([
idleAnimation[0], happyAnimation[0]
], group);
useEffect(() => {
actions[animation].reset().fadeIn(0.5).play();
return () => actions[animation].fadeOut(0.5).play();
});
return (
<group {...props} dispose={null} ref={group}>
<primitive object={nodes.Hips} />
</group>
);
}
useGLTF.preload("/models/abraham.glb");
ElevenLabs
Introducción
ElevenLabs es una herramienta de síntesis de voz basada en inteligencia artificial que permite convertir texto en audio y viceversa. Su tecnología avanzada interpreta el contexto del texto para generar una entonación natural en la voz.
Funcionalidades principales
- Síntesis de voz: Transforma texto en audio con diferentes configuraciones de voz.
- Selección de voz: Permite elegir entre distintos acentos, tonos y estilos.
- Conversión de audio a texto: Utiliza inteligencia artificial para transcribir audios.
- API disponible: Permite integrar la herramienta en aplicaciones externas.
- Personalización avanzada: Ajustes de estabilidad, similitud y estilo de voz.
Configuraciones avanzadas
Stability (Estabilidad)
- Determina la consistencia en la generación de la voz.
- Un valor bajo introduce mayor variabilidad emocional.
- Un valor alto hace la voz más monótona y consistente.
- Recomendación: Estabilidad en 50 para un balance entre emoción y claridad.
Similarity (Similitud)
- Dicta qué tan fiel debe ser la voz generada respecto a la original.
- Un valor alto puede replicar ruidos o artefactos de un audio de baja calidad.
Style Exaggeration (Exageración de estilo)
- Amplifica el estilo del hablante original.
- Aumenta la carga computacional y puede reducir la estabilidad.
- Recomendación: Mantener en 0 para evitar fluctuaciones indeseadas.
Speaker Boost
- Aumenta la similitud con el hablante original.
- Incrementa la carga computacional y puede generar latencia.
Uso de la API
ElevenLabs permite insertar pausas en el audio generado utilizando la siguiente sintaxis:
<break time="1.5s"/>
Este comando introduce una pausa de 1.5 segundos para hacer que el audio sea más natural.