NovelVoice是一个Web应用程序,能够将自动中文小说文本文件转换为高质量的有声书,并提供边转边播的在线播放功能。该系统使用LLM智能分析文本内容,识别角色和对话,并使用多声音合成技术,可以根据角色性别和性格特征分配不同的语音,生成逼真的有声书体验。适合与NAS等设备结合使用,实现无线上网播放。
目前已经实现的功能包括:
- 用户登录和创建(需超级管理员)
- 小说上传和解析(目前仅支持UTF8 txt格式)
- 个人小说库管理
- 章节自动分割和手动调整
- 为小说设置单独的LLM模型(不设置的话使用默认模型)
- 小说文本阅读,为移动端优化
- 实时音频生成和播放,支持后台播放、息屏播放、切换页面后保持播放
- 智能角色识别和语音分配,也可手动调整
- 支持从任一章节开始播放,也支持小说断点续播
- HLS推流(仅测试了iPhone和Edge浏览器,其中Edge浏览器有些小瑕疵)
- 管理员权限管理
TODO:
- 支持更多小说格式(如EPUB)
- 整体上优化页面
- 自动获取小说作者、简介等信息生成小说封面。
- 提供API接口,支持批量处理
iPhone上的限制:
- 如果进入后台播放,在切换下一章的时候(audio换源)会停止播放,必须要用户手动点一下才能继续。
- 切换页面的时候没办法自动播放,必须要用户手动点一下。
- 智能文本分析: 使用LLM自动识别小说中的角色、对话和叙述内容
- 多声音合成: 根据角色特征(性别、性格等)分配不同的语音
- 实时音频生成: 多线程音频生成管道,支持实时流媒体播放
- 自适应流媒体: 基于HLS技术,支持断点续传和自适应播放
- 用户管理: 支持用户注册、登录和个人小说库管理
- 章节分割: 自动识别小说章节结构
- 缓存优化: 音频文件缓存,支持重复播放
- 后端: Flask 3.1.2 + SQLAlchemy
- 数据库: SQLite (默认,可配置为其他数据库)
- 文本转语音: Microsoft Edge TTS / Azure TTS (通过EasyVoice)
- 流媒体: FFmpeg + HLS
- AI服务: 通义千问等LLM API
app/
├── app.py # Flask应用入口
├── models.py # 数据库模型
├── config.py # 应用配置
├── upload.py # 文件上传处理
├── chapter.py # 小说解析和章节分割
├── audio.py # 音频API接口
├── audio_generator.py # 核心音频生成引擎
├── llm_client.py # LLM API客户端
├── voice_script.py # 语音脚本生成
├── easyvoice_client.py # EasyVoice TTS客户端
├── edgetts_client.py # Edge TTS客户端
└── hls_manager.py # HLS流媒体管理
- Python 3.8+
- FFmpeg (必需,用于音频处理)
- 有效的LLM API密钥
- 克隆项目
git clone https://github.com/catsite05/novelvoice.git
cd novelvoice- 创建虚拟环境
python3 -m venv venv
source venv/bin/activate # Linux/macOS
# 或
venv\Scripts\activate # Windows- 安装依赖
pip install -r requirements.txt- 安装系统依赖
# Ubuntu/Debian
sudo apt-get install ffmpeg
# macOS
brew install ffmpeg- 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入必要的配置# Flask配置
SECRET_KEY=your-secret-key-here
# LLM API配置
LLM_API_KEY=your-llm-api-key
LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
LLM_MODEL=qwen3-max
开发模式
python3 app/app.py测试模式 (使用预配置的环境变量)
./test.shDocker部署
./deploy.sh # 如果部署到本地Docker容器,需要去配置SSH服务器那一行访问地址: http://localhost:5002
- 首次使用需要注册用户账户
- 支持管理员权限管理
- 支持
.txt格式的中文小说文件 - 系统自动解析章节结构
- 支持作者信息录入
- 点击章节开始音频生成
- 系统自动分析角色和对话
- 根据角色特征选择合适的语音
- 支持在线播放
- 自动缓存生成的音频文件
- 支持断点续传和章节跳转
voice.json 文件包含角色特征到Azure TTS语音的映射:
- 性别: 男声/女声
- 性格: 温暖、活泼、热情、阳光、专业、可靠、幽默、明亮
- 默认旁白: zh-CN-YunxiNeural
默认使用SQLite数据库 (instance/novelvoice.db),可通过修改 config.py 配置其他数据库。
- 分段长度: 约1500字符为一个音频段落
- 多线程处理: 3个并行线程处理音频生成
- 缓存策略: 音频文件自动缓存,支持重复播放
novelvoice/
├── app/ # 主要应用代码
│ ├── *.py # 各种功能模块
├── templates/ # HTML模板
├── static/ # 静态文件 (CSS, JS, 图片)
├── uploads/ # 上传的小说文件
├── audio/ # 生成的音频文件
├── hls_cache/ # HLS流媒体缓存
├── instance/ # 数据库文件
├── requirements.txt # Python依赖
├── docker-compose.yml # Docker编排配置
├── .env.example # 环境变量示例
└── README.md # 项目说明
使用Docker Compose快速部署:
docker-compose up -d这将启动NovelVoice应用并自动配置数据持久化。
GET /audio/<novel_id>/<chapter_id>- 获取音频播放信息POST /api/generate_audio- 生成章节音频GET /api/chapter_status/<chapter_id>- 查询生成状态
POST /api/upload- 上传小说文件GET /api/novels- 获取用户小说列表GET /api/novels/<novel_id>/chapters- 获取章节列表
-
FFmpeg未安装
- 确保系统已安装FFmpeg
- Ubuntu/Debian:
sudo apt-get install ffmpeg - macOS:
brew install ffmpeg
-
LLM API调用失败
- 检查API密钥和网络连接
- 确认API配额未超出限制
-
音频生成失败
- 检查Edge TTS或EasyVoice服务状态
- 确认voice.json配置文件正确
-
数据库错误
- 确保instance目录有写入权限
- 检查数据库文件是否损坏
应用运行时会输出详细的日志信息,包括:
- 音频生成进度
- LLM API调用状态
- 数据库操作记录
- 文件上传处理信息
欢迎提交Issue和Pull Request来改进项目。
- Fork项目仓库
- 创建开发分支
- 进行代码修改
- 测试功能完整性
- 提交Pull Request
本项目采用MIT许可证。详情请见LICENSE文件。不建议用于商业用途。
- Edge-TTS - 提供高质量的文本转语音服务(https://github.com/rany2/edge-tts)
- EasyVoice - 本项目借鉴了Kevin大大的思路和提示词(https://github.com/cosin2077/easyVoice)
- FFmpeg - 提供强大的音频处理功能
- Flask框架 - 提供简洁优雅的Web开发体验
注意: 请确保在使用前配置有效的LLM API密钥,并遵守相关的服务使用条款。