技术 / 架构与实现

09 TTS:分段、流控制、重试与MP3发布

基于 Android 1.0.2 / 1.0.2-trial · 2026-10-10 · 完整正文
正文分段 → 受控流 → 验证 → 合并正文分段 → 受控流 → 验证 → 合并否是失败split_text最多2000字符按空行合并/长段硬切当前part已存在?同任务固定文案与音色联网流写partial30s idle/120s本次总等待复用完成part不重新请求同段非空+FFprobe通过rename最终part,累计段进度异常则有限重试最多2次 · 1.5s/3s按序字节拼接MP3检查暂停取消 · pending输出探测后发布audio.mp3ready+实际duration
图9|受控语音流与片段复用。语音片段串行,网络流失败最多重试两次;完成片段发布后可供任务重试复用。小屏可横向滚动查看图示

语音请求链路

speech.synthesize接收任务正文、固定voice、任务目录、Control及progress/validate回调。默认factory为edge_tts.Communicate,每段调用Communicate(segment,voice).stream()。应用处理流中type=audio的字节,不保存WordBoundary/SentenceBoundary作为字幕。

应用分段以2000个Python字符为上限,按空行拆段并去段落首尾;短段合并时计入两个换行,超长段落直接每2000字符硬切,未做语义句末对齐。每个片段按顺序处理,语音内部没有并发池;图片准备与整个音频步骤并行是另一层调度。

参数/机制 实际实现 含义
应用分段上限 2000字符 与UI累计试用10000字符不是同一个概念
单段尝试次数 range(3) 首次请求+最多2次自动重试
重试退避 1.5秒、3秒 在等待期间仍尊重暂停/取消
无流事件时限 30秒 每次流事件重置idle,含元数据事件
单次总流等待 120秒 暂停时间不累计;不是整个任务120秒
控制检查 约0.1秒的asyncio等待循环 网络等待期间也可观察取消
最终片段 part-0000.mp3等 非空并probe成功后才rename
临时片段 part-0000.partial等 失败残片不成为成功分段
合并 按顺序直接连接MP3字节 没有重新编码、交叉淡化或自动补静音

已有part最终文件会跳过重请求,保证同一固定任务重试可复用完成段。合并逐块读取1MiB,检查Control,先写audio.pending.mp3,最终probe后replace成audio.mp3。最终ready状态保存audio_duration,后续图片时间轴使用这个实际媒体时长。

应用层与edge-tts库层

发布构建使用edge-tts7.2.3。库内部按字节限制切分SSML请求,并自动转义XML/生成voice与prosody;应用层2000字符段不保证只对应一条网络SSML。应用只传text与voice,不开放任意SSML、语速、音量或音调编辑。

构建库请求的音频格式为audio-24khz-48kbitrate-mono-mp3,上游WSS位于api.msedgeservices.com/tts/cognitiveservices。后续AAC192k/44.1k/stereo是容器制作参数,不能把源48kbit单声道语音升格为拥有更多原始信息的录音。多语言音色和语音质量最终取决于外部服务,源码无法证明其底层模型权重或全部语言行为。

本应用当前没有音频生成收费入口,不要求个人TTS API Key;edge-tts项目自身定位为使用Edge在线语音服务的Python接入。上游项目说明其联网方式;本文不据此承诺永久服务规则或访问权利。

媒体探测与进度

probe通过包内FFprobe,请求format duration及stream codec_type/width/height,30秒子进程时限;返回非零或duration≤0拒绝。它是有效媒体探测,不是每个采样/每帧完整解码扫描。音频百分比按completed/total段数计算,合并与验证没有确定百分比,网络消息包含等待秒数/接收KB。进度不承诺等比例剩余时间。

依据:speech.py:8–166、app.py:136–160及发布构建edge_tts源码快照。

把这些功能用到你的内容里。

免费试用、正式版优惠授权与招商合作:微信 wzqy2019。说明你需要配音、照片视频、PC或Android端,我们一起确定适合的使用方式。

合作从一次沟通开始

让你的内容制作,
找到合适的工作台。

免费试用、优惠授权、PC与Android版本、工作室及渠道合作意向,欢迎直接咨询。

打开微信,搜索 wzqy2019,添加时备注“听文合作”。具体授权、价格与合作政策以沟通为准;本站不收款。