edgeTTS流式合成音频
安装依赖
sh
pip install edge-tts流式处理的代码
示例代码
py
import os
import asyncio
import edge_tts
async def tts(
text, output_path, voice: str = "zh-CN-XiaoxiaoNeural", progress_callback=None
):
"""
使用Edge TTS生成音频
text: 要转换的文本
output_path: 输出音频路径
voice: 语音
progress_callback: 进度回调函数,接收已处理的字节数、总字节数和进度百分比
"""
# 确保输出目录存在
output_dir = os.path.dirname(output_path)
if output_dir:
os.makedirs(output_dir, exist_ok=True)
# 简单预估总字节数(基于文本长度,不需要调用edge_tts)
# 这是一个粗略的估算,每个字符约1600字节
estimated_bytes_per_char = 1600 # 每个字符预估的字节数
total_bytes = len(text) * estimated_bytes_per_char
# 初始化通信对象
communicate = edge_tts.Communicate(text, voice)
# 用于跟踪进度的变量
processed_bytes = 0
# 打开输出文件
with open(output_path, "wb") as f:
# 使用流式处理
async for chunk in communicate.stream():
if chunk["type"] == "audio":
# 写入音频数据
f.write(chunk["data"])
# 更新已处理字节数
processed_bytes += len(chunk["data"])
# 如果提供了回调函数,则调用它
if progress_callback:
process = int(processed_bytes / total_bytes * 100)
if process > 99:
process = 99
await progress_callback(processed_bytes, total_bytes, process)
elif chunk["type"] == "WordBoundary":
# 可以在这里处理单词边界事件,用于更精确的进度跟踪
pass
if progress_callback:
await progress_callback(processed_bytes, total_bytes, 100)
return output_path
async def progress_callback(processed_bytes, total_bytes, process):
print(
f"已处理 {processed_bytes} 字节,总字节数 {total_bytes},进度 {process}%"
)
text = """
南宁南湖作为国家AAAA级旅游景区,是南宁市打造「中国绿城」的核心生态地标。
本次展示将系统解析这座占地93公顷的城市中央公园,涵盖唐代水利遗址背景、生态修复技术体系、特色景观构成及智慧化建设路径。
采用「历史-空间-功能」三维框架,通过航拍实景、水质监测热力图等15组可视化素材,呈现从农耕水利工程到现代城市生态综合体的千年演变。
重点突出其作为首府「城市会客厅」的定位,以及在中国-东盟园林艺术交流中的文化窗口价值,为后续深度解读建立认知锚点。
南湖占据南宁地理中心,东连东盟商务区天际线,西接古城路历史建筑群,地铁1/3号线双轨交汇形成高效到达系统。
公园呈南北轴向带状布局,水域面积58.7万平方米,与青秀山构成「山湖辉映」的城市景观主轴。
作为住建部海绵城市重点示范项目,集成雨水花园、生态滤池等7大系统,实现12.8平方公里汇水区的径流控制。
2023年监测数据显示,环湖智能步道日均服务健身人群1.8万人次,89%受访市民将其列为「15分钟生活圈」核心休闲节点。
南湖历史可追溯至唐景云元年(710年)的邕州水利工程,现存唐代堤坝遗址3处。
1950年代扩建为城市公园,2016年投入2.3亿元实施水质生态治理,透明度从0.3m提升至1.5m。
现存历史遗存包含清代九孔石桥、韦拔群李明瑞烈士纪念馆等红色教育基地,以及1980年代建设的首代观景平台。
公园档案室珍藏1958-2023年间建设图纸126份,完整记录从农业灌溉水系到现代生态公园的转型历程,见证南宁城市发展的关键阶段。
"""
async def main():
await tts(
text=text,
output_path="test.mp3",
progress_callback=progress_callback,
)
if __name__ == "__main__":
asyncio.run(main())非流式处理的代码
示例代码
python
import os
import edge_tts
async def tts(text, output_path, voice: str = "zh-CN-XiaoxiaoNeural"):
"""
使用Edge TTS生成音频
text: 要转换的文本
output_path: 输出音频路径
"""
# # 确保输出目录存在
output_dir = os.path.dirname(output_path)
if output_dir:
os.makedirs(output_dir, exist_ok=True)
# 合成语音并保存到文件
await edge_tts.Communicate(text, voice).save(output_path)
return output_path