import asyncio
import datetime
import edge_tts
from pathlib import Path
def textToVoice(text):
output_file = None
# 内部定义异步函数
async def _amain():
nonlocal output_file
VOICE = "zh-CN-YunxiNeural" # zh-CN-YunxiNeural zh-CN-XiaoxiaoNeural
RATE = "+5%" # 调整语速
communicate = edge_tts.Communicate(text, VOICE, rate=RATE)
# 输出文件名 %Y%m%d_%H%M%S
output_file = datetime.datetime.now().strftime("%m%d_%H%M%S") + ".mp3"
try:
with open(output_file, "wb") as file:
async for chunk in communicate.stream():
if chunk["type"] == "audio":
file.write(chunk["data"])
elif chunk["type"] == "WordBoundary":
# print(f"WordBoundary: {chunk}")
pass
# 确保文件已正确创建并且有内容
if Path(output_file).stat().st_size > 0:
return output_file
else:
# print("File is empty.")
return None
except Exception as e:
# print(f"An error occurred: {e}")
return None
# 使用 asyncio.run 来运行异步函数,对外表现为同步调用
return asyncio.run(_amain())
if __name__ == "__main__":
# pass
# 文字转音频文件
bool = textToVoice('在当今快速变化的世界中,大学生的职业生涯规划变得前所未有的重要。')
if bool is None:
print('文字转语音失败')
else:
print(bool)