跳转到主要内容
语音合成

LaTeX 公式转语音(仅支持中文)

将数学公式转为自然语音

CosyVoice 可以将文本中的数学公式转换为自然语音,适用于有声书、在线教育等数理类音频内容场景。
该功能仅支持中文,其他语言可能无法正确朗读公式。

使用步骤

用指定的分隔符包裹文本中的公式,然后调用语音合成 API。
1

用分隔符标记公式

用以下任意分隔符包裹公式(效果相同):
  • $...$
  • $$...$$
  • \(...\)
  • \[...\]
示例:
这是一元二次方程的求根公式:$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$,请仔细计算。
2

调用 API 合成语音

调用语音合成 API,传入标记好公式的文本。在 JSON 或字符串中,反斜杠(\)是转义字符,需要写成 \\Python 调用示例:
# coding=utf-8

import os
import dashscope
from dashscope.audio.tts_v2 import *

# 设置 API Key(格式:sk-xxx)。如未设置环境变量,取消下一行的注释:
# dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

dashscope.base_websocket_api_url='wss://dashscope.aliyuncs.com/api-ws/v1/inference'

# 模型
model = "cosyvoice-v3-flash"
# 音色(需与模型版本兼容)
#   cosyvoice-v3-flash/plus: longanyang 等
voice = "longanyang"

# 使用指定模型和音色创建合成器
synthesizer = SpeechSynthesizer(model=model, voice=voice)
# 发送文本,获取音频二进制数据
audio = synthesizer.call("这是一元二次方程的求根公式:$x = \\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}$,请仔细计算。")
# 首次请求包含 WebSocket 连接建立时间
print('[Metric] requestId: {}, first-package delay: {} ms'.format(
  synthesizer.get_last_request_id(),
  synthesizer.get_first_package_delay()))

# 保存音频到本地文件
with open('output.mp3', 'wb') as f:
  f.write(audio)

支持的标签和符号

以下是当前支持的标签和符号列表。

基础运算

标签或符号功能公式内容示例公式输入示例朗读效果
+加法2 + 3 = 5$2 + 3 = 5$二加三等于五
-减法3 - 2 = 1$3 - 2 = 1$三减二等于一
\pm正负号\pm 1 \pm 2$\pm 1\pm 2$正负一、正负二
\times乘法2 \times 3 = 6$2 \times 3 = 6$二乘三等于六
×乘法2 × 3 = 6$$2 × 3 = 6$$二乘三等于六
*乘法2 * 3 = 6\(2 * 3 = 6\)二乘三等于六
\div除法6\div2=3\[6\div2=3\]六除以二等于三
÷除法6÷2=3$6÷2=3$六除以二等于三
/除法6/2=3$6/2=3$六除以二等于三
=等于3+5=8$3+5=8$三加五等于八
<小于1< 2$1< 2$一小于二
小于等于3≤5$3≤5$三小于等于五
<=小于等于3<=5$3<=5$三小于等于五
\leq小于等于3\leq5$3\leq 5$三小于等于五
\le小于等于3\le5$3\le 5$三小于等于五
\leqq小于等于3\leqq5$3\leqq 5$三小于等于五
\leqslant小于等于3\leqslant5$3\leqslant 5$三小于等于五
>大于2>1$2>1$二大于一
大于等于5≥3$5≥3$五大于等于三
>=大于等于5>=3$5>=3$五大于等于三
\geq大于等于5\geq3$5\geq 3$五大于等于三
\ge大于等于5\ge3$5\ge 3$五大于等于三
\geqq大于等于5\geqq3$5\geqq 3$五大于等于三
\geqslant大于等于5\geqslant3$5\geqslant 3$五大于等于三
\frac分数2\frac3$\frac {2}{3}$三分之二
^2^1$2^{1}$二的一次方
\sqrt开方\sqrt{9} = 3$\sqrt {9} = 3$根号九等于三
\sqrt开方\sqrt[3]{8} = 2$\sqrt[3]{8} = 2$八的三次方根等于二
%百分号5\%$5\%$百分之五
|绝对值∣3∣=3$|3| =3$三的绝对值等于三
\vert绝对值3\vert=3$\vert 3\vert =3$三的绝对值等于三
\lg对数lg {10}$\lg {10}$lg 十
\log对数\log{5}$\log{5}$log 五
\ln自然对数\lnX$ln {10}$ln 十
!阶乘5!$5!$五的阶乘
()括号(2+1)$(2+1)$括号二加一
\{ \}花括号\{2+1\}$\{2+1\}$花括号二加一

特殊数学符号

标签或符号转换结果公式内容示例公式输入示例朗读效果
\alphaalpha\alpha$\alpha$阿尔法
\Alphaalpha\Alpha$\Alpha$阿尔法
\betabeta\beta$\beta$贝塔
\Betabeta\Beta$\Beta$贝塔
\gammagamma\gamma$\gamma$伽马
\Gammagamma\Gamma$\Gamma$伽马
\deltadelta\delta$\delta$德尔塔
\Deltadelta\Delta$\Delta$德尔塔
\infty无穷大\infty$\infty$无穷大
无穷大$∞$无穷大

几何

标签或符号功能公式内容示例公式输入示例朗读效果
\pi圆周率\pi=3.14159$\pi =3.14159$派等于 3.14159
\sin三角函数\sin 30^\circ=\frac{1}{2}$\sin 30^\circ =\frac {1}{2}$正弦三十度等于二分之一
\cos三角函数\cos 30^\circ=\frac{\sqrt{2}}{2}$\cos 30^\circ =\frac {\sqrt {2}}{2}$余弦三十度等于二分之根号二
\tan三角函数\tan 30^\circ=\frac{\sin 30^\circ}{\cos 30^\circ}$\tan 30^\circ =\frac {\sin 30^\circ}{\cos 30^\circ}$正切三十度等于正弦三十度除以余弦三十度
\csc三角函数\csc A$\csc A$余割 A
\sec三角函数\sec A$\sec A$正割 A
\cot三角函数\cot A$\cot A$余切 A
\angle\angle AB$\angle AB$角 AB
∠AB$∠AB$角 AB
^\circ∠AB = 30^\circ$∠AB = 30^\circ$角 AB 等于三十度
\odot\odot$\odot$
\overset\frown\overset\frown {BC}$\overset\frown {BC}$弧 BC
\rm{Rt}直角\because \rm{Rt}\triangle ABC$\because \rm{Rt}\triangle ABC$因为三角形 ABC 是直角三角形
\mathrm{Rt}直角\therefore AB \perp BC$\therefore AB \perp BC$所以 AB 垂直于 BC
\triangle三角形\triangle ABC$\triangle ABC$三角形 ABC
三角形△ABC$△ABC$三角形 ABC
\parallelogram平行四边形\parallelogram ABCD$\parallelogram ABCD$平行四边形 ABCD
\perp垂直AB \perp BC$AB \perp BC$AB 垂直于 BC
\bot垂直AB \bot BC$AB \bot BC$AB 垂直于 BC
垂直AB ⊥ BC$AB ⊥ BC$AB 垂直于 BC
\parallel平行A\parallel B$A\parallel B$A 平行于 B
\equalparallel平行且等于A\equalparallel B$A\equalparallel B$A 平行且等于 B
\cong全等△ABC\cong△DEF$△ABC\cong△DEF$三角形 ABC 全等于三角形 DEF

条件关系

标签或符号功能公式内容示例公式输入示例朗读效果
\implies推出\implies 1+1=2$\implies 1+1=2$可推出一加一等于二
\iff等价于p\iffq$p\iffq$p 等价于 q
\because因为\because a = b \therefore b=a$\because a = b \therefore b=a$因为 a 等于 b,所以 b 等于 a
\therefore所以\because a = b \therefore b=a$\because a = b \therefore b=a$因为 a 等于 b,所以 b 等于 a

单位

单位必须用 \unit\quantity\mathit\mathrm\rm 标签包裹(例如 \unit{cm})。
标签或符号朗读效果公式内容示例公式输入示例朗读示例
mm毫米5\quantity{mm}$5\quantity{mm}$五毫米
cm厘米5\quantity{cm}$5\quantity{cm}$五厘米
dm分米5\quantity{dm}$5\quantity{dm}$五分米
m5\quantity{m}$5\quantity{m}$五米
km千米5\quantity{km}$5\quantity{km}$五千米
g5\quantity{g}$5\quantity{g}$五克
kg千克5\quantity{kg}$5\quantity{kg}$五千克
t5\quantity{t}$5\quantity{t}$五吨
mm^2平方毫米5\quantity{mm^2}$5\quantity{mm^2}$五平方毫米
cm^2平方厘米5\quantity{cm^2}$5\quantity{cm^2}$五平方厘米
dm^2平方分米5\quantity{dm^2}$5\quantity{dm^2}$五平方分米
m^2平方米5\quantity{m^2}$5\quantity{m^2}$五平方米
km^2平方千米5\quantity{km^2}$5\quantity{km^2}$五平方千米
mm^3立方毫米5\quantity{mm^3}$5\quantity{mm^3}$五立方毫米
cm^3立方厘米5\quantity{cm^3}$5\quantity{cm^3}$五立方厘米
dm^3立方分米5\quantity{dm^3}$5\quantity{dm^3}$五立方分米
m^3立方米5\quantity{m^3}$5\quantity{m^3}$五立方米
km^3立方千米5\quantity{km^3}$5\quantity{km^3}$五立方千米
ml毫升5\quantity{ml}$5\quantity{ml}$五毫升
s5\quantity{s}$5\quantity{s}$五秒
min分钟5\quantity{min}$5\quantity{min}$五分钟
h小时5\quantity{h}$5\quantity{h}$五小时
km/h千米每小时5\quantity{km/h}$5\quantity{km/h}$五千米每小时
g/l克每升5\quantity{g/l}$5\quantity{g/l}$五克每升

限制说明

  • 仅支持中文:不支持其他语言
  • 内容限制
    • 仅支持支持的标签和符号中列出的标签和符号
    • 不支持 Markdown 数学代码块(```math ... ```
    • 分隔符内只能包含公式,混入其他内容可能导致合成结果不准确
  • 兼容模型cosyvoice-v3-flashcosyvoice-v3-plus

常见问题

输入的公式没有被朗读?

  1. 分隔符:确认公式已用 $...$$$...$$\(...\)\[...\] 包裹
  2. 公式复杂度:确认公式仅使用了支持的标签和符号中的内容
  3. 转义字符:确认在 API 请求中,反斜杠(\)已转义为 \\

代码中如何处理反斜杠(\)?

反斜杠(\)在字符串和 JSON 中是转义字符,需要写成 \\。例如:在 Python、Java、JavaScript 等语言中,\frac 应写为 \\frac