オーディオブックやオンライン教育において、複雑な数学数式を含むテキストを流暢かつ正確な音声に変換することは大きな課題です。CosyVoice 音声合成サービスは、テキストに埋め込まれた数式を解析し、人間が数学を自然に読むのと同じように読み上げます。これにより、数学および物理学に関するコンテンツの聴取体験が大幅に向上します。
使い方
テキスト内の数式を特定のデリミタで囲み、その後音声合成 API を呼び出します。
デリミタで数式をマークする
エンジンが数式を認識・解析できるよう、数式の内容を以下のいずれかのデリミタで囲んでください。
使用するデリミタの種類は出力品質に影響しません。任意のデリミタを選択できます。
$...$$$...$$\(...\)\[...\]
例:
これは二次方程式の解の公式です:$x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$。注意深く計算してください。API を呼び出して合成を開始する
音声合成 API を呼び出す際は、マークされた数式を含むテキストを入力として渡します。JSON 形式のリクエストボディまたはプログラミング言語の文字列リテラルでは、バックスラッシュ
\がエスケープ文字であるため、\\と記述する必要があります。呼び出し例(Python 使用):
# coding=utf-8 import os import dashscope from dashscope.audio.tts_v2 import * # API キーはシンガポールリージョンと北京リージョンで異なります。「https://www.alibabacloud.com/help/zh/model-studio/get-api-key」から API キーを取得してください。 # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:dashscope.api_key = "sk-xxx" dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY') # この URL はシンガポールリージョン向けです。北京リージョン向けには「wss://dashscope.aliyuncs.com/api-ws/v1/inference」を使用してください。 dashscope.base_websocket_api_url='wss://dashscope-intl.aliyuncs.com/api-ws/v1/inference' # モデル model = "cosyvoice-v3-flash" # 音声 # モデルのバージョンに対応した音声を使用してください: # cosyvoice-v3-flash/cosyvoice-v3-plus:longanyang などの音声 voice = "longanyang" # SpeechSynthesizer をインスタンス化し、モデルおよび音声をリクエストパラメーターとして渡します。 synthesizer = SpeechSynthesizer(model=model, voice=voice) # 合成対象のテキストを送信してバイナリ形式の音声を取得します。 audio = synthesizer.call("これは二次方程式の解の公式です:$x = \\frac{-b \\pm \\sqrt{b^2-4ac}}{2a}$。注意深く計算してください。") # 最初のリクエストでは WebSocket 接続が確立されるため、最初のパケット遅延には接続確立時間が含まれます。 print('[Metric] requestId: {}, first-package latency: {} 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$ | 2 プラス 3 は 5 に等しい |
- | 減算 | 3 - 2 = 1 | $3 - 2 = 1$ | 3 マイナス 2 は 1 に等しい |
\pm | プラスマイナス | \pm 1 \pm 2 | $\pm 1\pm 2$ | プラスマイナス 1 プラスマイナス 2 |
正または負 | ||||
\times | 乗算 | 2 \times 3 = 6 | $2 \times 3 = 6$ | 2 タイムズ 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 | $6/2=3$ | ||
= | 等号 | 3+5=8 | $3+5=8$ | 3 プラス 5 は 8 に等しい |
< | 未満 | 1< 2 | $1< 2$ | 1 は 2 より小さい |
≤ | 以下 | 3≤5 | $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$ | 2 は 1 より大きい |
≥ | 以上 | 5≥3 | $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}$ | 3 分の 2 |
^ | 指数 | 2^1 | $2^{1}$ | 2 の 1 乗 |
\sqrt | 平方根 | \sqrt{9} = 3 | $\sqrt {9} = 3$ | 9 の平方根は 3 に等しい |
\sqrt[3]{8} = 2 | $\sqrt[3]{8} = 2$ | 8 の立方根は 2 に等しい | ||
\% | パーセント | 5\% | $5\%$ | 5 パーセント |
| | 絶対値 | ∣3∣=3 | $|3| =3$ | 3 の絶対値は 3 に等しい |
\vert | 3\vert=3 | $\vert 3\vert =3$ | 3 の絶対値は 3 に等しい | |
\lg | 対数 | lg {10} | $\lg {10}$ | 10 の常用対数 |
\log | 対数 | \log{5} | $\log{5}$ | ログ 5 |
\ln | 自然対数 | \lnX | $ln {10}$ | 10 の自然対数 |
! | 階乗 | 5! | $5!$ | 5 の階乗 |
() | 括弧 | (2+1) | $(2+1)$ | 左括弧 2 プラス 1 右括弧 |
\{ \} | $\{2+1\}$ | 左中括弧 2 プラス 1 右中括弧 |
特殊な数学記号
タグまたは記号 | 変換 | 数式の例 | 音声合成対象のテキスト例 | 音声出力 |
\alpha | アルファ | \alpha | $\alpha$ | アルファ
|
\Alpha | \Alpha | $\Alpha$ | ||
\beta | ベータ | \beta | $\beta$ | ベータ
|
\Beta | \Beta | $\Beta$ | ||
\gamma | ガンマ | \gamma | $\gamma$ | ガンマ
|
\Gamma | \Gamma | $\Gamma$ | ||
\delta | デルタ | \delta | $\delta$ | デルタ
|
\Delta | \Delta | $\Delta$ | ||
\infty | 無限大(第 2 部) | \infty | $\infty$ | 無限大
|
∞ | infty(英語) | ∞ | $∞$ |
幾何学
タグまたは記号 | 用途 | 数式の例 | 数式入力例 | 発音 |
\pi | 円周率 | \pi=3.14159 | $\pi =3.14159$ | 円周率は 3.14159 に等しい |
\sin (sine | 三角関数 | \sin (sine30^\circ=1\frac2 | $\sin 30^\circ =\frac {1}{2}$ | サイン 30 度は 2 分の 1 に等しい |
\cos (cosine | $\cos 30^\circ =\frac {\sqrt {2}}{2}$ | コサイン 30 度は 2 分のルート 2 に等しい | ||
\tan (tangent | $\tan 30^\circ =\frac {\sin 30^\circ}{\cos 30^\circ}$ | タンジェント 30 度は サイン 30 度を コサイン 30 度で割ったものに等しい | ||
\csc (cosecant | $\csc A$ | コセカント A | ||
\sec (secant | $\sec A$ | セカント A | ||
\cot (cotangent | $\cot A$ | コタンジェント A | ||
\angle | 角 | \angle AB | $\angle AB$ | 角 A B |
∠ | ∠AB | $∠AB$ | ||
^\circ | 学位 | ∠AB = 30^\circ | $∠AB = 30^\circ$ | 角 A B は 30 度に等しい |
\odot | 円 | \odot | $\odot$ | 円 |
\overset\frown | 弧 | \overset\frown {BC} | $\overset\frown {BC}$ | 弧 B C |
\rm{Rt} | 直角 | \because \rm{Rt}\triangle ABC | $\because \rm{Rt}\triangle ABC$ | なぜならば 直角三角形 A B C だからである |
\mathrm{Rt} | \therefore AB \perp BC | $\therefore AB \perp BC$ | したがって A B は B C に垂直である | |
\triangle | 三角形 | \triangleABC | $\triangle ABC$ | 三角形 A B C |
△ | △ABC | $△ABC$ | ||
\parallelogram | 平行四辺形 | \parallelogramABCD | $\parallelogram ABCD$ | 平行四辺形 A B C D |
\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$ | 三角形 A B C は 三角形 D E F と合同である |
前提条件
タグまたは記号 | 用途 | 数式の例 | 数式入力例 | 発音 |
\implies | 起動 | \implies 1+1=2 | $\implies 1+1=2$ | 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}$ | 5 ミリメートル |
cm | センチメートル | 5\quantity{cm} | $5\quantity{cm}$ | 5 センチメートル |
dm | デシメートル | 5\quantity{dm} | $5\quantity{dm}$ | 5 デシメートル |
m | メートル | 5\quantity{m} | $5\quantity{m}$ | 5 メートル |
km | キロメートル | 5\quantity{km} | $5\quantity{km}$ | 5 キロメートル |
g | グラム | 5\quantity{g} | $5\quantity{g}$ | 5 グラム |
kg | キログラム | 5\quantity{kg} | $5\quantity{kg}$ | 5 キログラム |
t | トン | 5\quantity{t} | $5\quantity{t}$ | 5 トン |
mm^2 | 平方ミリメートル | 5\quantity{mm^2} | $5\quantity{mm^2}$ | 5 平方ミリメートル |
cm^2 | 平方センチメートル | 5\quantity{cm^2} | $5\quantity{cm^2}$ | 5 平方センチメートル |
dm^2 | 平方デシメートル | 5\quantity{dm^2} | $5\quantity{dm^2}$ | 5 平方デシメートル |
m^2 | 平方メートル | 5\quantity{m^2} | $5\quantity{m^2}$ | 5 平方メートル |
km^2 | 平方キロメートル | 5\quantity{km^2} | $5\quantity{km^2}$ | 5 平方キロメートル |
mm^3 | 立方ミリメートル | 5\quantity{mm^3} | $5\quantity{mm^3}$ | 5 立方ミリメートル |
cm^3 | 立方センチメートル | 5\quantity{cm^3} | $5\quantity{cm^3}$ | 5 立方センチメートル |
dm^3 | 立方デシメートル | 5\quantity{dm^3} | $5\quantity{dm^3}$ | 5 立方デシメートル |
m^3 | 立方メートル | 5\quantity{m^3} | $5\quantity{m^3}$ | 5 立方メートル |
km^3 | 立方キロメートル | 5\quantity{km^3} | $5\quantity{km^3}$ | 5 立方キロメートル |
ml | ミリリットル | 5\quantity{ml} | $5\quantity{ml}$ | 5 ミリリットル |
s | 2番目 | 5\quantity{s} | $5\quantity{s}$ | 5 秒 |
min | 分 | 5\quantity{min} | $5\quantity{min}$ | 5 分 |
h | 時 | 5\quantity{h} | $5\quantity{h}$ | 5 時間 |
km/h | キロメートル毎時 | 5\quantity{km/h} | $5\quantity{km/h}$ | 5 キロメートル毎時 |
g/l | グラム毎リットル | 5\quantity{g/l} | $5\quantity{g/l}$ | 5 グラム毎リットル |
制限事項
言語対応:中国語のみ。
コンテンツ制限:
数式の内容は、「サポートされるタグおよび記号」の要件を満たす必要があります。
Markdown 形式の数式(例:
```math ... ```)はサポートされていません。デリミタ内には数式のみを記述してください。その他のコンテンツを含めると、音声合成結果が不正確になる可能性があります。
モデル対応:
cosyvoice-v2、cosyvoice-v3-flash、およびcosyvoice-v3-plusのみがサポートされています。
よくある質問
Q:数式が読み上げられません。
以下の項目を確認してください。
デリミタの確認:数式が以下のいずれかのデリミタで囲まれているか確認してください。
$...$、$$...$$、\(...\)、または\[...\]。数式の複雑さの確認:数式がサポートされるタグおよび記号のみを使用しているか確認してください。「制限事項」および「サポートされるタグおよび記号」をご参照ください。
エスケープ文字の確認:API を通じてリクエストを送信する場合、数式内のすべてのバックスラッシュ
\が\\としてエスケープされているか確認してください。
Q:コード内でバックスラッシュ \ を含む文字列を適切に処理するにはどうすればよいですか?
Python、Java、JavaScript などのほとんどのプログラミング言語では、文字列リテラルおよび JSON 形式のデータ内でバックスラッシュ \ は特殊なエスケープ文字です。そのため、バックスラッシュ自体をエスケープするには、\\ を使用して単一の \ を表す必要があります。たとえば、\frac はコード内で \\frac と記述する必要があります。