OpenAI-Edge-TTS
扫码查看

免费替代OpenAI的文本转语音API接口

OpenAI-Edge-TTS

综合介绍

OpenAI-Edge-TTS 是一个可以自行搭建的、与OpenAI文本转语音(TTS)服务接口兼容的API项目。它的核心原理是利用微软Edge浏览器内置的在线文本转语音服务,通过 edge-tts 这个Python库实现功能。这使得它完全免费。用户可以在自己的服务器或电脑上部署这个服务,从而获得一个与OpenAI TTS接口(例如 /v1/audio/speech)几乎一致的本地终结点。对于那些已经使用了OpenAI API的应用,例如Open WebUI或AnythingLLM,开发者可以几乎无缝地将付费的TTS服务替换为这个免费的本地服务,只需修改API的地址和密钥即可。该项目不仅支持多种音频格式输出和语速调整,还可以灵活选用微软提供的多种高质量语音模型,为个人开发者和小型项目提供了一个高性价比的语音合成解决方案。

功能列表

  • 兼容OpenAI接口:提供与OpenAI TTS标准完全一致的 /v1/audio/speech 接口,方便现有应用直接替换。
  • 免费使用:底层技术依赖于微软Edge的免费在线TTS服务,无任何API调用费用。
  • 支持多种语音:不仅映射了OpenAI的六种标准语音(alloy, echo, fable, onyx, nova, shimmer),还支持直接调用微软Edge提供的所有语音模型。
  • 多种音频格式:支持生成 mp3opusaacflacwavpcm 等多种主流音频格式,满足不同场景的需求。
  • 语速可调:允许用户通过参数调整语音的播放速度,范围从0.25倍到4.0倍。
  • 灵活部署:提供Docker镜像,支持一条命令快速启动服务。同时也支持使用Python环境进行本地部署。
  • API密钥保护:支持设置API密钥,保护你的服务不被未授权访问(密钥可设置为任意字符串)。
  • 模型和语音查询:提供额外的API接口,用于查询当前支持的TTS模型和所有可用的语音列表。

使用帮助

OpenAI-Edge-TTS 旨在提供一个简单、易于部署的免费文本转语音方案。你可以通过Docker或直接使用Python两种方式来运行此服务。

方案一:使用Docker快速部署(推荐)

这是最简单快捷的部署方式,几乎无需任何配置。前提是你的电脑上已经安装了Docker。

1. 快速启动服务打开你的终端(命令行工具),执行以下命令:

docker run -d -p 5050:5050 travisvn/openai-edge-tts:latest
  • docker run:运行一个Docker容器。
  • -d:让容器在后台(detached mode)运行,不会占用你的终端窗口。
  • -p 5050:5050:将你本机的5050端口映射到Docker容器的5050端口。这样你就可以通过访问本机的5050端口来使用服务了。
  • travisvn/openai-edge-tts:latest:指定要运行的Docker镜像。

执行完毕后,服务就会在你本地的 http://localhost:5050 地址上运行。

2. 需要音频格式转换功能?默认的镜像是最小化版本,不包含 ffmpeg 工具,因此主要支持mp3格式。如果你需要将语音转换为 opusaacflac 等其他格式,需要使用带有 ffmpeg 的镜像版本。命令如下:

docker run -d -p 5050:5050 travisvn/openai-edge-tts:latest-ffmpeg

3. 如何使用API服务启动后,你可以使用任何可以发送HTTP请求的工具(如 curl 或编程语言)来调用API。API接口地址是 http://localhost:5050/v1/audio/speech

这是一个使用 curl 的示例,它将文本 “你好,世界!” 转换为语音,并保存为 speech.mp3 文件:

curl -X POST http://localhost:5050/v1/audio/speech \
-H "Content-Type: application/json" \
-H "Authorization: Bearer any-string-is-ok" \
-d '{
"model": "tts-1",
"input": "你好,世界!",
"voice": "zh-CN-XiaoxiaoNeural"
}' \
--output speech.mp3
  • -H "Authorization: Bearer any-string-is-ok"Authorization 是必需的,但 Bearer 后面的密钥可以是任意字符串。这只是为了和OpenAI的格式保持一致。
  • "input": 你想要转换成语音的文本。
  • "voice": 指定语音模型。这里使用了中文女声 zh-CN-XiaoxiaoNeural。你可以从官方文档查找更多支持的语音。

方案二:使用Python环境本地部署

如果你不想使用Docker,或者想进行二次开发,可以选择在Python环境中直接运行。

1. 克隆代码仓库首先,你需要从GitHub上把项目的源代码克隆到本地。

git clone https://github.com/travisvn/openai-edge-tts.git
cd openai-edge-tts

2. 创建并激活虚拟环境为了不污染你系统的Python环境,建议创建一个独立的虚拟环境。

# macOS 或 Linux
python3 -m venv venv
source venv/bin/activate
# Windows
python -m venv venv
venv\Scripts\activate```
**3. 安装依赖包**
使用 `pip` 安装所有必需的Python库。
```bash
pip install -r requirements.txt

4. 配置环境变量项目通过一个 .env 文件来管理配置。你可以直接复制示例文件。

cp .env.example .env

你可以用文本编辑器打开 .env 文件进行修改,例如设置默认端口、API密钥等。大部分情况下,默认配置即可满足需求。

5. 启动服务一切准备就绪后,运行主程序。

python app/server.py

终端会显示服务已在 http://localhost:5050 启动。现在你可以像Docker部署一样调用API了。

集成到其他应用

此项目的最大优势在于可以无缝集成到已支持OpenAI TTS的应用中。

  • Open WebUI:
    1. 进入管理员设置界面的“Audio”选项。
    2. 将API地址设置为 http://<你的IP地址>:5050/v1 (如果Open WebUI和此服务在同一台机器的Docker中运行, 地址通常是 http://host.docker.internal:5050/v1)。
    3. API密钥可以填写任意字符。
  • AnythingLLM:
    1. 进入 "Voice & Speech" 设置。
    2. 选择 "generic OpenAI TTS providers" (通用OpenAI TTS提供商)。
    3. 填入你的API地址 http://<你的IP地址>:5050/v1 和任意API密钥。

通过以上步骤,你就可以拥有一个完全免费且私有的高质量文本转语音服务了。

应用场景

  1. 个人项目集成为个人开发的聊天机器人、智能助手或内容阅读器等应用提供语音播报功能,无需依赖昂贵的第三方付费服务,降低了开发和运营成本。
  2. 本地智能家居中枢部署在树莓派或家庭服务器上,作为智能家居系统的语音输出模块,实现设备状态的语音提醒、天气预报播报等功能,所有数据都在本地处理,保障隐私安全。
  3. 替代付费TTS服务对于已经在使用Open WebUI、AnythingLLM等AI前端应用,并且原本配置了OpenAI TTS的用户,可以使用此项目作为免费替代品,实现无缝切换,从而节省API开销。
  4. 内容创作辅助视频创作者或播客主播可以利用此工具快速生成视频旁白或音频草稿,通过调整文本和语音模型,高效地进行内容迭代和预览,提升工作效率。

QA

  1. 这个项目是完全免费的吗?是的,此项目利用微软Edge浏览器内置的免费TTS服务,因此生成语音本身不产生任何费用。你只需要承担部署它所需的服务器或电脑的硬件和网络成本。
  2. 我需要一个真实的OpenAI API密钥吗?不需要。配置文件中的 API_KEY 只是为了模拟OpenAI的认证流程,你可以将其设置为任何你喜欢的字符串,例如 API_KEY=my-secret-key。客户端在请求时只需携带匹配的密钥即可。
  3. 支持哪些语言和声音?它支持微软Edge TTS提供的所有语言和声音。你可以通过访问API的 /v1/voices/all 接口来获取一个完整的列表,其中包含了各种语言和对应的语音模型名称,例如中文普通话的 zh-CN-XiaoxiaoNeural (女声) 和 zh-CN-YunjianNeural (男声)。
  4. 为什么我部署后无法在另一台电脑上访问?如果你在一台电脑上部署,但在另一台设备(如手机或另一台电脑)上访问,请确保不要使用 localhost 作为地址。你需要将 localhost 替换为部署服务的电脑在局域网中的IP地址,例如 http://192.168.1.10:5050。同时,请检查防火墙设置,确保5050端口是开放的。
微信微博Email复制链接