| # 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]) # 使用相对路径 | |
| ``` | |