在有聲讀物、線上教育等情境中,將包含複雜數學公式的文本轉換為流暢、準確的語音是一大挑戰。CosyVoice 語音合成服務支援解析文本中嵌入的公式,並將其以符合人類閱讀習慣的方式朗讀出來,顯著提升了數學、物理等學科內容的聽覺體驗。
使用方法
將文本中的公式通過特定分隔字元包裹,然後調用語音合成 API 即可。
使用分隔字元標記公式
為了讓引擎識別並解析公式,您需要使用以下任意一種分隔字元將公式內容包裹起來:
使用不同分隔字元不影響合成效果,選擇其中任意一個即可。
$...$$$...$$\(...\)\[...\]
樣本:
這是一道一元二次方程的求根公式:$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$,請仔細計算。調用 API 發起合成請求
在調用語音合成 API 時,將包含標記的文本作為輸入。請注意,在 JSON 格式的請求體或程式設計語言的字串中,反斜線
\是一個逸出字元,因此需要寫成\\。調用樣本(以Python為例):
# coding=utf-8 import dashscope from dashscope.audio.tts_v2 import * # 若沒有將API Key配置到環境變數中,需將your-api-key替換為自己的API Key # dashscope.api_key = "your-api-key" # 模型 model = "cosyvoice-v3-flash" # 音色 # 不同模型版本需要使用對應版本的音色: # cosyvoice-v3-flash/cosyvoice-v3-plus:使用longanyang等音色 # cosyvoice-v2:使用longxiaochun_v2等音色 voice = "longanyang" # 執行個體化SpeechSynthesizer,並在構造方法中傳入模型(model)、音色(voice)等請求參數 synthesizer = SpeechSynthesizer(model=model, voice=voice) # 發送待合成文本,擷取二進位音頻 audio = synthesizer.call("這是一道一元二次方程的求根公式:$x = \\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}$,請仔細計算。") # 首次發送文本時需建立 WebSocket 串連,因此首包延遲會包含串連建立的耗時 print('[Metric] requestId為:{},首包延遲為:{}毫秒'.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[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}$ | log十 |
\log | 對數 | \log{5} | $\log{5}$ | log五 |
\ln | 自然對數 | \lnX | $ln {10}$ | LN十 |
! | 階乘 | 5! | $5!$ | 五的階乘 |
() | 括弧 | (2+1) | $(2+1)$ | 括弧內二加一 |
\{ \} | $\{2+1\}$ | 大括弧二加一反大括弧 |
特殊數學符號
標籤或符號 | 轉換 | 公式內容樣本 | 待合成文本樣本 | 讀法 |
\alpha | alpha | \alpha | $\alpha$ | α
|
\Alpha | \Alpha | $\Alpha$ | ||
\beta | beta | \beta | $\beta$ | β
|
\Beta | \Beta | $\Beta$ | ||
\gamma | gamma | \gamma | $\gamma$ | γ
|
\Gamma | \Gamma | $\Gamma$ | ||
\delta | delta | \delta | $\delta$ | Δ
|
\Delta | \Delta | $\Delta$ | ||
\infty | 無窮大(中) | \infty | $\infty$ | 無窮大
|
∞ | infty (英) | ∞ | $∞$ |
幾何
標籤或符號 | 作用 | 公式內容樣本 | 公式輸入樣本 | 讀法 |
\pi | 派 | \pi=3.14159 | $\pi =3.14159$ | 派等於三點一四一五九 |
\sin (sine | 三角函數 | \sin (sine30^\circ=1\frac2 | $\sin 30^\circ =\frac {1}{2}$ | sine三十度等於二分之一 |
\cos (cosine | $\cos 30^\circ =\frac {\sqrt {2}}{2}$ | cosine三十度等於二分之根號下二 | ||
\tan (tangent | $\tan 30^\circ =\frac {\sin 30^\circ}{\cos 30^\circ}$ | tangent三十度等於cosine三十度分之sine三十度 | ||
\csc (cosecant | $\csc A$ | cosecant A | ||
\sec (secant | $\sec A$ | secant A | ||
\cot (cotangent | $\cot A$ | cotangent A | ||
\angle | 角 | \angle AB | $\angle AB$ | 角A B |
∠ | ∠AB | $∠AB$ | ||
^\circ | 度 | ∠AB = 30^\circ | $∠AB = 30^\circ$ | 角A B 等於三十度 |
\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 | 三角形 | \triangleABC | $\triangle ABC$ | 三角形ABC |
△ | △ABC | $△ABC$ | ||
\parallelogram | 平行四邊形 | \parallelogramABCD | $\parallelogram ABCD$ | 平行四邊形ABCD |
\perp | 垂直 | AB \perp BC | $AB \perp BC$ | A B 垂直於 B C |
\bot | AB \bot BC | $AB \bot 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 | 所以 |
單位
單位需要使用 \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}$ | 五分米 |
m | 米 | 5\quantity{m} | $5\quantity{m}$ | 五米 |
km | 千米 | 5\quantity{km} | $5\quantity{km}$ | 五千米 |
g | 克 | 5\quantity{g} | $5\quantity{g}$ | 五克 |
kg | 千克 | 5\quantity{kg} | $5\quantity{kg}$ | 五千克 |
t | 噸 | 5\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}$ | 五毫升 |
s | 秒 | 5\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-v2、cosyvoice-v3-flash和cosyvoice-v3-plus模型。
常見問題
Q:為什麼我輸入的公式沒有被朗讀出來?
請按以下步驟排查:
檢查分隔字元:確認公式已使用
$...$,$$...$$,\(...\)或\[...\]正確包裹。檢查逸出字元:在通過 API 發送請求時,確認公式中的
\已被正確轉義為\\。
Q:在代碼中如何正確處理包含 \ 的字串?
在大多數程式設計語言(如 Python, Java, JavaScript)的字串字面量和 JSON 資料中,反斜線 \ 是特殊逸出字元。因此,您需要將其自身轉義,即用 \\ 來表示一個 \。例如,\frac 在代碼中應寫作 \\frac。