Voice & Audio AI
Emotional Voice Cloning: Stop Cranking the "Intensity" to Max
Max out emotion strength and the emotion shows up, but the voice stops sounding like you. The model isn't broken. That knob is really a split between the emotion template and your own voice. Here is a 1–2 hour tuning routine.
One Core Idea
Most models control emotion through a linear blend:
final emotion feature = emotion template × coefficient + your own timbre × (1 − coefficient)
At a coefficient of 1.0 the second term drops to zero. You are not turning up emotion; you are choosing how much of a generic template replaces you. That is why it stops sounding like you.
For any TTS model, treat an “emotion strength / weight” parameter as a trade-off split and don’t copy the demo’s maximum setting.
How To Do It (about 1–2 hours)
Step 1 | Record a clean, neutral reference
Quiet room, 1–2 minutes, normal pace, reading varied text (mixed sentence lengths, questions and statements). Stay flat. This clip teaches the model your baseline voice, and emotion in it contaminates everything downstream. Save as wav.
Step 2 | Run zero-shot cloning first
Feed the reference and your text with no emotion set. Make sure it sounds like you before adding emotion.
Step 3 | Use the model’s built-in emotions first
Built-in templates (happy, sad, surprised, calm) are more reliable than a reference clip of you acting happy. Amateur acting is usually too weak a signal for the model to pick up.
Step 4 | Sweep the coefficient down from 1.0
With one neutral test sentence, generate at 1.0, 0.75, 0.65 and 0.5, then listen:
- Too high (near 1.0): obvious emotion, but “that’s not my voice”
- Too low (near 0): still your voice, but no emotion
- Middle (usually 0.6–0.7): emotion audible, timbre intact
There’s no universal answer; listen and pick. I settled on 0.65.
Step 5 | If speech is too slow, time-stretch afterward
Most models have no native speed control. Pauses are learned from punctuation, and parameters that look like “pause length” often only apply between segments, not within one. Short sentences count as one segment, so the setting does nothing. Instead, post-process the audio with ffmpeg’s atempo filter (pitch unchanged):
ffmpeg -i in.wav -filter:a "atempo=1.15" out.wav
Start at 1.05x; 1.1–1.3 usually feels right.
Step 6 | Lock it into a script
Store the reference path, per-emotion coefficients and speed factor in a small script, then call it with just text and emotion.
Pitfalls You Will Hit
- Reference recorded with emotion: every emotion afterward sounds off. Stay flat and let the coefficient handle emotion.
- Copying a coefficient of 1.0 from a demo: the voice no longer sounds like you. When it sounds like “AI acting”, lower the coefficient first.
- Unstable self-acted emotion: use built-in templates before concluding the model doesn’t support an emotion.
- Wrong speed parameter: don’t fight it; time-stretch after generation.
When You Get Stuck, Ask an AI
Paste this into Claude or ChatGPT, fill in your situation, and paste the full error message verbatim (don’t summarize it):
I'm a beginner running an open-source voice cloning model (IndexTTS2) locally and want emotional cloned speech.
My OS: [Windows / Mac / Linux]
I'm stuck at: [e.g. installing, running generation]
Full error message: [verbatim]
Teach me step by step: explain what each step does before giving what to run.
If my info is insufficient, ask me first instead of guessing commands that may not apply.
One-Line Summary
For an emotional clone, “strength” is not a bigger-is-better dial. It is a split between the emotion template and you, and the middle is the answer.
This is part of an ongoing series of field notes and AI tool tests. To get the full SOPs and future posts, subscribe to the newsletter.
Support this work:Support on Ko-fi