今天为大家介绍一款功能强大的开源语音合成(TTS)项目——EdgeTTS。相比于其他语音合成工具(如ChatTTS),EdgeTTS 对新手用户更加友好。
EdgeTTS 的底层依赖于微软 Edge 的在线语音合成服务,无需下载任何模型,甚至不需要提供 API 密钥,使用体验非常简便。
不仅如此,EdgeTTS 支持多种语言和口音,包括普通话、粤语、台湾口音、陕西话、东北话等,这使得它在语音合成的多样性和灵活性上遥遥领先。
EdgeTTS 的优势不仅在于易用性,更在于它提供了丰富的语音选择,满足了不同用户的需求。无论是技术专家还是初学者,都可以轻松上手,快速生成高质量的语音输出。赶紧开始实操,体验一下它的强大功能吧!
项目地址在GitHub上,更多官方例子请自行去查看
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("音频生成失败。")