Cómo se creó este audio
Atribución: Narración sintética con la voz de Iván · VoxCPM2
Generada en el Mac con el perfil autorizado de Iván y velocidad 1×. Se narran el título de la bitácora y el cuerpo de la entrada; se omiten los títulos de apartado, enlaces, ilustraciones y el listado de código.
El objetivo es convertir un artículo en un episodio con tu voz y poder comprobar que sigue diciendo lo mismo. La skill coordina tres operaciones distintas: preparar el guion, sintetizar el habla y contrastar la grabación con el texto. Si quieres usar esta skill con tu propia voz, dale esta bitácora a tu Codex y dile: «Aprende este procedimiento y ayúdame a crear mi primera prueba de voz».
1. Preparar las entradas
VoiceStudio es la aplicación local que utilicé para probar motores y guardar el perfil vocal. Desde su repositorio puedes descargarla. Para producir las bitácoras uso VoxCPM2 directamente desde Python: así puedo repetir una toma con los mismos archivos y parámetros sin pasar por la interfaz.[1]
VoiceStudioAplicación local de síntesis de voz · Código y descargasConsultar el repositorio ↗La síntesis necesita distinguir tres entradas. El texto objetivo contiene las palabras nuevas que quieres oír. La referencia de voz es una grabación limpia de la persona que autoriza su uso y orienta el timbre. El audio de continuación va acompañado de su transcripción literal: proporciona un ejemplo de cómo esa persona pronuncia una secuencia conocida. Puedes empezar utilizando una misma toma para ambas funciones. La transcripción describe la muestra; si pones ahí el artículo nuevo, el audio y las palabras dejan de corresponderse.
Conviene mantener dos versiones del artículo. La editorial conserva cifras, enlaces y notación técnica. La de locución excluye los elementos de interfaz y resuelve lo que debe decirse en voz alta. Por ejemplo, «20.000 €» pasa a «veinte mil euros». Conserva ambas versiones y divide la de locución por frases completas. Asigna a cada fragmento un número estable: será la unidad que sintetices, revises y, si hace falta, sustituyas.
2. Cómo VoxCPM2 genera la señal
El modelo trabaja con dos representaciones. El texto identifica la secuencia lingüística que debe pronunciarse. El audio se representa mediante vectores continuos, llamados latentes, que comprimen información acústica. «Continuo» significa que el sistema no tiene que escoger cada trozo de voz de un catálogo fijo de fichas sonoras. La referencia condiciona la generación durante la inferencia: para leer con otra voz no es necesario volver a entrenar el modelo.
La generación tiene dos escalas. En la primera, un modelo autorregresivo usa el contexto lingüístico y los tramos acústicos anteriores para condicionar el tramo siguiente. En la segunda, un módulo local de difusión parte de ruido y lo refina en varios pasos hasta obtener los valores acústicos de ese tramo. El decodificador de audio convierte la secuencia de latentes en muestras de onda a 48 kHz. Son dos unidades diferentes: un paso de difusión refina una predicción; una muestra de audio es un valor de la señal reproducible.[2]
3. Sintetizar un fragmento en Python
El ejemplo requiere el paquete oficial voxcpm, soundfile, los pesos de VoxCPM2 y una grabación propia. Sustituye la frase de referencia por las palabras exactas de tu archivo. El código y los ejemplos están en el repositorio de OpenBMB. Los pesos se descargan desde Hugging Face al cargar el modelo por primera vez; en este Mac uso una copia local.[3]
VoxCPMImplementación en Python · Instalación y ejemplos para VoxCPM2Consultar el código y la instalación ↗python -m venv .venv
source .venv/bin/activate
python -m pip install "voxcpm==2.0.3" soundfile
import soundfile as sf
from voxcpm import VoxCPM
modelo = VoxCPM.from_pretrained("openbmb/VoxCPM2", load_denoiser=False)
onda = modelo.generate(
text="El presupuesto es de veinte mil euros.",
reference_wav_path="mi_muestra.wav",
prompt_wav_path="mi_muestra.wav",
prompt_text="Hoy voy a probar el micrófono.",
inference_timesteps=10,
cfg_value=2.0,
normalize=False,
)
sf.write("fragmento-001.wav", onda, modelo.tts_model.sample_rate)
El número de pasos controla cuántas iteraciones dedica el módulo de difusión a cada predicción. La guía controla cuánto pesa el condicionamiento al generarla. Diez pasos y una guía de dos son valores de partida de esta producción; subirlos no garantiza una voz mejor. Para comparar ajustes, conserva el texto, la referencia y la semilla, y cambia una sola variable. Guarda con el WAV la revisión del modelo y el guion exacto: el nombre del archivo por sí solo no permite reconstruir una toma.
4. Verificar antes de montar
Whisper hace reconocimiento de habla. Recibe el WAV y devuelve texto; no necesita saber qué frase esperábamos.[4] Alineamos sus palabras con las del guion para localizar omisiones, inserciones y sustituciones. Antes de comparar hay que igualar notaciones equivalentes: «20.000» y «veinte mil» pueden representar la misma cantidad; «veinte» representa otra. Una transcripción que discrepa señala dónde escuchar, no cuál de los modelos se equivocó.
Si el fragmento dice «veinte euros» y el guion ya dice «veinte mil euros», se regenera únicamente esa toma. Si se oyen las palabras correctas, se conserva el WAV aunque el reconocedor haya escrito otra cosa. Esta prueba verifica contenido. El timbre, la intención y las pausas se evalúan escuchando, porque dos locuciones muy distintas pueden producir exactamente la misma transcripción.
Por último se concatenan los fragmentos aceptados en orden, se insertan las pausas y se ajusta la sonoridad del conjunto antes de codificar el MP3. La prueba final ocurre en el reproductor: comprobar que arranca, que la duración coincide con la del archivo y que cambiar la velocidad no corta la pista. El sitio necesita el episodio terminado; las grabaciones de referencia se quedan en el equipo.
Contrato mínimo para tu propia skill
---
name: narrar-articulo
description: Genera y revisa una narración local con una voz autorizada.
---
Entrada: artículo, referencia vocal y transcripción de la muestra.
1. Conserva el original. Guarda el guion de locución y las equivalencias.
2. Numera los fragmentos; genera un WAV por fragmento con VoxCPM2.
3. Transcribe cada WAV con Whisper y compara sus palabras con el guion.
4. Si hay diferencias, identifica el tramo para escucha. No apruebes
ni repitas una toma solo por lo que diga el reconocedor.
5. Monta las tomas aceptadas; exporta el MP3 y mide su duración.
Salida: MP3, guion y registro de tomas. No incluyas la muestra privada.
Lo que he aprendido al narrar mis bitácoras
Para pasar del artículo al audio, te recomiendo quitar los títulos del guion de locución. En la página sirven para orientarse; al escucharlos, a veces interrumpen una explicación que ya se entiende sola. Deja una pausa breve entre ideas: que se note el cambio sin perder el hilo.
Antes de narrar una entrada entera, pídele a Codex un texto corto para grabar tu muestra de voz. Por ejemplo: «Escríbeme cuatro frases que mezclen una pregunta, una enumeración y una explicación, como si se las contara a alguien». Grábalo tal como está escrito. Esa toma sirve de referencia; no necesitas entrenar el modelo desde cero.
Después pídele varias versiones del mismo párrafo. Escúchalas seguidas y elige la que más te guste por el ritmo, las pausas y la entonación. Guarda esa toma y sus ajustes antes de generar el episodio completo.
Referencias
[1] debpalash. VoiceStudio. Aplicación local y distribución. Consultar el repositorio ↗
[2] OpenBMB. VoxCPM2. Arquitectura, clonación por continuación y parámetros de inferencia. Consultar la ficha del modelo ↗
[3] OpenBMB. VoxCPM. Implementación en Python y ejemplos de síntesis. Consultar el código ↗
[4] OpenAI. Whisper. Modelos de reconocimiento del habla y transcripción. Consultar el repositorio ↗



