話速・音量・間・読み方の実践ガイド✨SSMLで音声を細かく制御しよう!
この記事はこんな方に向けた内容です。
・特定の場所だけ「間」を空けたい方
・一部分だけゆっくり読ませたい方、強調して聞かせたい方
・略語や記号を思いどおりに読ませたい方
・SSMLとリクエストパラメータの使い分けを知りたい方
・Aivis Cloud APIで感情やテンポを部分的に切り替えたい方
⚠️ 本記事の内容は、2026年8月時点の情報です。Aivis Cloud APIの仕様は今後更新される可能性があるため、実装時は最新のAPIドキュメントもあわせてご確認ください。
皆さんこんにちは。
感情豊かな音声合成技術を誰もがかんたんに活用できる未来を目指す、Aivis Project です✨
音声合成を使い込んでいくと、「全体としては良いのに、ここだけ直したい」という場面が出てきます。
「商品名のあとに一拍おいてほしい」
「この数字だけゆっくり読ませたい」
「AIを『エーアイ』と読ませたい」
「一文だけ感情や話し方を変えたい」
こうした部分的な制御に使えるのが、SSML(Speech Synthesis Markup Language)です。
読み上げるテキストの中にタグを書き込むことで、特定の箇所だけ間を入れたり、話速・ピッチ・音量・読み方を変えたりできます。
Aivis Cloud APIは、一般的なSSMLのサブセットに加えて、テンポの緩急や感情表現を制御するAivis独自拡張にも対応しています。
この記事では、Aivis Cloud APIで利用できるSSMLタグと属性、実際の書き方、自然な音声に仕上げるための注意点を順番に解説します📚
【結論】全体はパラメータ、部分はSSMLで制御する
音声全体の話速・音量・感情表現などは、リクエストパラメータで基準を設定します。
そのうえで、特定の語句だけ読み方を変える、部分的に間を入れる、一文だけ感情を変えるといった調整にSSMLを使います。
つまり、リクエストパラメータは音声全体の基準、SSMLは一部分に例外を作るための指定です。
この役割を分けると、原稿が複雑になりにくく、調整箇所も把握しやすくなります✨
【前提】Aivis Cloud APIではSSMLがデフォルトで有効
Aivis Cloud APIの音声合成APIでは、use_ssmlのデフォルト値がtrueです。
そのため、通常はtextにSSMLタグを書くだけで解釈されます。
{
"model_uuid": "YOUR_MODEL_UUID",
"text": "こんにちは。<break time=\"500ms\"/>本日はお集まりいただきありがとうございます。",
"use_ssml": true
}use_ssmlは省略できますが、SSMLを使うリクエストであることを明確にするため、実装上あえてtrueを記述しても構いません。
制御文字を含むテキストに注意
use_ssmlがtrueの場合、textはXMLとして解釈されます。<、>、&などの記号そのものを扱いたい場合は、次のようにHTMLエンティティへエスケープしてください。
5 < 10
A & Bプログラムコードや数式など、SSMLを一切使わずに処理したい場合は、use_ssmlをfalseに設定します。この場合、text全体がプレーンテキストとして扱われます。
XMLとして解析できないSSMLは、自動的にプレーンテキストとして処理されます。タグの閉じ忘れなどがあると制御が効かないため、送信前にタグの対応を確認しておきましょう。
【対応範囲】SSMLのサブセットとAivis独自拡張
Aivis Cloud APIが現在対応している主なタグと属性は次のとおりです。
一般的なSSMLのサブセット
・<break>:無音区間を入れる
・<sub>:表記とは異なる読み方を指定する
・<prosody>:話速・ピッチ・音量を部分的に変える
・<p>:段落として分割する
・<s>:文として分割する
Aivis独自拡張
・<prosody aivis:tempo-dynamics="...">:テンポの緩急を部分的に変える
・<aivis:emotion>:スタイルと感情表現の強さを部分的に変える
SSML仕様のすべてに対応しているわけではなく、<emphasis>や<phoneme>など、現在サポートしていない要素は基本的に無視されます。
他社サービス向けのSSMLを移行する場合は、タグだけでなく、利用できる属性や値も確認してください。
【break】狙った場所に「間」を入れる
<break>は、指定した位置に無音区間を入れるタグです。
本日の議題は3つです。<break time="700ms"/>1つ目は、来期の方針についてです。時間は、秒・ミリ秒・数値で指定できます。
・<break time="0.5s"/>:0.5秒
・<break time="500ms"/>:500ミリ秒
・<break time="0.5"/>:数値のみの場合は秒として解釈
長さを直接決めず、strengthで間の強さを指定することもできます。
・none:0秒
・x-weak:0.1秒
・weak:0.25秒
・medium:0.5秒
・strong:0.75秒
・x-strong:1.0秒
ここで一度区切ります。<break strength="strong"/>続いて、次の項目をご案内します。不正な時間や文字列を指定した場合は、0.5秒の無音が使われます。
ナレーションでは、話速を大きく変える前に、文末や話題の切り替わりへ自然な間を入れるだけでも聞きやすくなることがあります✨
【prosody】一部分だけ話速・ピッチ・音量を変える
<prosody>でテキストの一部を囲むと、その区間だけ話速・ピッチ・音量を変更できます。複数の属性を同時に指定することも可能です。
通常の速さで読みます。<prosody rate="85%">ここだけゆっくり読みます。</prosody>ここから通常に戻ります。<prosody rate="90%" pitch="-10%" volume="soft">重要な注意事項です。</prosody>rateで話速を変える
rateでは、次の形式を利用できます。
・文字値:x-slow、slow、medium、fast、x-fast
・パーセント:85%、110%
・相対変化:-10%、+20%
・数値:0.85、1.1
数値で指定する場合は、0.5から2.0の範囲で処理されます。
volumeで音量を変える
volumeでは、softやloudなどの文字値に加えて、パーセント、相対変化、dB、0.0から2.0の数値を指定できます。
通常の音量です。<prosody volume="loud">ここだけ大きめに読みます。</prosody>モデルやテキストによって聞こえ方は変わるため、実際の生成音声を確認しながら調整してください。
pitchの変更は慎重に
pitchでは、highやlowなどの文字値、+20%のような相対変化、-1.0から1.0の数値を指定できます。
ただし、ピッチをデフォルトの0.0から変更すると、合成音声の品質が劣化する場合があり、生成速度も大幅に低下します。これはリクエストパラメータと<prosody>のどちらで変更した場合も同様です。
声の印象を変えたい場合は、ピッチを大きく動かす前に、利用するモデル・話者・スタイルが目的に合っているかを見直すことをおすすめします。
prosodyの値は全体パラメータへ掛け算されない
<prosody>で指定した値は、その区間に対応するベースパラメータを上書きします。
たとえば、リクエスト全体のspeaking_rateが1.1でも、<prosody rate="85%">で囲んだ区間は0.85倍速として処理されます。1.1 × 0.85 = 0.935倍速になるわけではありません。
SSMLで囲んでいない区間には、リクエストパラメータで指定した全体設定が適用されます。
【Aivis独自拡張】テンポの緩急を部分的に変える
Aivis Cloud APIでは、<prosody>の独自属性としてaivis:tempo-dynamicsを利用できます。
落ち着いて説明します。<prosody aivis:tempo-dynamics="1.5">ここだけ、より生き生きとしたテンポで話します。</prosody>指定範囲は0.0から2.0です。数値が大きいほど、より早口で生っぽい抑揚がついた話し方になります。
音声全体を変える場合はtempo_dynamicsパラメータ、特定の区間だけ変える場合はaivis:tempo-dynamicsを使います。
【Aivis独自拡張】スタイルや感情表現を部分的に変える
<aivis:emotion>を使うと、特定の区間だけ音声合成モデルのスタイルや感情表現の強さを変更できます。
通常の調子でご案内します。<aivis:emotion style="Happy" intensity="1.5">ここだけ明るくお伝えします!</aivis:emotion>styleには、利用するモデルに登録されているスタイル名、またはスタイルIDを指定します。利用できるスタイルはモデルごとに異なるため、AivisHubのモデル情報などで確認してください。
intensityは0.0から2.0で指定します。スタイルを省略して感情表現の強さだけを変えたり、intensityを省略してスタイルだけを切り替えたりすることもできます。
<aivis:emotion intensity="0.5">この区間だけ感情表現を控えめにします。</aivis:emotion>存在しないスタイル名やID、不正なintensityを指定した場合は、その指定が無視され、リクエスト全体のstyle_id・style_name・emotional_intensityが利用されます。
【sub】表記を変えずに読み方だけ差し替える
<sub>は、原稿上の表記を残したまま、音声合成時の読み方だけを差し替えるタグです。
<sub alias="エーアイ">AI</sub>音声合成の最新動向をお伝えします。<sub alias="ヤオヨロズ">八百万</sub>の神aliasが空欄、または省略されている場合は、タグ内の元のテキストが使われます。<sub>は前後を分割せず、連続した一文として音声合成されます。
subとユーザー辞書の使い分け
その原稿で一度だけ読みを変えたい場合は<sub>が手軽です。一方、社名・商品名・人名・専門用語など、複数の原稿で繰り返し使う語はユーザー辞書へ登録すると、指定漏れを防ぎやすくなります。
<sub>ではアクセント型を直接指定できません。表記・読み・アクセントを継続的に揃えたい場合は、Aivis Cloud APIのユーザー辞書を利用してください。
【p・s】段落と文の区切りを明示する
<p>は段落、<s>は文の単位を示すタグです。
どこまでを一つのまとまりとして合成するかを明示できます。
<p><s>本日はお集まりいただきありがとうございます。</s><s>早速ですが、議題に入ります。</s></p><p>の終了後には0.6秒、<s>の終了後には0.3秒の無音が自動的に入ります。内部に<break>や<prosody>などを含めることも可能です。
SSMLが有効で<p>または<s>が記述されている場合、プレーンテキストの改行間隔を指定するline_break_silence_secondsは適用されません。さらに間を調整したい場所には<break>を使います。
【使い分け】音声全体を整えるリクエストパラメータ
音声全体へ適用できる主なパラメータは次のとおりです。
・speaking_rate:話速を0.5から2.0で指定
・volume:音量を0.0から2.0で指定
・pitch:ピッチを-1.0から1.0で指定
・emotional_intensity:選択したスタイルの感情表現の強さを0.0から2.0で指定
・tempo_dynamics:テンポの緩急を0.0から2.0で指定
・leading_silence_seconds:音声先頭の無音時間を指定
・trailing_silence_seconds:音声末尾の無音時間を指定
・line_break_silence_seconds:改行ごとの無音時間を指定
全体設定とSSMLを組み合わせる場合は、次のように記述します。
{
"model_uuid": "YOUR_MODEL_UUID",
"text": "通常の説明です。<prosody rate=\"75%\" volume=\"loud\">ここは重要な注意事項です。</prosody>",
"use_ssml": true,
"speaking_rate": 0.95,
"volume": 1.0,
"tempo_dynamics": 1.1,
"output_format": "mp3"
}emotional_intensityは、ノーマルスタイルでは指定しても効果がありません。感情表現を調整する場合は、感情スタイルを選択したうえで値を変更してください。
ストリーミング再生の開始を早めたい場合は、leading_silence_secondsを0.0にすると、音声先頭の無音を削除できます。
【実践】自然さを保つテキストの分割方法
Aivis Cloud APIは、改行や<sub>以外の対応SSMLタグで区切られた単位ごとに音声を合成し、順番に結合して出力します。
適切に分割すると、生成した音声を順次配信できるため、ストリーミング再生を始めやすくなります。
一方、短い語句ごとに分割すると、文章や感情のつながりが途切れ、生成時の処理も増えます。
基本は、1〜3文程度の自然な意味のまとまりを目安にしてください。
意味や感情が連続する文章は文脈の区切りまで一つにまとめ、部分的な調整が必要な場所だけSSMLで分割します。
textに指定できるのは最大3000文字です。
また、一行が200文字を超える場合は、200文字付近の前後50文字以内にある「。」「.」「!」「?」「全角スペース」の前後で自動的に分割して音声を生成します。
長文を一行へ詰め込まず、細かく区切りすぎないことが、自然さとストリーミング性のバランスを取るポイントです。
よくある質問(FAQ)
Q. 他社サービス向けのSSMLをそのまま使えますか?
そのまま使えるとは限りません。Aivis Cloud APIが対応しているのはSSMLのサブセットとAivis独自拡張です。共通するタグでも、属性・指定値・分割方法が異なる場合があります。
移行時は対応タグだけを残した短いテキストから試し、意図した音声になるか確認してください。
Q. SSMLタグを書いたのに制御が効きません。
次の点を確認してください。
・use_ssmlがfalseになっていないか
・Aivis Cloud APIが対応しているタグ・属性か
・開始タグと終了タグが対応しているか
・XMLの制御文字が正しくエスケープされているか
・属性値が対応範囲内か
不正なXMLはプレーンテキストとして処理され、非対応タグは基本的に無視されます。また、属性値が不正な場合は、タグや属性に応じてデフォルト値またはリクエスト全体の設定が使われます。
Q. LLMにSSML付きの原稿を作らせることはできますか?
可能です。Aivis Cloud APIが対応しているタグと属性だけを使うよう指示し、出力後にXMLとして正しく閉じられているかを検証してからAPIへ送信してください。
SSMLを必要以上に細かく入れさせず、1〜3文程度の意味のまとまりを維持するよう条件を加えると、自然な音声に仕上げやすくなります。
まとめ
・音声全体の基準はリクエストパラメータ、部分的な調整はSSMLで行う
・<break>、<prosody>、<sub>、<p>、<s>に加え、Aivis独自のテンポ・感情制御を利用できる
・<prosody>の値は全体設定へ掛け算されず、対象区間の設定として上書きされる
・繰り返し使う語やアクセントの固定には、<sub>ではなくユーザー辞書を活用する
・自然さを保つため、SSMLは必要な箇所に絞り、意味のまとまりを細かく分割しすぎない
音声の聞きやすさや表現力は、どこで区切り、どこに間を置き、どの言葉をどう伝えるかによって変わります。
まずはリクエストパラメータで全体を整え、気になる箇所へSSMLを少しずつ追加してみてください✨
以上で、この記事はおしまいです。
ご不明点やご相談がある場合には、お問い合わせフォームよりお気軽にご連絡ください。
