Readify 是一个 Chrome 扩展,可以将网页内容转换为语音朗读,支持多种语音和语速调节。
- 智能段落合并: 自动将短段落合并到450字符以上再发送到TTS API,减少API调用次数
- 列表识别支持: 智能识别无序列表(ul)和有序列表(ol),自动格式化列表内容
- 播放状态管理: 通过不同颜色区分播放状态(未播放、加载中、播放中、已播放、错误)
- 多语音支持: 支持 OpenAI TTS 的多种语音(nova, alloy, echo, fable, onyx, shimmer)
- 语速调节: 0.5x 到 2.0x 的播放速度调节
- 段落图标: 为每个段落和列表添加朗读图标,点击即可朗读
- 选中文本朗读: 选中网页文字后可直接朗读
- 智能合并算法: 从点击的段落开始,自动合并后续段落直到达到450字符
- 音频缓存系统: 智能缓存TTS音频,避免重复API调用
- 状态管理: 合并的段落会同步显示播放状态
- 错误处理: 完善的错误处理和用户提示
- 向后兼容: 保持对单个段落朗读的支持
- 下载扩展文件到本地
- 打开 Chrome 浏览器,进入
chrome://extensions/ - 开启"开发者模式"
- 点击"加载已解压的扩展程序",选择扩展文件夹
- 点击扩展图标打开设置面板
- 输入你的 OpenAI API Key
- 调整语速和语音设置
- 可选择是否显示段落朗读图标
- 整页朗读: 点击扩展图标,然后点击"朗读页面"
- 段落朗读: 开启段落图标后,点击段落旁的喇叭图标
- 列表朗读: 开启段落图标后,点击列表旁的喇叭图标(支持ul和ol)
- 选中朗读: 选中文字后,点击扩展图标中的"朗读选中文字"
- 🔵 蓝色: 默认状态,未播放
- 🟠 橙色: 加载中,正在生成音频
- 🟢 绿色: 播放中,音频正在播放
- 🟢 浅绿色: 已播放完成,可以重新播放
- 🔴 红色: 错误状态,播放失败
注意: 每个段落和列表独立管理播放状态,已播放的内容会保持浅绿色标记。
当用户点击段落或列表朗读图标时,系统会:
- 语言检测: 自动检测文本语言(中文/日文/韩文 vs 英文/其他)
- 自适应目标: 根据语言设置不同的目标字符数
- 中文/日文/韩文:200字符
- 英文/其他语言:450字符
- 检查元素长度: 如果段落或列表少于目标字符数
- 自动合并: 从当前元素开始,逐步添加后续段落和列表
- 格式化处理: 列表内容会自动格式化为带编号或项目符号的文本
- 达到目标: 直到累计字符数达到目标或没有更多元素
- 统一发送: 将合并后的文本一次性发送到TTS API
- 状态同步: 所有被合并的元素都会显示相同的播放状态
- 减少API调用: 避免频繁的短文本API调用
- 更好的朗读体验: 合并后的文本朗读更连贯
- 成本优化: 减少API调用次数,降低使用成本
- 智能处理: 自动处理不同长度的段落
中文页面:
段落1 (50字符) + 段落2 (60字符) + 段落3 (90字符) = 200字符
→ 检测到中文,目标200字符
→ 合并后一次性发送到API
英文页面:
段落1 (150字符) + 列表1 (180字符) + 段落2 (120字符) = 450字符
→ 检测到英文,目标450字符
→ 合并后一次性发送到API
→ 三个元素的图标都会显示播放状态
→ 列表内容格式化为:1. 项目1 2. 项目2 或 • 项目1 • 项目2
当用户朗读文本时,系统会:
- 检查缓存: 根据文本内容、语音和速度生成缓存键
- 缓存命中: 如果找到缓存,直接播放缓存的音频
- API调用: 如果没有缓存,调用TTS API生成音频
- 存储缓存: 将新生成的音频存储到缓存中
- 状态提示: 显示"使用缓存的音频"或"生成新的音频"
- 智能缓存键: 基于文本内容、语音和速度生成唯一标识
- 容量控制: 最多缓存50个音频条目,防止内存占用过多
- 自动清理: 支持24小时自动过期和手动清理
- 状态监控: 在插件界面实时显示缓存状态和数量
- 响应速度: 缓存的音频可以立即播放,无需等待API调用
- 成本节省: 避免重复的API调用,减少OpenAI费用
- 用户体验: 重复朗读同一内容时响应更快
- 网络优化: 减少网络请求,特别是在网络较慢的情况下
在插件弹窗中可以查看:
- 缓存状态:显示"空"、"已加载"或"错误"
- 缓存条目:显示当前缓存数量(如:15/50)
- 清空缓存:一键清空所有缓存
- 清理过期:清理超过24小时的缓存
- ✨ 新增智能音频缓存系统
- 🚀 大幅提升重复朗读的响应速度
- 💰 减少API调用次数,节省使用成本
- 🎛️ 添加缓存管理界面
- 🔧 支持缓存状态监控和清理
- 📱 优化用户通知和状态提示
- ✨ 新增自适应合并策略,根据语言自动调整目标字符数
- 🔤 支持中文/日文/韩文(200字符)和英文/其他语言(450字符)
- 📊 优化字符计数,使用Array.from()正确计算Unicode字符
- 🎯 改进中文页面的合并效果,避免过长的文本
- 📋 添加详细的调试日志,便于问题排查
- 🐛 修复中文字符计数不准确的问题
- ✨ 新增独立播放状态管理功能
- 🎨 通过不同颜色区分播放状态
- 🔄 每个段落和列表独立管理状态
- 🎯 已播放内容保持浅绿色标记
- 📋 支持状态持久化和重新播放
- 🐛 修复复杂合并逻辑导致的状态问题
- ✨ 新增列表识别和格式化功能
- 📋 支持无序列表(ul)和有序列表(ol)
- 🔄 自动格式化列表内容为可读文本
- 🎯 改进文本元素合并算法
- 🐛 修复高亮功能影响文本复制的问题
- ✨ 新增智能段落合并功能
- 🎯 自动合并短段落到450字符以上
- 🔄 优化API调用频率
- 🎨 改进状态管理和用户体验
- 🐛 修复各种兼容性问题
- 🎵 基础TTS朗读功能
- 🎚️ 语速和语音调节
- 📍 段落图标功能
- 🎯 选中文本朗读