言簡意賅的講解XTTS解決的痛點
📎 前置操作:如何使用 OBS Studio 錄制高質量 WAV 語音(建議先閱讀并準備錄音樣本)
本教程介紹如何使用 Coqui TTS 的 XTTS v2 模型 實現中文語音克隆,支持直接傳入 .wav
文件,還原你的音色與語調,生成帶有個性化音色的語音合成結果。
? 背景說明
與 ChatTTS 不同,XTTS v2 支持通過 speaker_wav
參數傳入一個用戶語音樣本文件,自動提取發音人嵌入,無需手動處理 speaker_vector
。
但前提是:音頻格式必須標準,否者容易出現:
- 聲音變形、模糊、爆音
- 模型推理失敗(采樣率錯誤 / 多聲道)
所以我們準備了兩套方案:
- 方案一:直接合成,適合你手頭有干凈、合規的
.wav
- 方案二:帶音頻預處理,推薦使用,可處理 OBS 默認錄音格式
🧰 安裝依賴(推薦虛擬環境)
將以下內容保存為 requirements.txt
:
torch==2.7.1
torchaudio==2.7.1
TTS==0.22.0
numpy==1.24.3
scipy==1.11.4
soundfile==0.13.1
安裝命令:
pip install -r requirements.txt
🚀 方案一:快速語音克隆(需標準音頻)
import torch
from torch.serialization import add_safe_globals# 添加所有需要信任的類
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import XttsAudioConfig, XttsArgs
from TTS.config.shared_configs import BaseDatasetConfig# 注冊這些類為“安全可加載”的類
add_safe_globals([XttsConfig, XttsAudioConfig, BaseDatasetConfig, XttsArgs])from TTS.api import TTSdevice = "cuda" if torch.cuda.is_available() else "cpu"# 加載模型
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)tts.tts_to_file(text="如果幫助到了您,請一鍵三連。關注博客,文浩(楠搏萬),感謝您的支持。",file_path="克隆output.wav",speaker_wav="xxx.wav", # 替換為你錄的語音路徑language="zh",emotion='happy',split_sentences=True
)print("? 合成完成!語音文件已保存為 克隆output.wav")
🎧 試聽下載:克隆output.wav(← 請替換為實際試聽鏈接)
🧼 方案二:推薦做法(自動處理音頻格式)
OBS 默認輸出通常是 44.1kHz / 雙聲道,XTTS 模型不兼容。以下腳本會自動處理格式問題:
import torch
from torch.serialization import add_safe_globals# 先注冊這些類為可信任的全局對象
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import XttsAudioConfig, XttsArgs
from TTS.config.shared_configs import BaseDatasetConfigadd_safe_globals([XttsConfig, XttsAudioConfig, BaseDatasetConfig, XttsArgs])# 再導入 TTS
from TTS.api import TTS
import torchaudio# 設置設備
device = "cuda" if torch.cuda.is_available() else "cpu"# 加載模型
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)# 預處理你的 speaker 音頻
def preprocess_wav(path, out_path="clean.wav"):signal, sr = torchaudio.load(path)if signal.shape[0] > 1:signal = signal.mean(dim=0, keepdim=True)if sr != 16000:resample = torchaudio.transforms.Resample(orig_freq=sr, new_freq=16000)signal = resample(signal)torchaudio.save(out_path, signal, 16000)return out_pathspeaker_wav = preprocess_wav("xxx.wav") # 替換為你錄的語音路徑# 合成文本
my_text = "如果幫助到了您,請一鍵三連。關注博客,文浩(楠搏萬),感謝您的支持。"# 合成并保存
tts.tts_to_file(text=my_text,speaker_wav=speaker_wav,file_path="克隆過濾版output.wav",language="zh",split_sentences=True,emotion='happy',speed=1.2
)print("? 合成完成,輸出為 克隆過濾版output.wav")
🎧 試聽下載:克隆過濾版output.wav(← 請替換為實際試聽鏈接)
🎛? 可調參數說明(重點推薦)
參數名 | 功能描述 | 示例 |
---|---|---|
emotion | 控制語氣,如 'happy' | 'happy' |
speed | 控制語速,1.0為默認 | 1.2 |
split_sentences | 自動分句朗讀 | True |
language | 設置合成語言(中文為 "zh" ) | "zh" |
🔁 音頻來源建議
-
使用 OBS Studio 錄音時:
- 格式設為
.wav
- 采樣率設置為 48kHz(后續會統一成16kHz)
- 聲道選單聲道或立體聲(腳本可自動降維)
- 格式設為
-
錄音內容控制在 5~15 秒
-
自然語氣朗讀,普通話標準即可
通過上述內容,你就已經基本理解了這個方法,基礎用法我也都有展示。如果你能融會貫通,我相信你會很強
Best
Wenhao (楠博萬)