TTS: adaptar entonación según tipo de texto (oración/poesía vs explicación) — feedback de usuario #173

Open
opened 2026-07-13 14:12:25 +00:00 by rafa · 2 comments
Owner

Feedback recibido

Comentario en https://www.feadulta.com/semillas-del-reino/ (2026-07-13 11:41:51 [ES]):

El modelo de audio elegido quiere ser muy normal, como cuando se habla, con añadidos como "eh..." alargado. Aunque la voz está bien, creo que hay que adaptar la versión oral al tipo de texto. No es lo mismo una explicación homilética que la lectura de un texto bíblico o una poesía, como en este caso, la de Florentino Ulibarri.

Espero que os sirva la sugerencia.
Un saludo.

Análisis

El usuario tiene razón: el texto de "Semillas del Reino" es una oración/poesía (Florentino Ulibarri), y la síntesis TTS actual (MiniMax, ver feadulta-tts-voz-fraymarcos-202607) usa el mismo registro conversacional "normal" (con muletillas tipo "eh...") que para una explicación homilética. Textos de este tipo (oraciones, poesías, lecturas bíblicas) deberían leerse de otro modo: más pausado, sin muletillas de habla espontánea, en tono de oración.

Propuesta

Investigar si MiniMax permite diferenciar la entonación/estilo de síntesis según el tipo de contenido:

  • Parámetros de emoción/estilo de voz por request (si el modelo speech-2.8-hd los soporta).
  • Posible necesidad de una voz o preset distinto para textos de oración/poesía/lectura bíblica, separado del preset "conversacional" usado para las homilías.
  • Revisar si el pipeline actual (scripts/minimax_tts.py, AUTHOR_VOICES) podría extenderse con un flag por tipo de contenido (p.ej. detectar categoría "oración"/poesía vs artículo homilético) que cambie el estilo de síntesis.

Pendiente de investigación técnica con MiniMax antes de decidir implementación.

## Feedback recibido Comentario en https://www.feadulta.com/semillas-del-reino/ (2026-07-13 11:41:51 [ES]): > El modelo de audio elegido quiere ser muy normal, como cuando se habla, con añadidos como "eh..." alargado. Aunque la voz está bien, creo que hay que adaptar la versión oral al tipo de texto. No es lo mismo una explicación homilética que la lectura de un texto bíblico o una poesía, como en este caso, la de Florentino Ulibarri. > > Espero que os sirva la sugerencia. > Un saludo. ## Análisis El usuario tiene razón: el texto de "Semillas del Reino" es una oración/poesía (Florentino Ulibarri), y la síntesis TTS actual (MiniMax, ver [[feadulta-tts-voz-fraymarcos-202607]]) usa el mismo registro conversacional "normal" (con muletillas tipo "eh...") que para una explicación homilética. Textos de este tipo (oraciones, poesías, lecturas bíblicas) deberían leerse de otro modo: más pausado, sin muletillas de habla espontánea, en tono de oración. ## Propuesta Investigar si MiniMax permite diferenciar la entonación/estilo de síntesis según el tipo de contenido: - Parámetros de emoción/estilo de voz por request (si el modelo `speech-2.8-hd` los soporta). - Posible necesidad de una voz o preset distinto para textos de oración/poesía/lectura bíblica, separado del preset "conversacional" usado para las homilías. - Revisar si el pipeline actual (`scripts/minimax_tts.py`, `AUTHOR_VOICES`) podría extenderse con un flag por tipo de contenido (p.ej. detectar categoría "oración"/poesía vs artículo homilético) que cambie el estilo de síntesis. Pendiente de investigación técnica con MiniMax antes de decidir implementación.
Author
Owner

Investigación MiniMax: sí es viable

La API de speech-2.8-hd (y modelos hermanos) sí expone parámetros relevantes para esto:

  • emotion: auto (por defecto, infiere del texto), happy, sad, angry, fearful, disgusted, surprised, calm, fluent, neutral. Para oración/poesía/lectura bíblica el candidato natural es calm (o neutral) en vez de dejar auto, que es probablemente lo que está generando el tono "conversacional normal" con muletillas.
  • speed: 0.5–2.0 (default 1.0) — bajar un poco para lectura pausada de oración.
  • pitch: -12..+12 semitonos (default 0).
  • volume: 0–10 (default 1.0).
  • Interjecciones tipo "eh..." parecen venir del propio texto/registro conversacional del preset de voz elegido, no es algo que se pueda "apagar" directamente — pero forzando emotion=calm + speed algo menor debería reducir ese efecto de habla espontánea.

Propuesta concreta de implementación

En scripts/minimax_tts.py (pipeline actual, ver AUTHOR_VOICES): añadir un flag de "registro" por artículo/categoría (p.ej. detectar categoría "Semillas del Reino" / poesía / oración vs artículo homilético normal) que fije emotion=calm y speed ligeramente reducida (probar 0.9) en vez de dejar los defaults auto/1.0 que se usan hoy para todo.

Siguiente paso: probar una síntesis de prueba con emotion=calm sobre el texto de Ulibarri ("Semillas del Reino") y comparar con el audio actual antes de cablear el flag en el pipeline.

## Investigación MiniMax: sí es viable La API de `speech-2.8-hd` (y modelos hermanos) sí expone parámetros relevantes para esto: - **`emotion`**: `auto` (por defecto, infiere del texto), `happy`, `sad`, `angry`, `fearful`, `disgusted`, `surprised`, `calm`, `fluent`, `neutral`. Para oración/poesía/lectura bíblica el candidato natural es `calm` (o `neutral`) en vez de dejar `auto`, que es probablemente lo que está generando el tono "conversacional normal" con muletillas. - **`speed`**: 0.5–2.0 (default 1.0) — bajar un poco para lectura pausada de oración. - **`pitch`**: -12..+12 semitonos (default 0). - **`volume`**: 0–10 (default 1.0). - Interjecciones tipo "eh..." parecen venir del propio texto/registro conversacional del preset de voz elegido, no es algo que se pueda "apagar" directamente — pero forzando `emotion=calm` + `speed` algo menor debería reducir ese efecto de habla espontánea. ## Propuesta concreta de implementación En `scripts/minimax_tts.py` (pipeline actual, ver `AUTHOR_VOICES`): añadir un flag de "registro" por artículo/categoría (p.ej. detectar categoría "Semillas del Reino" / poesía / oración vs artículo homilético normal) que fije `emotion=calm` y `speed` ligeramente reducida (probar 0.9) en vez de dejar los defaults `auto`/`1.0` que se usan hoy para todo. Siguiente paso: probar una síntesis de prueba con `emotion=calm` sobre el texto de Ulibarri ("Semillas del Reino") y comparar con el audio actual antes de cablear el flag en el pipeline.
Author
Owner

Resultado de las pruebas (2026-07-13)

Probado y descartado:

  • emotion=calm sobre la voz clonada de Nico (NicoFeadulta2026): no soluciona el problema.
  • Voces preset de MiniMax (Spanish_Narrator, Spanish_Narrator+calm, Spanish_WiseScholar, Spanish_CaptivatingStoryteller): descartadas, mal resultado ("fatal" según Rafa).

Causa raíz identificada: el problema no es el parámetro emotion de la síntesis — es que la voz clonada de Nico arrastra la cadencia/muletillas ("eh..." alargado) del podcast conversacional original del que se clonó. La clonación de voz en MiniMax captura prosodia además de timbre, así que ese registro dubitativo viene "cocinado" en el propio voice_id, no es algo que emotion/speed/pitch puedan corregir en tiempo de síntesis.

¿Existe un "modo narrador" aplicable a una voz ya clonada? Revisada la documentación de MiniMax (/v1/voice_clone, /v1/t2a_v2): no hay ningún parámetro documentado para aplicar un estilo/modo distinto a un voice_id ya clonado en tiempo de síntesis, aparte de emotion/speed/pitch/vol (que ya hemos probado y no bastan). Lo único remotamente parecido es clone_prompt.prompt_audio + prompt_text, un audio de referencia de estilo — pero se usa en el momento de crear el clon, no como interruptor sobre un voice_id existente. En la práctica equivale a hacer un clon nuevo.

Conclusión / siguiente paso

Hay que crear un clon de voz nuevo, dedicado a textos de oración/poesía/lectura bíblica (registro pausado, sin muletillas de habla espontánea), separado del voice_id de Nico que sigue sirviendo para las homilías/explicaciones normales. El pipeline (scripts/minimax_tts.py) ya soporta esto vía AUTHOR_VOICES / voice_for_author, aunque aquí el criterio de selección tendría que ser por tipo de contenido (categoría oración/poesía) en vez de por autor.

Pendiente de Rafa: conseguir un audio fuente limpio (2-5 min, sin ruido/música, registro pausado/formal — grabadora o vídeo, nunca nota de voz) para clonar esa nueva voz. Mismo protocolo de verificación por espectrograma que se usó para Fray Marcos/Pagola/Sicre/Arregi (ver feadulta-tts-voz-fraymarcos-202607).

## Resultado de las pruebas (2026-07-13) **Probado y descartado:** - `emotion=calm` sobre la voz clonada de Nico (`NicoFeadulta2026`): no soluciona el problema. - Voces preset de MiniMax (`Spanish_Narrator`, `Spanish_Narrator`+`calm`, `Spanish_WiseScholar`, `Spanish_CaptivatingStoryteller`): descartadas, mal resultado ("fatal" según Rafa). **Causa raíz identificada:** el problema no es el parámetro `emotion` de la síntesis — es que la voz clonada de Nico arrastra la cadencia/muletillas ("eh..." alargado) del podcast conversacional original del que se clonó. La clonación de voz en MiniMax captura prosodia además de timbre, así que ese registro dubitativo viene "cocinado" en el propio `voice_id`, no es algo que `emotion`/`speed`/`pitch` puedan corregir en tiempo de síntesis. **¿Existe un "modo narrador" aplicable a una voz ya clonada?** Revisada la documentación de MiniMax (`/v1/voice_clone`, `/v1/t2a_v2`): no hay ningún parámetro documentado para aplicar un estilo/modo distinto a un `voice_id` ya clonado en tiempo de síntesis, aparte de `emotion`/`speed`/`pitch`/`vol` (que ya hemos probado y no bastan). Lo único remotamente parecido es `clone_prompt.prompt_audio` + `prompt_text`, un audio de referencia de estilo — pero se usa **en el momento de crear el clon**, no como interruptor sobre un `voice_id` existente. En la práctica equivale a hacer un clon nuevo. ## Conclusión / siguiente paso Hay que crear **un clon de voz nuevo**, dedicado a textos de oración/poesía/lectura bíblica (registro pausado, sin muletillas de habla espontánea), separado del `voice_id` de Nico que sigue sirviendo para las homilías/explicaciones normales. El pipeline (`scripts/minimax_tts.py`) ya soporta esto vía `AUTHOR_VOICES` / `voice_for_author`, aunque aquí el criterio de selección tendría que ser por **tipo de contenido** (categoría oración/poesía) en vez de por autor. **Pendiente de Rafa:** conseguir un audio fuente limpio (2-5 min, sin ruido/música, registro pausado/formal — grabadora o vídeo, nunca nota de voz) para clonar esa nueva voz. Mismo protocolo de verificación por espectrograma que se usó para Fray Marcos/Pagola/Sicre/Arregi (ver [[feadulta-tts-voz-fraymarcos-202607]]).
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: rafa/feadulta#173