office / utils /tts_utils.py
PerrinT94
初始化:办公工具平台
3373b3e
Raw History Blame Contribute Delete
1.74 kB
import re
def generate_tts_script(text, speed="normal", add_pauses=True, add_emphasis=True):
"""生成带停顿和标记的朗读脚本"""
lines = text.strip().split("\n")
result_lines = []
for line in lines:
line = line.strip()
if not line:
if add_pauses:
result_lines.append("[停顿 0.5秒]")
continue
# 检测标题行(数字开头或全大写或短行)
is_title = (
re.match(r'^[\d一二三四五六七八九十]+[、..)\s]', line)
or (len(line) <= 15 and not line.endswith(("。", ",", ";", "!", "?")))
)
if is_title and add_emphasis:
result_lines.append(f"[强调] {line} [/强调]")
if add_pauses:
result_lines.append("[停顿 1秒]")
continue
# 处理标点停顿
processed = line
if add_pauses:
processed = processed.replace("。", "。[停顿 0.3秒]")
processed = processed.replace("!", "![停顿 0.3秒]")
processed = processed.replace("?", "?[停顿 0.3秒]")
processed = processed.replace(";", ";[停顿 0.2秒]")
# 检测数字和英文,标记需放慢
if add_emphasis:
processed = re.sub(
r'(\d+(?:\.\d+)?(?:%|万|亿|元|个|条|项|次|天|年|月|日)?)',
r'[\1]',
processed
)
result_lines.append(processed)
script = "\n".join(result_lines)
# 添加头部说明
speed_map = {"slow": "慢速", "normal": "正常", "fast": "快速"}
header = f"[语速: {speed_map.get(speed, speed)}]\n\n"
return header + script