| .. | ||
| sql | ||
| src/main | ||
| static | ||
| uploads | ||
| .gitignore | ||
| init_model_status.sql | ||
| pom.xml | ||
| README.md | ||
| run_synthesis.bat | ||
| start.bat | ||
声音克隆系统 (Voice Cloning System)
基于阿里云通义千问 TTS 声音复刻技术的完整声音克隆应用,包含 Java Spring Boot 后端和 React 前端。
功能特性
- ✨ 声音复刻: 上传 10-20 秒音频,快速创建专属音色
- 📋 音色管理: 查看、管理所有已创建的音色
- 🗑️ 删除音色: 支持删除不需要的音色
- 🎨 现代化界面: 使用 React + TailwindCSS 构建的美观 UI
- 🔒 安全可靠: 支持环境变量配置 API Key
技术栈
后端
- Java 17
- Spring Boot 3.2.0
- Maven
- Gson (JSON 处理)
- Apache HttpClient 5
前端
- React 18
- Vite
- TailwindCSS
- Axios
- Lucide React (图标)
快速开始
前置要求
- Java 17+: 确保已安装 Java 17 或更高版本
- Maven: 用于构建 Java 项目
- Node.js 18+: 用于运行前端项目
- 阿里云 API Key: 从阿里云百炼获取
1. 配置 API Key
有两种方式配置 API Key:
方式一:环境变量(推荐)
# Windows PowerShell
$env:DASHSCOPE_API_KEY="your-api-key-here"
# Windows CMD
set DASHSCOPE_API_KEY=your-api-key-here
# Linux/Mac
export DASHSCOPE_API_KEY=your-api-key-here
方式二:配置文件
编辑 src/main/resources/application.properties:
dashscope.api.key=your-api-key-here
2. 启动后端服务
# 进入项目根目录
cd cosyvoice
# 使用 Maven 运行
mvn spring-boot:run
# 或者先编译再运行
mvn clean package
java -jar target/voice-cloning-1.0.0.jar
后端服务将在 http://localhost:20001 启动
3. 启动前端服务
# 进入前端目录
cd frontend
# 安装依赖
npm install
# 启动开发服务器
npm run dev
前端服务将在 http://localhost:3000 启动
4. 访问应用
在浏览器中打开 http://localhost:3000 即可使用声音克隆系统。
使用说明
创建音色
- 点击"创建音色"标签
- 点击上传区域选择音频文件(支持 WAV、MP3、M4A)
- 输入音色名称(仅支持字母、数字、下划线,最长 16 字符)
- 点击"创建音色"按钮
- 等待处理完成,系统会返回音色 ID
音频要求
- 格式: WAV (16bit)、MP3、M4A
- 时长: 推荐 10-20 秒,最长 60 秒
- 大小: < 10 MB
- 采样率: ≥ 24 kHz
- 声道: 单声道
- 内容:
- 必须包含至少 3 秒连续清晰朗读
- 避免背景音乐、噪音或其他人声
- 使用正常说话音频,不要上传歌曲
查看音色列表
- 点击"音色列表"标签
- 查看所有已创建的音色
- 可以删除不需要的音色
使用音色进行语音合成
创建音色后,您可以使用返回的音色 ID 在语音合成接口中使用。详见阿里云文档。
API 接口
创建音色
POST /api/voice/create
Content-Type: multipart/form-data
参数:
- audio: 音频文件
- name: 音色名称
响应:
{
"success": true,
"voiceId": "qwen-tts-vc-guanyu-voice-20250812105009984-838b",
"message": "音色创建成功"
}
查询音色列表
GET /api/voice/list
响应:
{
"success": true,
"voices": [
{
"voice": "qwen-tts-vc-guanyu-voice-20250812105009984-838b",
"target_model": "qwen3-tts-vc-realtime-2025-11-27",
"create_time": 1723439409
}
]
}
删除音色
DELETE /api/voice/delete/{voiceId}
响应:
{
"success": true,
"message": "音色删除成功"
}
健康检查
GET /api/voice/health
响应:
{
"status": "ok",
"message": "Voice Cloning API is running"
}
项目结构
cosyvoice/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/aliyun/voicecloning/
│ │ ├── VoiceCloningApplication.java # 主应用类
│ │ ├── config/
│ │ │ └── CorsConfig.java # CORS 配置
│ │ ├── controller/
│ │ │ └── VoiceCloningController.java # REST 控制器
│ │ └── service/
│ │ └── VoiceCloningService.java # 业务逻辑
│ └── resources/
│ └── application.properties # 应用配置
├── frontend/
│ ├── src/
│ │ ├── App.jsx # 主应用组件
│ │ ├── main.jsx # 入口文件
│ │ └── index.css # 全局样式
│ ├── index.html # HTML 模板
│ ├── package.json # 前端依赖
│ ├── vite.config.js # Vite 配置
│ └── tailwind.config.js # TailwindCSS 配置
├── pom.xml # Maven 配置
└── README.md # 项目文档
常见问题
1. API Key 配置错误
错误: "API Key未配置,请在application.properties中设置dashscope.api.key"
解决: 确保已正确配置环境变量或在 application.properties 中设置 API Key。
2. 文件上传失败
错误: "文件大小不能超过10MB" 或 "不支持的音频格式"
解决:
- 确保音频文件小于 10MB
- 使用支持的格式:WAV、MP3、M4A
- 确保音频质量符合要求
3. 跨域问题
错误: CORS 相关错误
解决: 后端已配置 CORS,确保前端运行在 localhost:3000 或 localhost:5173。
4. 音色创建失败
可能原因:
- 音频质量不符合要求
- 音频时长不符合要求(推荐 10-20 秒)
- 音频包含背景噪音或多人声音
- API Key 额度不足
开发指南
修改 API 地域
如果需要使用新加坡地域,修改 application.properties:
dashscope.api.url=https://dashscope-intl.aliyuncs.com/api/v1/services/audio/tts/customization
前端开发
cd frontend
npm run dev # 开发模式
npm run build # 生产构建
npm run preview # 预览生产构建
后端开发
mvn spring-boot:run # 开发模式(支持热重载)
mvn clean package # 打包
许可证
本项目仅供学习和研究使用。使用阿里云 API 需遵守阿里云服务协议。
参考资料
支持
如有问题,请参考阿里云官方文档或提交 Issue。