Edge-TTS+Cloudflare Worker:免费 TTS 服务搭建指南,支持 API 调用与低代码集成

前言

TTS(Text-to-Speech,文本转语音)技术通过人工智能与语音合成算法,将书面文本转化为自然流畅的语音,已广泛应用于智能助手、电子阅读器、无障碍工具、教育娱乐等多个领域。

市面上的 TTS 工具虽种类繁多,但免费且高质量的选择并不多见:免费在线工具功能受限,商业级服务(如 Amazon Polly、Microsoft Azure TTS)成本较高,开源工具则需复杂部署。今天为大家分享一套零成本解决方案 ------ 通过 Edge-TTS 结合 Cloudflare Worker,快速搭建免费、高可用的 TTS 服务,支持 API 调用和低代码平台集成,轻松满足个人与小型团队的文本转语音需求。

一、核心工具介绍

1. Edge-TTS:免费高效的开源 TTS 工具

Edge-TTS 是基于微软 Edge 浏览器在线语音合成服务的 Python 开源库,依托微软 Azure TTS 技术,支持多语言、多音色输出,语音自然度高,且无需 API 密钥、无需依赖 Windows 系统或 Edge 浏览器。

  • 项目地址1:https://github.com/rany2/edge-tts/
  • 项目地址2:++++https://gitee.com/research_code/edge-tts++++
  • 核心优势:
    • 支持百余种语音(含中、英、日、韩等多语种)
    • 可自定义语速、音调、音量
    • 生成 MP3 音频文件与 SRT 字幕文件
    • 轻量化部署,Python 一键安装

2. edge-tts-openai-cf-worker:API 化代理方案

为解决 Edge-TTS 命令行操作繁琐、难以集成第三方工具的问题,推荐使用edge-tts-openai-cf-worker项目。该项目将 Edge-TTS 服务封装为兼容 OpenAI 接口格式的 API,部署在 Cloudflare Worker 上,实现跨平台、跨工具调用。

  • 项目地址1:https://github.com/linshenkx/edge-tts-openai-cf-worker
  • 项目地址2:++++https://gitee.com/research_code/edge-tts-openai-cf-worker++++
  • 核心优势:
    • 绕过大陆访问限制,无需微软认证
    • 兼容 OpenAI TTS 接口规范,无缝对接现有工具
    • 基于 Cloudflare Worker 免费计划,零服务器成本
    • 支持自定义 API 密钥,安全可控
    • 每天 10 万次免费请求,满足日常使用

二、快速搭建步骤

第一步:安装 Edge-TTS(基础使用)

若仅需简单文本转语音,可直接通过 Python 命令行使用 Edge-TTS:

  1. 前置条件:安装 Python 运行环境
  2. 安装依赖:

|----------------------|
| pip install edge-tts |

  1. 基础使用(生成 MP3 音频 + SRT 字幕):

|------------------------------------------------------------------------------------------|
| edge-tts --text "欢迎使用Edge-TTS免费语音服务" --write-media hello.mp3 --write-subtitles hello.srt |

执行后会在当前目录生成音频文件和字幕文件,操作简单高效。

第二步:部署 Cloudflare Worker(API 服务搭建)

为实现 API 调用,需将edge-tts-openai-cf-worker部署到 Cloudflare Worker,步骤如下:

1. 准备工作
2. 创建 Cloudflare Worker
  1. 登录 Cloudflare 控制台,进入「Workers & Pages」
  2. 点击「Create Worker」,输入服务名称(如edge-tts-api),点击「部署」
  3. 部署成功后,点击「编辑代码」进入代码编辑页面
3. 部署核心代码
  1. 删除默认的 "Hello World" 代码
  2. 复制edge-tts-openai-cf-worker项目中的worker.js代码(完整代码见文末附录)
  3. 粘贴到编辑框,点击「Save and deploy」完成部署
4. 设置 API 密钥(可选,推荐)

为防止接口被恶意调用,建议设置 API 密钥:

  1. 在 Worker 详情页,进入「Settings → Variables」
  2. 点击「Add variable」,名称填写API_KEY,值填写自定义密钥(如随机字符串)
  3. 点击「Save and deploy」生效
5. 自定义域名配置(可选)

Cloudflare 分配的默认域名国内访问可能不稳定,可配置自定义域名:

  1. 确保自定义域名已托管在 Cloudflare,且 DNS 记录为橙色代理状态
  2. 在 Worker 详情页,进入「设置 → 域和路由 → 添加」
  3. 选择「自定义域」,输入域名(如tts.example.com),点击「添加域」
  4. 等待证书部署完成(约几分钟),即可通过自定义域名访问

三、API 调用方式

部署完成后,可通过 API 接口调用 TTS 服务,支持基础文本转语音、自定义语速 / 音调 / 情绪等功能。

1. 基础调用(curl 命令)

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| curl --location 'https://你的Worker域名/v1/audio/speech' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer 你的API_KEY' \ --data '{ "model": "tts-1", "input": "你好,世界!这是免费TTS服务生成的语音", "voice": "zh-CN-XiaoxiaoNeural", "response_format": "mp3", "speed": 1.0 }' --output output.mp3 |

2. Python 代码调用(兼容 OpenAI SDK)

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| from openai import OpenAI # 配置客户端 api_key = '你的API_KEY' base_url = 'https://你的Worker域名/v1' client = OpenAI( api_key=api_key, base_url=base_url ) # 生成语音 data = { 'model': 'tts-1', 'input': '灵活多样:参考模板但需根据具体需求生成多样化内容,避免固定化依赖', 'voice': 'zh-CN-XiaoxiaoNeural', # 可选其他语音 'response_format': 'mp3', 'speed': 1.0, # 语速:0.5-2.0 'pitch': 1.0, # 音调:0.5-2.0 'style': 'general' # 情绪:general/cheerful/angry/sad/chat } try: response = client.audio.speech.create(**data) with open('test_tts.mp3', 'wb') as f: f.write(response.content) print("MP3文件已保存成功!") except Exception as e: print(f"调用失败:{e}") |

3. 核心参数说明

|-----------------|--------|----|--------------------|--------------------------------------------------------|
| 参数 | 类型 | 必填 | 说明 | 示例值 |
| model | string | 是 | 模型名称(固定为 tts-1) | tts-1 |
| input | string | 是 | 待转换的文本内容 | "你好,世界!" |
| voice | string | 是 | 语音角色(支持多语种) | zh-CN-XiaoxiaoNeural(中文晓晓)、en-US-JennyNeural(英文 Jenny) |
| response_format | string | 否 | 音频格式(默认 MP3) | mp3 |
| speed | number | 否 | 语速(0.5-2.0,默认 1.0) | 1.2 |
| pitch | number | 否 | 音调(0.5-2.0,默认 1.0) | 1.1 |
| style | string | 否 | 情绪风格 | general(通用)、cheerful(开心)、angry(愤怒)、sad(悲伤)、chat(闲聊) |

4. 支持的语音列表(部分)

|----------------------|---------------|----|
| 语音代码 | 描述 | 语言 |
| zh-CN-XiaoxiaoNeural | 晓晓 - 温暖活泼 | 中文 |
| zh-CN-YunxiNeural | 云希 - 稳重大气(男声) | 中文 |
| zh-CN-XiaoyiNeural | 晓伊 - 亲切温柔(女声) | 中文 |
| zh-CN-YunyangNeural | 云扬 - 专业权威(男声) | 中文 |
| en-US-JennyNeural | Jenny - 自然流畅 | 英文 |
| ja-JP-NanamiNeural | Nanami - 甜美柔和 | 日文 |
| ko-KR-SunHiNeural | SunHi - 清晰明亮 | 韩文 |

四、低代码集成:Dify 平台使用教程

部署后的 TTS 服务可直接集成到 Dify 等低代码平台,无需编写代码即可实现文本转语音功能:

1. 模型配置

  1. 打开 Dify 控制台,进入「模型设置」
  2. 选择「OpenAI-API-compatible」,点击「添加模型」
  3. 配置参数:
    • 模型类型:TTS
    • 模型名称:自定义(如「Edge-TTS」)
    • API Key:填写 Cloudflare Worker 设置的API_KEY
    • API URL:填写 Worker 域名(如https://tts.example.com/v1)
    • 可用声音:填写支持的语音代码(如zh-CN-XiaoxiaoNeural,zh-CN-YunxiNeural)
  1. 点击「保存」完成配置

2. 搭建 TTS 工作流

  1. 新建工作流,添加「开始」节点,设置输入变量为「text」(待转换文本)
  2. 添加「Text To Speech」内置工具:
    • 输入变量:选择开始节点的「text」
    • 模型:选择已配置的「Edge-TTS」
    • 语音角色:选择目标音色
  1. 添加「直接回复」节点,输出类型选择「文件输出」
  2. 保存工作流并发布

五、注意事项与常见问题

1. 注意事项

  • 文本与语音语言需匹配(如中文语音仅支持中文文本),否则可能合成失败
  • 单条文本建议不超过 2000 字符,避免请求超时
  • 该服务仅供学习和个人使用,不建议用于商业项目
  • 基于 Cloudflare 免费计划,每天限制 10 万次请求,足够日常使用
相关推荐
yi碗汤园11 小时前
【一文了解】八大排序-插入排序、希尔排序
开发语言·算法·unity·c#·1024程序员节
小莞尔11 小时前
【51单片机】【protues仿真】基于51单片机智能温控风扇系统
c语言·单片机·嵌入式硬件·物联网·51单片机·1024程序员节
呆呆小金人11 小时前
Linux:开源时代的隐形基石
linux·1024程序员节
没有bug.的程序员11 小时前
Spring 常见问题与调试技巧
java·后端·spring·动态代理·1024程序员节
Han.miracle11 小时前
数据结构——排序的超级详解(Java版)
java·数据结构·学习·算法·leetcode·排序算法·1024程序员节
hazy1k11 小时前
51单片机基础-DS18B20温度传感器
c语言·stm32·单片机·嵌入式硬件·51单片机·1024程序员节
AI棒棒牛11 小时前
论文精读系列:Retinanet——目标检测领域中的SCI对比实验算法介绍!可一键跑通的对比实验,极大节省小伙伴的时间!!!
yolo·目标检测·计算机视觉·对比实验·1024程序员节·创新·rtdter
胜天半月子12 小时前
嵌入式开发 | C语言 | 单精度浮点数解疑--为什么规格化数中指数位E不能是E=0 或 E=255?
c语言·嵌入式c·1024程序员节·单精度浮点数范围