[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-73921":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":28,"readmeContent":29,"aiSummary":30,"trendingCount":16,"starSnapshotCount":16,"syncStatus":31,"lastSyncTime":32,"discoverSource":33},73921,"easyVoice","cosin2077\u002FeasyVoice","cosin2077","开源文本转语音工具，支持超长文本，多角色配音","https:\u002F\u002Feasyvoice.ioplus.tech",null,"TypeScript",2171,350,16,53,0,14,30,64,42,98.04,false,"main",[25,26,27],"edge-tts","tts","tts-engines","2026-06-12 04:01:12","# EasyVoice 🎙️\n\n## 项目简介 ✨  \n\n**EasyVoice** 是一个开源的文本、小说智能转语音解决方案，旨在帮助用户轻松将文本内容转换为高质量的语音输出。  \n\n- **一键生成语音和字幕**\n\n- **AI 智能推荐配音**\n\n- **完全免费，无时长、无字数限制**\n\n- **支持将 10 万字以上的小说一键转为有声书！**\n\n- **流式传输，多长的文本都能立刻播放**\n\n- **支持自定义多角色配音**\n\n无论你是想听小说、为创作配音，还是打造个性化音频，EasyVoice 都是你的最佳助手！\n\n**你可以轻松的将 EasyVoice 部署到你的云服务器或者本地！**\n\n## 体验一下\n\n[easyvoice.ioplus.tech](https:\u002F\u002Feasyvoice.ioplus.tech)\n\n## 核心功能 🌟\n\n- **文本转语音** 📝 ➡️ 🎵  \n  一键将大段文本转为语音，高效又省时。\n- **流式传输** 🌊  \n  再多的文本，都可以迅速返回音频直接开始试听！\n- **多语言支持** 🌍  \n  支持中文、英文等多种语言。  \n- **字幕支持** 💬  \n  自动生成字幕文件，方便视频制作和字幕翻译。  \n- **角色配音** 🎭  \n  提供多种声音选项，完美适配不同角色。  \n- **自定义设置** ⚙️  \n  可调整语速、音调等参数，打造专属语音风格。  \n- **AI 推荐** 🧠  \n  通过 AI 智能推荐最适合的语音配置，省心又贴心。  \n- **试听功能** 🎧  \n  生成前可试听效果，确保每一句都如你所愿！  \n\n## Screenshots📸\n\n![Home](.\u002Fimages\u002Freadme.home.jpg)\n![Generate](.\u002Fimages\u002Freadme.generate.jpg)\n\n## 快速开始 🚀\n\n### 1. 通过 docker 运行\n\n```bash\n# 极简运行，你可以通过 -e 指定环境变量\ndocker run -d -p 3000:3000 -v $(pwd)\u002Faudio:\u002Fapp\u002Faudio cosincox\u002Feasyvoice:latest\n```\n\nor 将仓库克隆到本地，使用 Docker Compose 一键运行！\n\n```bash\ndocker-compose up -d\n```\n\n### 2. 本地运行项目（请先确保已安装 Node.js 环境，参考：[安装 Node.js](https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F442215189)）\n\n```bash\n# 开启\u002F安装 pnpm\ncorepack enable\n# 或者使用 npm 安装 pnpm\nnpm install -g pnpm\n\n# 克隆仓库\ngit clone git@github.com:cosin2077\u002FeasyVoice.git\ncd easyVoice\n# 安装依赖\npnpm i -r\n\n# 开发模式\npnpm dev:root\n\n# 生产模式\npnpm build:root\npnpm start:root\n```\n\n### 3. 生成的音频、字幕保存位置\n\n- Docker 部署： 保存在挂载的 `audio` 目录下\n- Node.js 运行保存在 `.\u002Fpackages\u002Fbackend\u002Faudio` 目录下\n\n## 高级\n\n### 角色自定义\n\n启动服务后尝试在命令行运行下述命令：\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fapi\u002Fv1\u002Ftts\u002FgenerateJson \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n  \"data\": [\n    {\n      \"desc\": \"徐凤年\",\n      \"text\": \"你敢动他，我会穷尽一生毁掉卢家，说到做到\",\n      \"voice\": \"zh-CN-YunjianNeural\",\n      \"volume\": \"40%\"\n    },\n    {\n      \"desc\": \"姜泥\",\n      \"text\": \"徐凤年，你快走，你打不过的\",\n      \"voice\": \"zh-CN-XiaoyiNeural\"\n    },\n    {\n      \"desc\": \"路人甲\",\n      \"text\": \"他可是堂堂棠溪剑仙，这小子真是遇到强敌了\",\n      \"voice\": \"zh-CN-XiaoniNeural\",\n      \"volume\": \"-20%\"\n    },\n    {\n      \"desc\": \"路人乙\",\n      \"text\": \"这小子真是不知死活，竟然敢挑战卢白撷\",\n      \"voice\": \"zh-TW-HsiaoChenNeural\",\n      \"volume\": \"-20%\"\n    },\n    {\n      \"desc\": \"旁白\",\n      \"text\": \"面对棠溪剑仙卢白撷的杀意，徐凤年按住剑柄蓄势待发，他将姜泥放在心尖上，话锋一句比一句犀利，威逼利诱的要求卢白撷放姜泥一条生路。卢白撷也是不撞南墙不回头的人，他与西楚有深仇大恨不得不报...\",\n      \"voice\": \"zh-CN-YunxiNeural\",\n      \"rate\": \"0%\",\n      \"pitch\": \"0Hz\",\n      \"volume\": \"0%\"\n    },\n    {\n      \"desc\": \"旁白\",\n      \"text\": \"卢白撷凝聚剑气，剑光如虹，直指姜泥。剑气快到姜泥的时候，竟然被一颗小石子打破！万千剑气瞬间消散。居然就是刚刚进入山门的青衣男子。卢白撷心中警铃大作，再次凝结千万水剑想要先下手为强，青衣男子竟然一只手就挡下了，随之飓风盘起，竟然有山呼海啸之势，众人分分被逼退。随后的打斗，青衣男子每一步都精准预测了卢白撷的动作，卢白撷心中惊骇不已。\",\n      \"voice\": \"zh-CN-YunxiNeural\",\n      \"rate\": \"0%\",\n      \"pitch\": \"0Hz\",\n      \"volume\": \"0%\"\n    },\n    {\n      \"desc\": \"卢白撷\",\n      \"text\": \"人心入局，观子无敌，棋局未央，棋子难逃。你是！？ 曹长卿！\",\n      \"voice\": \"zh-CN-YunyangNeural\",\n      \"rate\": \"-2%\",\n      \"pitch\": \"2Hz\",\n      \"volume\": \"10%\"\n    }\n  ]\n}' \\\n-o output.mp3\n\n```\n\n你将看到output.mp3文件的生成，并立即可以播放。\n\n#### 参数说明\n\n- text: 你需要转语音的文字。\n- voice: 你需要用到的声音，参考：[支持的声音列表](.\u002Fpackages\u002Fbackend\u002Fsrc\u002Fllm\u002Fprompt\u002FvoiceList.json)\n- rate: 语速调整，百分比形式，默认 +0%（正常），如 \"+50%\"（加快 50%），\"-20%\"（减慢 20%）。\n- volume: 音量调整，百分比形式，默认 +0%（正常），如 \"+20%\"（增 20%），\"-10%\"（减 10%）。\n- pitch: 音调调整，默认 +0Hz（正常），如 \"+10Hz\"（提高 10 赫兹），\"-5Hz\"（降低 5 赫兹）。\n\n### 接入其他 TTS 服务\n\n- TODO\n\n## 技术实现 🛠️\n\n- **前端**：Vue 3 + TypeScript + Element Plus 🌐  \n- **后端**：Node.js + Express + TypeScript ⚡  \n- **语音合成**：Microsoft Azure TTS(更多引擎接入中) + OpenAI(OpenAI 兼容即可) + ffmpeg 🎤  \n- **部署**：Node.js + Docker + Docker Compose 🐳  \n\n## 快速开发 🚀\n\n1.克隆仓库\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fcosin2077\u002FeasyVoice.git\n```\n\n2.安装依赖\n\n```bash\npnpm i -r\n```\n\n3.启动项目\n\n```bash\npnpm dev\n```\n\n4.打开浏览器，访问 `http:\u002F\u002Flocalhost:5173\u002F`，开始体验吧！\n\n## 环境变量 ⚙️\n\n| 变量名              | 默认值                         | 描述                          |\n|--------------------|-------------------------------|------------------------------|\n| `PORT`             | `3000`                        | 服务端口                      |\n| `OPENAI_BASE_URL`  | `https:\u002F\u002Fapi.openai.com\u002Fv1`   | OpenAI 兼容 API 地址          |\n| `OPENAI_API_KEY`   | -                             | OpenAI API Key               |\n| `MODEL_NAME`       | -                             | 使用的模型名称                 |\n| `RATE_LIMIT_WINDOW`| `1`                           | 速率限制窗口大小（分钟）         |\n| `RATE_LIMIT`       | `10`                          | 速率限制次数                   |\n| `EDGE_API_LIMIT`   | `3`                           | Edge-TTS API 并发数           |\n\n- **配置文件**：可在 `.env` 或 `packages\u002Fbackend\u002F.env` 中设置，优先级为 `packages\u002Fbackend\u002F.env > .env`。  \n- **Docker 配置**：通过 `-e` 参数传入环境变量，如上文示例。\n\n## FAQ\n\n- **Q: 如何配置 OpenAI 相关信息?**\n- A: 在 `.env` 文件中添加 `OPENAI_API_KEY=your_api_key` `OPENAI_BASE_URL=openai_compatible_base_url` `MODEL_NAME=openai_model_name`，你可以用任何 openai compatible 的 API 地址和模型名称，例如 `https:\u002F\u002Fopenrouter.ai\u002Fapi\u002Fv1\u002F` 和 `deepseek`。\n\n- **Q: 为什么我的AI配音效果不好？**\n- A: AI 推荐配音是通过大模型来决定不同的段落的配音参数，大模型的能力直接影响配音结果，你可以尝试更换不同的大模型，或者是用 Edge-TTS 选择固定的声音配音。\n\n- **Q: 速度太慢？**\n- A: AI 推荐配音需要把输入的文本分段、然后让 AI 分析、推荐每一分段的配音参数，最后再生成音频、拼接。速度会比直接用 Edge-TTS慢。你可以更换相应更快的大模型，或者尝试调节 Edge-TTS 的并发参数：EDGE_API_LIMIT为更大的值(10 以下)，注意并发太高可能会有限制。\n\n## Tips\n\n- 当前主要通过 Edge-TTS API 提供免费语音合成。  \n\n- 未来计划支持官方 API、Google TTS、声音克隆等功能。\n","EasyVoice 是一个开源的文本转语音工具，特别适用于将长篇小说或大段文本转换为高质量的语音输出。其核心功能包括一键生成语音和字幕、支持超长文本（超过10万字）的即时流式传输播放、多角色配音以及自定义声音设置如语速和音调调整等。此外，它还提供了AI智能推荐最佳配音选项的功能。该项目采用TypeScript编写，易于部署到云服务器或本地环境，适合用于有声书制作、视频配音、个性化音频内容创作等多种场景。",2,"2026-06-11 03:47:56","high_star"]