python edge-tts实现tts文本转语音、音频

文章目录

实现tts有多种方式,这里用的是微软edge(浏览器那个公司)的edge-tts。
因为非页面版不支持ssml,所以精确的控制做不到,但是可以实现基本的文本转云因。

edge-tts实现

这里用的是edge-tts来实现的。

通用部分-安装依赖

复制代码
pip install edge_tts
pip install asyncio

生成不使用标签的音频

代码:

py 复制代码
import asyncio
import edge_tts


# 定义文本转语音的异步函数
async def text_to_speech(text, output_file="output.mp3", voice="zh-CN-XiaoyiNeural", rate="+0%", volume="+0%"):
    """
    将文本转为语音并保存为 MP3 文件
    :param text: 要转换的文本内容
    :param output_file: 输出音频文件路径
    :param voice: 语音音色(支持的音色列表可通过 edge-tts --list-voices 命令查看)
    :param rate: 语速(+0% 为默认,+50% 加快,-50% 减慢)
    :param volume: 音量(+0% 为默认,范围 -100% 到 +100%)
    """
    try:
        # 创建 TTS 通信对象
        communicate = edge_tts.Communicate(
            text=text,
            voice=voice,
            rate=rate,
            volume=volume
        )
        # 将语音流保存到文件
        await communicate.save(output_file)
        print(f"语音文件已保存至:{output_file}")
    except Exception as e:
        print(f"转换失败:{e}")


# 主函数
if __name__ == "__main__":
    # 要转换的文本内容
    text_content = "你好,这是使用 edge_tts 实现的文本转语音示例,支持自定义音色和语速。"

    # 调用异步函数
    asyncio.run(text_to_speech(
        text=text_content,
        output_file="my_voice.mp3",
        voice="zh-CN-YunxiNeural",  # 云希(男),也可换为 zh-CN-XiaoyiNeural(晓伊,女)
        rate="+10%",  # 语速加快 10%
        volume="+0%"  # 音量默认
    ))

实测没问题,生成了mp3且播放没问题。

生成使用标签的音频(有问题 todo)

代码:

csharp 复制代码
import asyncio
import edge_tts

async def text_to_speech_with_rhythm(output_file="rhythm_voice.mp3"):
    """
    Win11 适配版:带抑扬顿挫的文本转语音(修复 SSML 解析问题)
    """
    # 精简 SSML 格式(移除多余换行/空格,确保 Win11 下解析正常)
    ssml_text = """
    <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="zh-CN">
        <prosody rate="+5%" pitch="0Hz" volume="0%">你好,</prosody>
        <break time="100ms"/>
        <prosody rate="-10%" pitch="+8Hz" volume="+5%">这是使用 edge_tts 实现的</prosody>
        <break time="80ms"/>
        <prosody rate="-15%" pitch="+12Hz" volume="+8%">抑扬顿挫的语音示例,</prosody>
        <break time="150ms"/>
        <prosody rate="0%" pitch="-2Hz" volume="0%">支持自定义音色、语速和音调。</prosody>
    </speak>
    """
    # 去除 SSML 文本中的多余空格和换行(关键:避免 Win11 下解析异常)
    ssml_text = "".join([line.strip() for line in ssml_text.splitlines() if line.strip()])

    try:
        # Win11 下强制指定编码和协议,提升兼容性
        communicate = edge_tts.Communicate(
            text=ssml_text,
            voice="zh-CN-XiaoyiNeural",  # Win11 自带的晓伊音色,兼容性最好
            proxy=None  # Win11 无需代理,避免干扰
        )
        # 保存音频(Win11 下指定绝对路径更稳定,示例用相对路径)
        await communicate.save(output_file)
        print(f"✅ 语音生成成功!文件路径:{output_file}")
        print(f"📌 可直接在 Win11 中双击 {output_file} 播放")
    except Exception as e:
        print(f"❌ 转换失败:{e}")
        # Win11 下常见错误提示
        if "Connection" in str(e):
            print("💡 建议:检查网络,Win11 需联网调用微软 TTS 服务")
        if "Invalid" in str(e):
            print("💡 建议:确认 SSML 格式无误,或更换音色(如 zh-CN-YunxiNeural)")

if __name__ == "__main__":
    # Win11 下异步运行(兼容 Python 3.8+)
    asyncio.run(text_to_speech_with_rhythm())

实测有问题,会连speak标签一起读出来,期待的效果是不读speak标签,只读标签里面的内容。

相关推荐
Decay__1 天前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
代码山河1 天前
Python就业方向全解析:后端、爬虫、数据分析、AI你选哪个?
python·学习·架构·教程·面向对象·项目
在世修行1 天前
智学文枢:题目流水线
python·多线程·状态机·pyside
voipmaker1 天前
GB28181 对接踩坑实录:注册不上、目录不全、流卡顿,一次说清(附 2022 版变更清单)
物联网·音视频·实时音视频·信息与通信·iot·gb28181·国标gb28181
梯度下降者1 天前
零基础入门Python 爬虫
爬虫·python·数据分析·入门指南·webcrawler
小徐不徐说1 天前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
2601_958352901 天前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
2601_965448871 天前
AI视频制作:做系列历史人物视频音色不搭,AI 音色克隆的方法实测
人工智能·音视频
码上观世界1 天前
多余的一声「嗯」:Fun-CosyVoice3 zero_shot 开头伪影排查实录
音视频
“AI国潮设计-小江”1 天前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc