オーディオブックやオンライン教育などのシナリオにおいて、複雑な数学的数式を含むテキストを流暢かつ正確な音声に変換することは、長年の課題でした。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/en/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}$ | log 10 |
\log | 対数 | \log{5} | $\log{5}$ | log 5 |
\ln | 自然対数 | \lnX | $ln {10}$ | LN 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 | 無限大(中国語) | \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$ | 角 AB |
∠ | ∠AB | $∠AB$ | ||
^\circ | 学位 | ∠AB = 30^\circ | $∠AB = 30^\circ$ | 角 AB は 30 度 |
\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$ | AB は BC に垂直である |
\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$ | これは、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}$ | 1 リットルあたり 5 グラム |
制限事項
言語制限: 中国語のみをサポートします。
コンテンツ制限:
数式には、サポートされるタグおよび記号に一覧表示されているタグおよび記号のみを使用してください。
Markdown 形式の数式(例:
```math ... ```)はサポートされていません。区切り文字内には数式のみを含めてください。それ以外のコンテンツを含めると、音声合成が不正確になる可能性があります。
モデルの利用可否:
cosyvoice-v2、cosyvoice-v3-flash、cosyvoice-v3-plus、cosyvoice-v3.5-flash、cosyvoice-v3.5-plus
よくある質問
Q:入力した数式が読み上げられません。
以下の項目を確認してください:
区切り文字の確認:数式が
$...$、$$...$$、\(...\)、または\[...\]のいずれかで正しく囲まれているか確認してください。数式の複雑さの確認:数式にサポートされていないタグや記号が含まれていないか確認してください。詳細については、「制限事項」および「サポートされるタグおよび記号」をご参照ください。
エスケープ文字の確認:API リクエストを送信する際に、数式内のバックスラッシュ(
\)が正しく\\としてエスケープされているか確認してください。
Q: コード内でバックスラッシュ (\) を含む文字列を正しく処理するにはどうすればよいですか?
Python、Java、JavaScript などのほとんどのプログラミング言語では、バックスラッシュ(\)は文字列リテラルおよび JSON 形式のデータ内で特別なエスケープ文字として扱われます。そのため、バックスラッシュ自体をエスケープする必要があります。\\ を使用して、1 つの \ を表します。たとえば、\frac はコード内で \\frac と記述します。