|
# WeClone-audio 模块
|
|
|
|
WeClone-audio 是一个使用微信语音消息克隆声音的模块,使用模型实现高质量语音合成。
|
|
### 显存需求
|
|
**Spark-TTS** 推荐
|
|
- **0.5B 模型**: 约 4GB 显存
|
|
|
|
**Llasa** (已弃用)
|
|
- **3B 模型**: 约 16GB 显存
|
|
- **1B 模型**: 约 9GB 显存
|
|
|
|
|
|
|
|
|
|
## 1. 导出微信语音数据
|
|
|
|
### 1.1 准备工作
|
|
- 使用 [PyWxDump](https://github.com/xaoyaoo/PyWxDump) 提取微信聊天记录
|
|
- 下载软件并解密数据库
|
|
- 点击聊天备份,导出类型选择"解密文件"
|
|
|
|
### 1.2 环境配置
|
|
语音导出仅支持Windows环境
|
|
WeClone Audio使用uv作为包管理器。
|
|
```bash
|
|
# 为 PyWxDump 创建 Python 环境和安装依赖
|
|
#
|
|
uv venv .venv-wx --python=3.10
|
|
.venv-wx\Scripts\activate
|
|
uv pip install pywxdump
|
|
```
|
|
|
|
### 1.3 导出语音文件
|
|
```bash
|
|
python weclone-audio/src/get_sample_audio.py --db-path "导出数据库路径" --MsgSvrID "导出聊天记录的MsgSvrID字段"
|
|
```
|
|
|
|
## 2. 语音合成推理
|
|
### Spark-TTS模型
|
|
|
|
**环境安装**
|
|
可不创建新环境,直接安装`sparktts`依赖组到WeClone共主环境
|
|
|
|
```bash
|
|
uv venv .venv-sparktts --python=3.10
|
|
source .venv-sparktts/bin/activate
|
|
uv pip install --group sparktts -e .
|
|
|
|
git clone https://github.com/SparkAudio/Spark-TTS.git weclone-audio/src/Spark-TTS
|
|
```
|
|
|
|
|
|
**模型下载**
|
|
|
|
通过python下载:
|
|
```python
|
|
from huggingface_hub import snapshot_download
|
|
|
|
# 假设此 Python 代码在 weclone-audio 目录下运行 模型将下载到 weclone-audio/pretrained_models/Spark-TTS-0.5B
|
|
snapshot_download("SparkAudio/Spark-TTS-0.5B", local_dir="pretrained_models/Spark-TTS-0.5B")
|
|
```
|
|
|
|
或通过git下载:
|
|
```bash
|
|
# 假设当前在 weclone-audio 目录
|
|
mkdir -p pretrained_models
|
|
|
|
# Make sure you have git-lfs installed (https://git-lfs.com)
|
|
git lfs install
|
|
git clone https://huggingface.co/SparkAudio/Spark-TTS-0.5B pretrained_models/Spark-TTS-0.5B
|
|
```
|
|
使用代码推理
|
|
```python
|
|
import os
|
|
import SparkTTS
|
|
import soundfile as sf
|
|
import torch
|
|
|
|
from SparkTTS import SparkTTS
|
|
|
|
# 假设此 Python 代码在 weclone-audio 目录下运行
|
|
# 模型路径相对于当前目录
|
|
model_path = "pretrained_models/Spark-TTS-0.5B"
|
|
sample_audio = "sample.wav"
|
|
output_audio = "output.wav"
|
|
|
|
model = SparkTTS(model_path, "cuda")
|
|
|
|
with torch.no_grad():
|
|
wav = model.inference(
|
|
text="晚上好啊,小可爱们,该睡觉了哦",
|
|
prompt_speech_path=sample_audio, # 使用相对路径
|
|
prompt_text="对,这就是我万人敬仰的太乙真人,虽然有点婴儿肥,但也掩不住我逼人的帅气。",
|
|
)
|
|
sf.write(output_audio, wav, samplerate=16000) # 使用相对路径
|
|
```
|
|
### Llasa模型 (已弃用)
|
|
### 2.1 环境配置
|
|
```bash
|
|
# 创建并配置推理环境
|
|
## 可不创建新环境,与LLaMA-Factory环境共用
|
|
uv venv .venv-xcodec --python=3.9
|
|
source .venv-xcodec/bin/activate
|
|
uv pip install --group xcodec -e .
|
|
# 退出环境
|
|
deactivate
|
|
|
|
# 系统依赖安装(如果需要)
|
|
sudo apt install python3-dev
|
|
sudo apt install build-essential
|
|
```
|
|
|
|
### 2.2 使用代码推理
|
|
如果遇到问题,请尝试将参考音频转换为WAV或MP3格式,将其裁剪至15秒以内,并缩短提示文本。
|
|
```python
|
|
import os
|
|
import soundfile as sf
|
|
# 假设 text_to_speech.py 位于 src/ 或其他可导入的位置
|
|
from text_to_speech import TextToSpeech
|
|
|
|
|
|
sample_audio_text = "对,这就是我万人敬仰的太乙真人,虽然有点婴儿肥,但也掩不住我逼人的帅气。" # 示例音频文本
|
|
# 假设此 Python 代码在 weclone-audio 目录下运行
|
|
# 示例音频路径相对于当前目录
|
|
sample_audio_path = "sample.wav"
|
|
output_audio = "output.wav"
|
|
|
|
|
|
tts = TextToSpeech(sample_audio_path, sample_audio_text)
|
|
target_text = "晚上好啊" # 生成目标文本
|
|
result = tts.infer(target_text)
|
|
sf.write(output_audio, result[1], result[0]) # 使用相对路径
|
|
```
|
|
|
|
|