基于python3实现文本转语音,微软开源EdgeTTS

今天为大家介绍一款功能强大的开源语音合成(TTS)项目——EdgeTTS。相比于其他语音合成工具(如ChatTTS),EdgeTTS 对新手用户更加友好。

EdgeTTS 的底层依赖于微软 Edge 的在线语音合成服务,无需下载任何模型,甚至不需要提供 API 密钥,使用体验非常简便。

不仅如此,EdgeTTS 支持多种语言和口音,包括普通话、粤语、台湾口音、陕西话、东北话等,这使得它在语音合成的多样性和灵活性上遥遥领先。

EdgeTTS 的优势不仅在于易用性,更在于它提供了丰富的语音选择,满足了不同用户的需求。无论是技术专家还是初学者,都可以轻松上手,快速生成高质量的语音输出。赶紧开始实操,体验一下它的强大功能吧!

项目地址在GitHub上,更多官方例子请自行去查看

GitHub - rany2/edge-tts: Use Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key

1、先安装依赖

pip install edge_tts
pip install loguru

2、代码演示

from edge_tts import Communicate
import subprocess
import math
from loguru import logger
import asyncio


async def text_to_voice(text, save_file, people='zh-CN-XiaoxiaoNeural'):
    """
    将文本转换为语音,并返回音频的时长。

    参数:
    text (str): 需要转换为语音的文本。
    save_file (str): 音频保存的文件路径。
    people (str): 使用的语音。默认为 'zh-CN-XiaoxiaoNeural'。
                  可用语音选项:
                  - 'zh-CN-XiaoxiaoNeural'(女性,推荐)
                  - 'zh-CN-XiaoyiNeural'(女性)
                  - 'zh-CN-YunjianNeural'(男性)
                  - 'zh-CN-YunxiNeural'(男性)
                  - 'zh-CN-YunxiaNeural'(男性)
                  - 'zh-CN-YunyangNeural'(男性,推荐)

    返回:
    int: 音频的时长(秒),向上取整。
    None: 如果处理过程中发生错误。
    """
    rate = "+0%"  # 语速调整
    volume = "+0%"  # 音量调整

    # 创建 Communicate 对象
    communicate = Communicate(text, people, rate=rate, volume=volume)

    try:
        # 保存为音频文件
        await communicate.save(save_file)

        # 获取音频文件的时长
        command = [
            "ffprobe",
            "-v", "error",
            "-show_entries", "format=duration",
            "-of", "default=noprint_wrappers=1:nokey=1",
            save_file
        ]
        result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        duration = math.ceil(float(result.stdout.decode().strip()))
        return duration
    except Exception as e:
        # 处理异常
        logger.error(f"保存文件或获取时长时发生错误: {e}")
        return None


# 运行测试
if __name__ == "__main__":
    text = "这是一个测试文本。"
    save_file = "output_audio.mp3"
    total_time = asyncio.run(text_to_voice(text, save_file))
    if total_time is not None:
        logger.info(f"音频生成成功,时长为 {total_time} 秒。")
    else:
        logger.info("音频生成失败。")

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值