基于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("音频生成失败。")

猜你喜欢

转载自blog.csdn.net/2301_76814617/article/details/141321443