Skip to content

q939055502/test-tts

Repository files navigation

Edge-TTS API 服务

一、简介

这是一个基于Flask和Edge-TTS的文本转语音API服务,支持多种中文语音模型和语速调整。Edge-TTS是微软基于其Edge浏览器内置的语音合成技术开发的免费开源库,提供业界领先的神经网络语音合成能力。

二、功能特点

  • RESTful API接口设计
  • 支持多种中文语音模型
  • 可自定义语速、音调和音量
  • 服务层和接口层分离
  • 支持流式语音输出
  • 支持SSML高级语音控制

三、项目结构

├── app.py                # Flask API接口层
├── tts_service.py        # TTS语音生成服务层
├── requirements.txt      # 项目依赖
├── .gitignore            # Git忽略文件配置
├── voice_samples/        # 语音样本文件目录
└── output/               # 生成的语音文件保存目录

四、快速开始

直接本地运行

  1. 安装依赖

    pip install -r requirements.txt
  2. 启动服务

    python app.py

五、安全机制

API服务包含以下安全机制,确保服务的安全访问:

API密钥认证

所有敏感接口(除首页和健康检查外)都需要通过API密钥认证。客户端需要在请求头中包含 X-API-Key 字段,值为有效的API密钥。

默认API密钥:4b7c9e2a-3d8f-5a1b-6c4d-7e8f9a0b1c2d(请在生产环境中更换)

IP白名单

可配置IP白名单,限制只有特定IP地址才能访问API。默认不限制IP(ALLOWED_IPS = [])。

配置方法

在生产环境中,建议:

  1. 从环境变量或配置文件中读取敏感配置
  2. 配置IP白名单,限制访问来源

六、API接口说明

1. 首页

  • URL: /
  • 方法: GET
  • 描述: 服务信息介绍
  • 返回: 服务版本和可用接口信息

2. 健康检查

  • URL: /api/health
  • 方法: GET
  • 描述: 检查服务是否正常运行
  • 返回: 服务状态信息

3. 获取可用语音列表

  • URL: /api/voices
  • 方法: GET
  • 描述: 获取所有可用的中文语音模型
  • 返回: 语音模型列表

4. 生成语音

  • URL: /api/tts
  • 方法: POST
  • 描述: 将文本转换为语音
  • 参数 (JSON):
    • text (必需): 要转换为语音的文本
    • voice (可选): 语音模型,默认为"zh-CN-YunxiNeural"
    • rate (可选): 语速,默认为"+0%"
  • 查询参数:
    • return_json=true: 设置为true时返回JSON结果,否则直接返回语音文件
  • 返回: 语音文件或JSON结果信息

5. 流式语音输出

  • URL: /api/tts/stream
  • 方法: POST
  • 描述: 流式输出语音数据
  • 参数 (JSON):
    • text (必需): 要转换为语音的文本
    • voice (可选): 语音模型,默认为"zh-CN-YunxiNeural"
    • rate (可选): 语速,默认为"+0%"
  • 返回: 流式音频数据

七、使用示例

获取语音列表

curl http://localhost:5001/api/voices

生成语音(返回文件)

curl -X POST -H "Content-Type: application/json" -d '{"text":"你好,这是一段测试文本"}' http://localhost:5001/api/tts --output output.mp3

生成语音(返回JSON)

curl -X POST -H "Content-Type: application/json" -d '{"text":"你好,这是一段测试文本", "voice":"zh-CN-YunyangNeural", "rate":"+10%"}' http://localhost:5001/api/tts?return_json=true

使用API密钥认证

curl -X POST http://localhost:5001/api/tts -H "X-API-Key: 4b7c9e2a-3d8f-5a1b-6c4d-7e8f9a0b1c2d" -H "Content-Type: application/json" -d '{"text": "你好,这是一段测试文本"}'

八、Edge-TTS 库详解

基本介绍

Edge-TTS 是微软基于其 Edge 浏览器内置的语音合成技术开发的免费开源库,提供业界领先的神经网络语音合成能力。它允许开发者将文本转换为自然流畅的语音,支持多种语言和声音选择。

命令行参数

Edge-TTS 提供了丰富的命令行参数,用于控制语音合成的各个方面:

参数 简写 说明 示例
--text -t 要转换的文本内容 --text "你好,世界!"
--write-media -f 输出的音频文件名 --write-media output.mp3
--voice -v 选择语音模型 --voice zh-CN-XiaoxiaoNeural
--rate -r 语速调节(百分比) --rate "+10%"--rate "-50%"
--volume 音量调节(百分比) --volume "+20%"
--pitch 音调调节(百分比) --pitch "+5%"
--write-subtitles 输出字幕文件 --write-subtitles output.vtt
--list-voices -l 列出所有可用的语音模型 --list-voices

Python 代码调用

基础用法:文本转 MP3 文件

import asyncio
from edge_tts import Communicate

async def text_to_speech():
    # 创建 Communicate 对象
    communicate = Communicate(
        text="微软Edge TTS提供卓越的语音合成体验",
        voice="zh-CN-XiaoxiaoNeural",  # 选择语音
        rate="+10%",  # 语速调整
        volume="+0%"  # 音量调整
    )
    
    # 保存为 MP3 文件
    await communicate.save("output.mp3")

# 运行异步函数
asyncio.run(text_to_speech())

实时语音流播放

import asyncio
from edge_tts import Communicate

async def live_tts():
    communicate = Communicate(
        text="正在实时播放合成语音",
        voice="zh-CN-YunxiNeural"
    )
    
    # 流式获取音频数据
    async for chunk in communicate.stream():
        if chunk["type"] == "audio":
            # 此处可连接音频设备实时输出音频数据
            pass
        elif chunk["type"] == "WordBoundary":
            # 处理单词边界事件
            print(f"单词边界: {chunk['offset']}ms")

asyncio.run(live_tts())

高级功能:SSML 支持

Edge-TTS 支持 Speech Synthesis Markup Language (SSML),允许更精细地控制语音合成过程:

import asyncio
from edge_tts import Communicate

async def ssml_example():
    ssml_text = """
    <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
        <voice name="zh-CN-XiaoxiaoNeural">
            这是正常语速的文本。
            <break time="500ms"/>
            这是暂停了500毫秒后的文本。
            <prosody rate="+30%">这是加速30%的文本。</prosody>
            <prosody volume="+20%">这是音量增加20%的文本。</prosody>
            <prosody pitch="+10%">这是音调提高10%的文本。</prosody>
        </voice>
    </speak>
    """
    
    communicate = Communicate(text=ssml_text, voice="zh-CN-XiaoxiaoNeural")
    await communicate.save("ssml_output.mp3")

asyncio.run(ssml_example())

最佳实践

  1. 处理长文本:对于较长的文本,建议分段处理,避免一次性生成过长的音频文件

  2. 错误处理:在实际应用中,应考虑网络问题和 API 调用失败的情况,添加相应的错误处理逻辑

  3. 选择合适的语音和语速:根据应用场景和用户需求,选择最合适的语音和语速,以提高用户体验

  4. 性能优化

    • 使用异步操作避免阻塞主线程
    • 对于需要多次合成的场景,可以复用 Communicate 对象

九、可用中文语音模型列表

"Multilingual" 标识:表示该语音可能支持多语言合成(如中英混合发音),但核心仍为中文语音。

Name Gender VoicePersonalities
wuu-CN-XiaotongNeural Female Warm, Friendly, Soothing
wuu-CN-YunzheNeural Male Calm, Deep, Gentle
yue-CN-XiaoMinNeural Female Bright, Crisp, Confident
yue-CN-YunSongNeural Male Deep, Calm, Formal
zh-CN-XiaochenMultilingualNeural Female Friendly, Casual, Upbeat
zh-CN-XiaochenNeural Female Friendly, Casual, Upbeat
zh-CN-XiaohanNeural Female Gentle, Warm, Emotional
zh-CN-XiaomengNeural Female Gentle, Upbeat, Friendly
zh-CN-XiaomoNeural Female Deep, Casual, Calm
zh-CN-XiaoqiuNeural Female Calm, Engaging, Soothing
zh-CN-XiaorouNeural Female Cheerful, Engaging, Pleasant
zh-CN-XiaoruiNeural Female Confident, Emotional, Hoarse
zh-CN-XiaoshuangNeural Female Crisp, Cheerful, Bright
zh-CN-XiaoxiaoDialectsNeural Female Warm, Animated, Bright
zh-CN-XiaoxiaoMultilingualNeural Female Warm, Animated, Bright
zh-CN-XiaoxiaoNeural Female Warm, Well-Rounded, Animated
zh-CN-XiaoyanNeural Female Warm, Gentle, Empathetic
zh-CN-XiaoyiNeural Female Bright, Emotional, Engaging
zh-CN-XiaoyouNeural Female Crisp, Cheerful, Bright
zh-CN-XiaoyuMultilingualNeural Female Deep, Confident, Casual
zh-CN-XiaozhenNeural Female Calm, Serious, Confident
zh-CN-YunfengNeural Male Confident, Animated, Emotional
zh-CN-YunhaoNeural Male Warm, Soft, Upbeat
zh-CN-YunjianNeural Male Deep, Casual, Engaging
zh-CN-YunjieNeural Male Casual, Confident, Warm
zh-CN-YunxiNeural Male Bright, Animated, Cheerful
zh-CN-YunxiaNeural Male Cheerful, Friendly, Emotional
zh-CN-YunxiaoMultilingualNeural Male Gentle, Casual, Friendly
zh-CN-YunyangNeural Male Formal, Deep, Calm
zh-CN-YunyeNeural Male Casual, Deep, Calm
zh-CN-YunyiMultilingualNeural Male Gentle, Casual, Friendly
zh-CN-YunzeNeural Male Deep, Confident, Formal
zh-CN-henan-YundengNeural Male Casual, Friendly, Animated
zh-CN-liaoning-XiaobeiNeural Female Friendly, Casual, Gentle
zh-CN-shaanxi-XiaoniNeural Female Confident, Engaging, Casual
zh-CN-shandong-YunxiangNeural Male Casual, Animated, Strong
zh-CN-sichuan-YunxiNeural Male Casual, Animated, Gentle
zh-HK-HiuGaaiNeural Female Crisp, Bright, Clear
zh-HK-HiuMaanNeural Female Bright, Upbeat
zh-HK-WanLungNeural Male Calm, Formal
zh-TW-HsiaoChenNeural Female Soft, Caring
zh-TW-HsiaoYuNeural Female Crisp, Bright, Clear
zh-TW-YunJheNeural Male Engaging, Gentle

十、常见问题

  1. 服务启动后无法访问

    • 检查服务绑定的IP和端口是否正确
    • 确认防火墙设置是否允许相应端口的访问
  2. 生成语音失败

    • 检查网络连接是否正常(Edge-TTS需要连接Microsoft服务器)
    • 验证语音模型是否正确
  3. 如何修改服务端口

    • 修改app.py中的app.run(host='0.0.0.0', port=5001, debug=True)语句中的port参数
  4. 生成的音频文件没有声音

    • 检查文本内容是否为空,或尝试调整音量参数
  5. 语音合成失败或超时

    • 检查网络连接,或尝试将长文本分成多个较短的部分

十一、注意事项

  • 当前配置适用于开发环境,生产环境建议使用WSGI服务器如Gunicorn或uWSGI
  • 生产环境应关闭debug模式
  • 根据项目的 requirements.txt,当前版本要求 edge-tts>=6.1.4,并且支持 Python 3.9 或更高版本

十二、应用场景

  • 在线教育平台:将课程内容转换为语音,帮助学生更好地理解和记忆知识点
  • 智能客服系统:将自动生成的回复转换为语音,提供更加人性化的交互体验
  • 无障碍应用:为视觉障碍用户提供文本内容的语音朗读功能
  • 内容创作工具:为视频、动画等多媒体内容添加配音

文档更新时间:2024年7月

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors