当前位置: 首页 > news >正文

语音播报 文字转语音 edge_tts

推理队列封装

import asyncio import edge_tts import time from threading import Thread from queue import Queue, Empty import os def tts_sync_stream(text, voice="zh-CN-XiaoxiaoNeural"): """同步流式生成(内部用 async)""" async def _run(): communicate = edge_tts.Communicate(text, voice) audio_chunks = [] first_chunk_time = None start_time = time.time() chunk_count = 0 async for chunk in communicate.stream(): if chunk["type"] == "audio": chunk_count += 1 if first_chunk_time is None: first_chunk_time = time.time() - start_time audio_chunks.append(chunk["data"]) total_time = time.time() - start_time return audio_chunks, first_chunk_time, total_time, chunk_count return asyncio.run(_run()) # ================== Worker ================== def worker(queue: Queue, out_dir="output"): os.makedirs(out_dir, exist_ok=True) while True: try: text, idx = queue.get(timeout=1) except Empty: break print(f"\n🎙 开始合成: {text}") audio_chunks, ttfb, total_time, chunk_count = tts_sync_stream(text) # 保存音频 output_path = os.path.join(out_dir, f"out_{idx:02d}.mp3") with open(output_path, "wb") as f: for c in audio_chunks: f.write(c) # 估算音频时长(简单估计) audio_size = sum(len(c) for c in audio_chunks) audio_duration = audio_size / (16000 * 2) # 粗略估计(16k 16bit) rtf = total_time / audio_duration if audio_duration > 0 else 0 print(f"💾 保存: {output_path}") print(f"TTFB: {ttfb:.3f}s | Total: {total_time:.3f}s | RTF: {rtf:.3f} | chunks: {chunk_count}") if __name__ == "__main__": texts = [ "繁荣的商务区如金融街", "完善的城市基础设施", "服务业是主要经济支柱之一", "这里有兵马俑", "曾举办过2008年夏季奥运会", "北京是一座兼具悠久历史", "深厚文化底蕴和现代化城市功能的国际化大都市", ] queue = Queue() for i, t in enumerate(texts): queue.put((t, i)) start_all = time.time() # 单 worker(你要测纯推理速度) t = Thread(target=worker, args=(queue,)) t.start() t.join() print("\n 总耗时:", time.time() - start_all)

推理耗时20s。

http://www.jsqmd.com/news/560993/

相关文章:

  • AI插件(AI-Plugin)与AI原生(AI-Native)比较分析
  • 毕业季救星来了!百考通AI:你的全流程智能学术伙伴
  • 西电B测:基于SystemView的2PSK调制解调全流程仿真解析
  • 探索heltec_esp32_lora_v3:革新低功耗物联网的LoRa通信全解析方案
  • 3步终极指南:在Visual Studio中高效使用GitHub扩展
  • 无人机巡检市场热门之选,2026年这些企业受青睐,国内可靠的无人机巡检厂家聚焦技术实力与行业适配性 - 品牌推荐师
  • Win11与Ubuntu20.04双系统安装全攻略:从U盘启动到分区优化
  • 别再死记公式了!用Python的SymPy库5分钟搞定雅可比矩阵计算(附机器人学实例)
  • 【Matlab】MATLAB教程:非线性拟合lsqcurvefit(案例:拟合指数函数;应用:非线性数据建模)
  • 监控与安防系统安装:从方案设计到落地运维的一站式技术指南
  • 2026年电子景区票务系统厂家推荐:智慧景区票务系统/景区门票分销系统/游乐场管理系统专业选型指南 - 品牌推荐官
  • 2026凤凰职教靠谱吗?江苏职教培训口碑调查 - 品牌排行榜
  • Gemma-3 Pixel Studio应用场景:在线教育平台课件图智能讲解生成器
  • 别再手动复制粘贴了!用XWPFTemplate + SpringBoot 5分钟搞定Word报告自动生成
  • 3个步骤实现教育资源高效获取:电子教材下载工具全攻略
  • 无人机空气动力学:从翼型优化到智能控制的全面解析
  • YOLOv8/v5目标检测框自适应攻略:根据图像分辨率智能调整线条粗细(Ultralytics实战)
  • 行业深度解析:2026年中国充电桩行业十大品牌介绍—郑州叮叮智能 - 深度智识库
  • 用树莓派Zero 2W和Qt5打造你的第一个工业控制面板(附完整源码)
  • HARMONYOS应用实例246:互动七巧板拼图
  • OpenKore:仙境传说游戏自动化助手完全指南
  • 音视频开发必知:MP4文件结构解析与常见Box类型详解
  • C# WinForm项目实战:用ZXing.Net生成可微信扫码的一维码和带Logo的二维码
  • 【Matlab】分布式光伏并网谐波抑制程序实现
  • HARMONYOS应用实例247:七巧板拼图
  • 2026口碑好的雅思听力线上辅导课程推荐 - 品牌2025
  • 用MATLAB复现OTFS:从DD域网格到误码率曲线,手把手跑通仿真流程
  • 告别文件查找烦恼:打造Windows任务栏极速搜索体验
  • 其他弱电系统安装:从方案设计到落地施工的完整指南
  • Docker 安装 Portainer(Docker 容器管理工具)