# audio_book_reader **Repository Path**: amdyhaha/audio_book_reader ## Basic Information - **Project Name**: audio_book_reader - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-04 - **Last Updated**: 2026-08-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Audio Book Reader > 开源有声书生成系统 —— 从 [Project Gutenberg](https://www.gutenberg.org/) 拉取公版图书,通过 [Piper TTS](https://github.com/rhasspy/piper) 本地神经网络合成语音,对接 [Audiobookshelf](https://www.audiobookshelf.org/) 播放管理。 > > 任何人都可贡献文字与语音,共建开放有声图书馆。

License Python Piper TTS

--- ## ✨ 特性 | 模块 | 说明 | |------|------| | **图书抓取** | 搜索与下载 Gutenberg 海量公版图书,支持 TXT / EPUB 格式 | | **多格式解析** | 适配器模式解析 EPUB / Markdown / TXT,按章节智能分段 | | **本地 TTS** | 基于 Piper 神经网络,离线合成,隐私友好,无需 GPU | | **多引擎架构** | 抽象基类 + 注册表模式,可插拔 Edge TTS、Coqui 等 | | **音频管道** | 分段合成 → 章节合并 → MP3 导出,支持断点续传 | | **Web 管理面板** | 章节浏览、一键生成、SSE 实时进度推送、在线播放 | | **边听边读** | 播放时同步高亮当前文本段落,字符加权精确定位 | | **Audiobookshelf** | 目录结构自动适配 + API 注册,专业有声书服务器 | | **开源协作** | 元数据内置贡献者字段,支持文本/语音/代码三种贡献 | ## 🏗 架构 ``` ┌──────────────────────────────────────────────────────────┐ │ Audio Book Reader │ ├──────────────────────────────────────────────────────────┤ │ CLI 入口 (cli.py) Web API (api_server.py) │ │ ├─ search / fetch ├─ 章节列表 / 生成 / 进度 │ │ ├─ parse / generate └─ 音频服务 / 文本同步 │ │ └─ list-voices │ ├──────────────────────────────────────────────────────────┤ │ 核心引擎 │ │ ├─ book_parser.py ← 多格式适配器 (TXT/EPUB/Markdown) │ │ ├─ tts_engine.py ← TTS 抽象基类 + 注册表 │ │ ├─ piper_tts.py ← Piper TTS 引擎实现 │ │ ├─ audio_pipeline.py ← 音频合成管道 (分段→合并→导出) │ │ └─ integrate.py ← Audiobookshelf 对接 (目录+API) │ ├──────────────────────────────────────────────────────────┤ │ 数据层 │ │ └─ models.py / metadata.py ← 数据模型、配置、元数据管理 │ ├──────────────────────────────────────────────────────────┤ │ 外部系统 │ │ ├─ Project Gutenberg ← 公版图书源 │ │ ├─ Piper TTS ← 神经网络语音合成 │ │ └─ Audiobookshelf ← 有声书播放服务器 │ └──────────────────────────────────────────────────────────┘ ``` **数据流:** ``` Gutenberg/本地 → 文本解析 → List → Piper TTS → 分段WAV ↓ Audiobookshelf 播放 ← output/final/ ← 章节MP3合并 ↑ Web 面板 SSE 进度 ←── 生成管理 ←──┘ ``` ## 🚀 快速开始 ### 环境要求 - **Python** 3.9+ - **Node.js** 18+(Audiobookshelf 需要) - **ffmpeg**(MP3 编码,需在 PATH 中) - Windows: `winget install ffmpeg` 或 [下载](https://ffmpeg.org/download.html) ### 安装 ```bash git clone https://gitee.com/amdyhaha/audio_book_reader.git cd audio_book_reader # 安装 Python 依赖 pip install -r requirements.txt # 下载中文语音模型(国内用 hf-mirror 镜像) $env:PIPER_MIRROR='https://hf-mirror.com/rhasspy/piper-voices/resolve/main' python scripts/cli.py download-voice zh_CN-huayan-medium # 安装 Audiobookshelf (可选) cd audiobookshelf && npm ci && cd client && npm ci && npm run generate && cd ../.. ``` ### 一键启动 ```bash # 启动 Web 管理面板 python scripts/api_server.py # 浏览器访问: http://localhost:8899 ``` ## 📖 使用指南 ### Web 管理面板(推荐) 访问 `http://localhost:8899`: 1. **左侧章节列表** —— 浏览书籍所有章节,每回显示段数与字数 2. **▶ 生成按钮** —— 点击生成音频,SSE 实时推送进度条 3. **▶ 播放按钮** —— 生成完成后在线播放 4. **右侧文本面板** —— 播放时同步显示文字,字符加权高亮跟随 5. **📍 跟随开关** —— 可切换自动滚动/自由浏览模式 6. **一键生成未完成** —— 批量生成所有未完成章节 ### 命令行工具 ```bash # 搜索图书 python scripts/cli.py search "红楼梦" # 下载图书文本 python scripts/cli.py fetch 24264 --format txt # 查看图书信息 python scripts/cli.py info 24264 # 解析文本(查看分段结果) python scripts/cli.py parse books/text/24264.txt --language zh # 查看可用语音模型 python scripts/cli.py list-voices # 下载语音模型 python scripts/cli.py download-voice zh_CN-huayan-medium # 一键生成有声书(CLI 全流程) python scripts/cli.py generate books/text/24264.txt \ --title "红楼梦" --author "曹雪芹" \ --language zh --voice zh_CN-huayan-medium \ --output-format mp3 # 查看已生成列表 python scripts/cli.py list ``` ### 使用本地文件 将任意 TXT / EPUB / Markdown 文件放入 `books/` 目录,创建对应的 `.meta.json` 元数据文件: ```json { "title": "我的书", "author": "作者名", "language": "zh" } ``` 然后在 Web 面板中即可看到该书,按章节生成音频。 ## ⚙ 配置 编辑 `config/config.yaml`: ```yaml # TTS 引擎 tts: engine: "piper" # piper | edge | coqui language: "zh" # 默认语言 speed: 1.0 # 语速 (0.5~2.0) volume: 1.0 # 音量 (0.0~2.0) # Piper TTS piper: default_model: "zh_CN-huayan-medium" use_cuda: false # GPU 加速(需 onnxruntime-gpu) max_chunk_size: 500 # 单次合成最大字符数 # 音频输出 audio: format: "mp3" # mp3 | wav | ogg | flac mp3_bitrate: "128k" silence_padding: 500 # 段间静音(ms) # Audiobookshelf audiobookshelf: api_url: "http://localhost:13378" api_token: "" # 在 ABS 管理后台 → 设置 → 用户 → API Token library_id: "" # 音频库 ID auto_register: false # 生成后自动触发扫描 # 日志 logging: level: "INFO" # DEBUG | INFO | WARNING | ERROR ``` ## 🔊 语音模型 ### 中文模型 | 模型名 | 质量 | 描述 | 下载 | |--------|------|------|------| | `zh_CN-huayan-medium` | Medium | 女声(花颜) | `download-voice zh_CN-huayan-medium` | ### 英文模型 | 模型名 | 质量 | 描述 | |--------|------|------| | `en_US-lessac-medium` | Medium | 清晰美式女声 | | `en_US-amy-medium` | Medium | 自然美式女声 | | `en_US-libritts-high` | High | LibriTTS 高质量 | | `en_US-ryan-high` | High | 高质量男声 | > 更多模型请访问 [Piper 语音模型库](https://huggingface.co/rhasspy/piper-voices)。 > 国内用户设置环境变量 `PIPER_MIRROR=https://hf-mirror.com/rhasspy/piper-voices/resolve/main` 使用镜像下载。 ## 🔌 Audiobookshelf 集成 Audiobookshelf 是本项目的播放引擎,提供专业的书架管理、多端同步、倍速播放等功能。 ### 方式一:目录扫描(推荐) 本项目的 `output/final/` 目录结构天然符合 Audiobookshelf 规范: ``` output/final/ 曹雪芹/ 红楼梦/ 第1回_甄士隱夢幻識通靈.mp3 第2回_賈夫人仙逝揚州城.mp3 ... metadata.json ``` 在 Audiobookshelf 中创建音频库,将路径指向 `output/final/`,即可自动识别。 ### 方式二:API 注册 在 `config.yaml` 中配置 API Token: ```yaml audiobookshelf: api_token: "eyJhbGciOi..." library_id: "lib_xxx" auto_register: true ``` ### 启动 Audiobookshelf ```bash cd audiobookshelf # 安装依赖(如未安装) npm ci && cd client && npm ci && npm run generate && cd .. # 启动服务(默认端口 13378) node index.js ``` 访问 `http://localhost:13378`,创建账户后即可使用。 ## 🏗 项目结构 ``` audio_book_reader/ ├── scripts/ # 核心引擎 │ ├── models.py # 数据模型 (10 个数据类) │ ├── metadata.py # 元数据管理 + 配置加载 │ ├── fetch_books.py # Gutenberg 图书抓取 │ ├── book_parser.py # 多格式文本解析器 (适配器模式) │ ├── tts_engine.py # TTS 抽象基类 + 注册表 │ ├── piper_tts.py # Piper TTS 引擎实现 │ ├── audio_pipeline.py # 音频合成管道 │ ├── integrate.py # Audiobookshelf 对接 │ ├── api_server.py # FastAPI Web 服务 │ └── cli.py # 命令行入口 ├── templates/ │ └── index.html # Web 管理面板前端 ├── config/ │ └── config.yaml # 全局配置 ├── audiobookshelf/ # Audiobookshelf 源码 (git submodule) ├── voices/ # Piper 语音模型 (需自行下载) ├── output/ # 输出目录 │ ├── raw/ # 分段原始 WAV │ └── final/ # 最终合并 MP3 + 元数据 ├── books/ # 图书源文件缓存 │ ├── text/ # 文本 │ └── epub/ # EPUB ├── start.py # 一键启动脚本 ├── requirements.txt ├── .gitignore ├── LICENSE # MIT └── README.md ``` ## 🤝 贡献指南 欢迎贡献文本、语音模型、代码或文档! ### 贡献图书文本 1. Fork 仓库 2. 准备文本文件(TXT / EPUB / Markdown),放入 `books/` 3. 添加 `.meta.json` 填写书名、作者等基本信息 4. 提交 PR ### 贡献语音模型 1. 训练或获取 Piper 兼容的语音模型(`.onnx` + `.json`) 2. 将模型信息添加到 `scripts/piper_tts.py` 的 `PRESET_VOICES` 字典 3. 提交 PR(注意:模型文件不入库,仅提交配置信息) ### 贡献代码 1. Fork → Feature 分支 → 遵循现有代码风格 → PR 2. 新 TTS 引擎:继承 `BaseTTSEngine`,注册到 `TTSEngineRegistry` 3. 新文本格式:继承 `BaseBookParser`,注册到 `ParserRegistry` ## 📋 API 文档 | 端点 | 方法 | 说明 | |------|------|------| | `/api/books` | GET | 书籍列表 | | `/api/books/{id}` | GET | 书籍详情 + 章节列表 | | `/api/chapters/{book_id}/{idx}/text` | GET | 章节文本内容 | | `/api/chapters/{book_id}/{idx}/generate` | POST | 启动章节生成 | | `/api/chapters/{book_id}/{idx}/progress` | GET | SSE 进度推送 | | `/audio/{author}/{title}/{chapter}.mp3` | GET | 音频文件服务 | ### SSE 进度事件格式 ```json { "event": "progress", "data": { "state": "running", "progress": 45, "progress_text": "合成中 5/21 (1850字)", "audio_url": "", "error": "" } } ``` ## 🛠 技术栈 | 层级 | 技术 | |------|------| | 后端 API | Python 3.13 / FastAPI / Uvicorn | | 前端 | 纯 HTML/CSS/JS / SSE | | TTS 引擎 | Piper TTS / ONNX Runtime | | 音频处理 | pydub / wave / ffmpeg | | 图书来源 | gutenbergpy / urllib | | 文本解析 | ebooklib / BeautifulSoup4 | | 配置 | PyYAML | | 播放器 | Audiobookshelf (Node.js / Nuxt.js) | ## 📝 路线图 - [x] Piper TTS 引擎(中文+英文) - [x] Gutenberg 图书抓取(搜索/下载) - [x] 多格式文本解析(TXT/EPUB/Markdown) - [x] Web 管理面板 + SSE 进度推送 - [x] 边听边读文本同步 - [x] Audiobookshelf 集成 - [ ] Edge TTS 引擎(免模型,云端合成) - [ ] 精确字段时间戳(当前为字符加权估算) - [ ] Docker Compose 一键部署 - [ ] 声音克隆(Voice Cloning) - [ ] 多语言混读(中英混合段落) - [ ] 移动端适配 ## 📄 依赖致谢 - [Piper TTS](https://github.com/rhasspy/piper) — 本地神经网络 TTS - [Project Gutenberg](https://www.gutenberg.org/) — 公版图书库 - [Audiobookshelf](https://github.com/advplyr/audiobookshelf) — 开源有声书服务器 - [gutenbergpy](https://github.com/raduangelescu/gutenbergpy) — Gutenberg Python 客户端 - [pydub](https://github.com/jiaaro/pydub) — 音频处理 - [ebooklib](https://github.com/aerkalov/ebooklib) — EPUB 解析 - [FastAPI](https://fastapi.tiangolo.com/) — Web 框架 ## License MIT License — 详见 [LICENSE](LICENSE)