# VoiceCraft-Edge-TTS **Repository Path**: web/voice-craft-edge-tts ## Basic Information - **Project Name**: VoiceCraft-Edge-TTS - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-09 - **Last Updated**: 2026-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Edge-TTS PHP 文字转语音服务 基于 PHP 5.6+ 实现的 Edge-TTS 文字转语音服务,提供 RESTful API 接口,兼容 OpenAI `/v1/audio/speech` 规范。 ## 功能特点 - ✅ 支持 Microsoft Edge TTS 语音合成 - ✅ 提供 RESTful API 接口 - ✅ 兼容 OpenAI `/v1/audio/speech` 规范 - ✅ 支持多种语音风格和参数调节 - ✅ 支持 Bearer Token 认证(可选) - ✅ 内置中文测试页面 - ✅ 支持文本文件上传转换 ## 环境要求 - PHP 5.6 或更高版本 - cURL 扩展 - OpenSSL 扩展 ## 安装配置 ### 1. 下载项目 ```bash git clone cd voice-craft-edge-tts ``` ### 2. 配置认证(可选) 编辑 `index.php` 文件,设置允许的 Bearer Token: ```php // 配置允许的Bearer Token(为空数组则不启用认证) $ALLOWED_TOKENS = array( 'your-secret-token-here' ); ``` 如果 `$ALLOWED_TOKENS` 为空数组,则 API 不启用认证。 ### 3. 配置 Web 服务器 **Apache 配置示例:** ```apache Options +FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L] ``` **Nginx 配置示例:** ```nginx location / { // …..省略部分代码 if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; } } ``` ## API 接口文档 ### 1. 语音合成接口 **POST** `/v1/audio/speech` 将文本转换为语音音频。 #### 请求参数 | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | input | string | 是 | - | 要转换的文本内容 | | text | string | 否 | - | input 的别名,兼容旧版本 | | voice | string | 否 | zh-CN-XiaoxiaoNeural | 语音名称 | | speed | float | 否 | 1.0 | 语速,范围 0.5-2.0 | | volume | float | 否 | 0 | 音量,范围 -1.0 到 1.0 | | pitch | int | 否 | 0 | 音调,范围 -100 到 100 | | style | string | 否 | general | 语音风格 | #### 语音风格列表 | 风格名称 | 说明 | |----------|------| | general | 通用风格 | | assistant | 智能助手 | | chat | 聊天对话 | | customerservice | 客服专业 | | newscast | 新闻播报 | | affectionate | 亲切温暖 | | calm | 平静舒缓 | | cheerful | 愉快欢乐 | | gentle | 温和柔美 | | lyrical | 抒情诗意 | | serious | 严肃正式 | #### 示例请求 ```bash curl -X POST http://localhost/v1/audio/speech \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your-token" \ -d '{ "input": "你好,欢迎使用 Edge-TTS 语音合成服务。", "voice": "zh-CN-XiaoxiaoNeural", "speed": 1.0, "style": "general" }' ``` #### 响应 成功时返回 MP3 音频文件(Content-Type: audio/mpeg)。 失败时返回 JSON 错误信息: ```json { "error": { "message": "错误描述", "type": "api_error", "code": "error_code" } } ``` ### 2. 获取语音列表 **GET** `/v1/audio/voices` 获取所有可用的语音列表。 #### 请求示例 ```bash curl http://localhost/v1/audio/voices \ -H "Authorization: Bearer your-token" ``` #### 响应示例 ```json [ { "Name": "zh-CN-XiaoxiaoNeural", "DisplayName": "晓晓", "LocalName": "晓晓", "Gender": "Female", "Locale": "zh-CN", "Language": "zh-CN" } ] ``` ### 3. 保存音频文件 **POST** `/v1/audio/save` 将文本转换为语音并保存到服务器(需要配置保存目录)。 #### 请求参数 | 参数 | 类型 | 必填 | 默认值 | 说明 | |------|------|------|--------|------| | input | string | 是 | - | 要转换的文本内容 | | filename | string | 否 | auto | 保存的文件名 | | voice | string | 否 | zh-CN-XiaoxiaoNeural | 语音名称 | | speed | float | 否 | 1.0 | 语速 | #### 响应示例 ```json { "success": true, "filename": "speech_1234567890.mp3", "path": "audio/speech_1234567890.mp3" } ``` ## 测试页面 访问根路径 `http://localhost/` 即可打开中文测试页面,支持: - 文本输入和文件上传 - 语音选择(20+ 种语音) - 语速、音调、风格调节 - 实时语音合成和播放 - 音频下载功能 ## 使用示例 ### PHP 调用示例 ```php require_once 'EdgeTTS.class.php'; $edgeTTS = new EdgeTTS(); // 合成语音 $audioData = $edgeTTS->synthesize( '你好世界', 'zh-CN-XiaoxiaoNeural', '+0%', // 语速 '+0%', // 音量 '+0Hz', // 音调 'general' // 风格 ); // 保存到文件 file_put_contents('output.mp3', $audioData); ``` ### JavaScript 调用示例 ```javascript async function synthesizeSpeech(text, voice = 'zh-CN-XiaoxiaoNeural') { const response = await fetch('/v1/audio/speech', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer your-token' }, body: JSON.stringify({ input: text, voice: voice, speed: 1.0, style: 'general' }) }); if (!response.ok) { const error = await response.json(); throw new Error(error.error.message); } const blob = await response.blob(); return URL.createObjectURL(blob); } // 使用 synthesizeSpeech('你好世界').then(url => { const audio = new Audio(url); audio.play(); }); ``` ## 参考项目 本项目参考了以下开源项目: - **Edge-TTS**:https://github.com/TT3301/Edge-TTS ## 注意事项 1. **网络要求**:服务器需要能够访问外部 HTTPS 站点(dev.microsofttranslator.com 和 speech.platform.bing.com) 2. **Token 缓存**:系统会自动缓存获取的 token,有效期约 10 分钟 3. **文本长度限制**:建议单次请求文本不超过 2000 字符 4. **请求频率**:请合理控制请求频率,避免被限流 5. **SSL 证书**:建议使用 HTTPS 协议以保证数据安全 ## 许可证 MIT License ## 免责声明 本项目仅供学习和研究使用,请遵守相关服务条款和法律法规。