音声合成マークアップ言語 (SSML) を使用して合成を改善する

音声合成マークアップ言語 (SSML) は、XML ベースのマークアップ言語であり、これにより、開発者はテキスト読み上げを使用することにより、入力テキストを合成音声に変換する方法を指定することができます。 プレーンテキストと比較して、SSML では、開発者が音声合成出力のピッチ、読み方、読み上げ速度、音量などを微調整できます。 通常の句読点は、ピリオドの後の一時停止、または文が疑問符で終わるときの正しいイントネーションの使用など、自動的に処理されます。

SSML の Speech Service の実装は、World Wide Web コンソーシアムの音声合成マークアップ言語バージョン 1.0 に基づいています。

重要

日本語で使用される漢字、韓国語で使用される漢字、その他の言語で使用される繁体字を含め、中国語の文字は、課金では 2 文字としてカウントされます。 詳細については、価格に関するページをご覧ください。

あらかじめ構築されたニューラル音声とカスタム ニューラル音声

人間の声のようなニューラル音声を使用するか、製品やブランドに固有のカスタム ニューラル音声を作成します。 サポートされている言語、ロケール、および音声の完全な一覧については、言語のサポートに関するページを参照してください。 あらかじめ作成されたニューラル音声とカスタム ニューラル音声の使用の詳細については、「テキスト読み上げの概要」を参照してください。

注意

テキスト読み上げサイトを使って、さまざまなスタイルや音程で読み上げられている例文の音声を聞くことができます。

特殊文字

SSML を使用する場合は、引用符、アポストロフィ、角かっこなどの特殊文字をエスケープする必要があることに注意してください。 詳細については、「Extensible Markup Language (XML) 1.0: Appendix D」 (拡張マークアップ言語 (XML) 1.0: 付録 D) を参照してください。

サポートされている SSML 要素

SSML の各ドキュメントは、SSML 要素 (またはタグ) を使用して作成されます。 これらの要素は、ピッチ、韻律、音量などの調整に使用されます。 次のセクションでは、各要素の使用方法と、要素がいつ必須か省略可能かについて説明します。

重要

必ず二重引用符を使用して属性値を囲んでください。 適切な形式の有効な XML の標準では、属性値を二重引用符で囲む必要があります。 たとえば、<prosody volume="90"> は適切な形式で有効な要素ですが、<prosody volume=90> はそうではありません。 SSML では、二重引用符で囲まれていない属性値が認識されない場合があります。

SSML ドキュメントを作成する

speak 要素はルート要素です。 これは、すべての SSML ドキュメントに必要です。 speak 要素には、バージョン、言語、およびマークアップのボキャブラリ定義などの重要な情報が含まれています。

構文

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="string"></speak>

属性

属性 説明 必須または省略可能
version ドキュメント マークアップの解釈に使用される SSML 仕様のバージョンを指定します。 現行バージョンは 1.0 です。 必須
xml:lang ルート ドキュメントの言語を指定します。 この値には、小文字の 2 文字の言語コード (en など) を含めることができます。 または、この値に言語コードと大文字の国/地域 (en-US など) を含めることができます。 必須
xmlns SSML のドキュメントのマークアップ ボキャブラリ (要素型と属性名) を定義するドキュメントへの URI を指定します。 現在の URI は http://www.w3.org/2001/10/synthesis です。 必須

テキスト読み上げのための音声を選択する

voice 要素は必須です。 テキスト読み上げに使用される音声を指定するために使用されます。

構文

<voice name="string">
    This text will get converted into synthesized speech.
</voice>

属性

属性 説明 必須または省略可能
name テキスト読み上げの出力に使用される音声を識別します。 サポートされている声の全一覧については、言語のサポートに関するページを参照してください。 必須

Note

この例では、en-US-JennyNeural 音声を使用します。 サポートされている声の全一覧については、言語のサポートに関するページを参照してください。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        This is the text that is spoken.
    </voice>
</speak>

複数の音声の使用

speak 要素内には、テキスト読み上げの出力用の複数の音声を指定することができます。 これらの音声はさまざまな言語で指定できます。 音声ごとに、テキストを voice 要素にラップする必要があります。

属性

属性 説明 必須または省略可能
name テキスト読み上げの出力に使用される音声を識別します。 サポートされている声の全一覧については、言語のサポートに関するページを参照してください。 必須

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        Good morning!
    </voice>
    <voice name="en-US-ChristopherNeural">
        Good morning to you too Jenny!
    </voice>
</speak>

話し方を調整する

既定では、テキスト読み上げでは、ニューラル音声のニュートラルな話し方を使用してテキストを合成します。 文章レベルで話し方、その強度、およびロールを調整することができます。

ニューラル音声のサブセットでは、スタイル、その強度、およびロールがサポートされています。 スタイルやロールがサポートされていない場合、サービスでは既定のニュートラル音声が使用されます。 各音声でサポートされているスタイルとロールを確認するには、次のものを使用します。

属性 説明 必須または省略可能
style 話し方を指定します。 話し方は音声に固有です。 ニューラル音声の話し方を調整する場合は、必須です。 mstts:express-as を使用している場合は、スタイルを指定する必要があります。 無効な値を指定すると、この要素は無視されます。
styledegree 話し方の強度を指定します。 指定可能な値:0.01 ~ 2 (0.01 と 2 を含む)。 既定値は、定義済みのスタイル強度を表す 1 です。 最小単位は 0.01 で、ターゲットのスタイルにわずかに傾きます。 値を 2 にすると、既定のスタイル強度が 2 倍になります。 省略可能。 style 属性を設定しない場合、styledegree 属性は無視されます。 話し方の強度調整は、中国語 (標準、簡体字) のニューラル音声でサポートされています。
role 読み上げロールプレイを指定します。 音声は別の年齢と性別として動作しますが、音声名は変更されません。 省略可能。 ロールの調整は、次の中国語 (標準、簡体字) のニューラル音声でサポートされています: zh-CN-XiaomoNeuralzh-CN-XiaoxuanNeuralzh-CN-YunxiNeural、および zh-CN-YunyeNeural

スタイル

mstts:express-as 要素を使用して、陽気さ、共感、落ち着きなどの感情を表現します。 カスタマー サービス、ニュースキャスト、音声アシスタントなど、さまざまなシナリオで音声を最適化することもできます。

構文

<mstts:express-as style="string"></mstts:express-as>

この SSML スニペットは、<mstts:express-as> 要素を使用して話し方を cheerful に変更する方法を示しています。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <mstts:express-as style="cheerful">
            That'd be just amazing!
        </mstts:express-as>
    </voice>
</speak>

次の表に、サポートされている各話し方の説明が示されています。

Style 説明
style="advertisement-upbeat" 製品やサービスの販売促進をする場合に、興奮気味でエネルギーにあふれた語調を表します。
style="affectionate" 高いピッチと音声エネルギーにより、温かみのある優しい語調を表します。 話者は、聞き手の注目を集める状態にあります。 多くの場合、話者のパーソナリティが実際に聞き手の心を引きつけています。
style="angry" 怒ってイライラした語調を表します。
style="assistant" デジタル アシスタント向けの暖かくてリラックスした語調を表します。
style="calm" 話すときの冷静で落ち着いた態度を表します。 他の種類の音声に比べて、語調、ピッチ、韻律がより均一になります。
style="chat" カジュアルでリラックスした語調を表します。
style="cheerful" 肯定的で幸せそうな語調を表します。
style="customerservice" カスタマー サポート向けのフレンドリーでわかりやすい語調を表します。
style="depressed" ピッチとエネルギーが低い憂鬱で沈んだ語調を表します。
style="disgruntled" 軽蔑的で不満のある語調を表します。 この感情の音声は、不満と軽蔑を表します。
style="embarrassed" 話者が不快感を感じているときの、自信がなく気後れしている語調を表します。
style="empathetic" 思いやりと理解を表します。
style="envious" 誰か別の人が持っているものを欲しがるときの羨望の語調を表します。
style="excited" 陽気な希望に満ちた語調を表現します。 素晴らしい何かが起きていて、そのことについて話者は本当に喜んでいるように聞こえます。
style="fearful" 高いピッチ、高い音声エネルギー、速いスピードにより、おびえた神経質な語調を表します。 話者は緊張して不安な状態にあります。
style="friendly" 心地よい魅力的な温かい語調を表します。 誠実で思いやりに満ちている響きです。
style="gentle" 低いピッチと音声エネルギーにより、穏やかで礼儀正しく心地よい語調を表します。
style="hopeful" 温かく思いのこもった語調を表します。 話者に素敵なことが起こりそうに聞こえます。
style="lyrical" 音楽的でセンチメンタルな方法で感情を表します。
style="narration-professional" コンテンツの読み取り用の職業的で客観的な語調を表します。
style="narration-relaxed" コンテンツの読み取り用の感じの良い落ち着いたトーンを表します。
style="newscast" ニュースを読み上げる改まった職業的な語調を表します。
style="newscast-casual" 一般的なニュースを配信するときの汎用的でカジュアルな語調を表します。
style="newscast-formal" ニュースを配信するときの改まった、自信に満ちた、威厳のある語調を表します。
style="poetry-reading" 詩を読みながら、感情的でリズミカルな語調を表現します。
style="sad" 悲しそうな語調を表します。
style="serious" 厳しく威圧するような語調を表します。 話者は、多くの場合、安定したリズムで、堅苦しい緊張感の高い話し方をします。
style="shouting" 遠くの場所や外からでも自分の声がはっきり聞こえるように話します
style="sports-commentary" スポーツ イベントを放送する場合に、リラックスした面白みのある語調を表します。
style="sports-commentary-excited" スポーツ イベントのクライマックスとなる瞬間を放送する場合に、強烈でエネルギッシュな語調を表します。
style="whispering" とても穏やかに話して、静かで優しい響きにします
style="terrified" 早口な震えた声で、非常に怯えている語調を表します。 話者は動揺していて取り乱しているように聞こえます。
style="unfriendly" 冷たく無関心な語調を表します。

話し方の強度

ユース ケースにより合うように話し方の強度を調整することができます。 styledegree 属性でより強いまたはより柔らかい話し方を指定して、音声の表現力を高めたり抑えたりします。 話し方の強度調整は、中国語 (標準、簡体字) のニューラル音声でサポートされています。

構文

<mstts:express-as style="string" styledegree="value"></mstts:express-as>

この SSML スニペットは、styledegree 属性を使用して zh-CN-XiaomoNeural の話し方の強度を変更する方法を示しています。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="zh-CN">
    <voice name="zh-CN-XiaoxiaoNeural">
        <mstts:express-as style="sad" styledegree="2">
            快走吧,路上一定要注意安全,早去早回。
        </mstts:express-as>
    </voice>
</speak>

ロール

話し方とその強度を調整する以外に、role パラメーターを調整して、音声が異なる年齢と性別を模倣するようにすることもできます。 たとえば、女性の音声を模倣するために、男性の音声のピッチを上げ、イントネーションを変更することはできますが、音声名は変更されません。 ロールの調整はこれらの中国語 (標準、簡体字) のニューラル音声でサポートされています。

  • zh-CN-XiaomoNeural
  • zh-CN-XiaoxuanNeural
  • zh-CN-YunxiNeural
  • zh-CN-YunyeNeural

構文

<mstts:express-as role="string" style="string"></mstts:express-as>

この SSML スニペットは、role 属性を使用して zh-CN-XiaomoNeural のロールプレイを変更する方法を示しています。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="zh-CN">
    <voice name="zh-CN-XiaomoNeural">
        女儿看见父亲走了进来,问道:
        <mstts:express-as role="YoungAdultFemale" style="calm">
            “您来的挺快的,怎么过来的?”
        </mstts:express-as>
        父亲放下手提包,说:
        <mstts:express-as role="OlderAdultMale" style="calm">
            “刚打车过来的,路上还挺顺畅。”
        </mstts:express-as>
    </voice>
</speak>

次の表に、サポートされている各ロールの説明が示されています。

ロール 説明
role="Girl" 音声は少女を模倣します。
role="Boy" 模倣は少年を模倣します。
role="YoungAdultFemale" 音声は若い成人の女性を模倣します。
role="YoungAdultMale" 音声は若い成人の男性を模倣します。
role="OlderAdultFemale" 音声は年配の女性を模倣します。
role="OlderAdultMale" 音声は年配の男性を模倣します。
role="SeniorFemale" 音声は高齢の女性を模倣します。
role="SeniorMale" 音声は高齢の男性を模倣します。

読み上げ言語を調整する

既定では、すべてのニューラル音声は、<lang xml:lang> 要素を使用せずに、独自の言語と英語で流暢に読み上げます。 たとえば、英語の入力テキストが "I'm excited to try text to speech" で、es-ES-ElviraNeural 音声を使用した場合、テキストはスペイン語アクセントの英語で読み上げられます。 ほとんどのニューラル音声では、現在、文または単語レベルで <lang xml:lang> 要素を使用して特定の読み上げ言語を設定することはサポートされていません。

<lang xml:lang> 要素を使用することにより、文レベルと単語レベルで en-US-JennyMultilingualNeural ニューラル音声に対して読み上げ言語を調整できます。 en-US-JennyMultilingualNeural ニューラル音声は、14 言語 (英語、スペイン語、中国語など) の多言語です。 サポートされている言語は、<lang> 構文と属性の定義に続く表で説明されています。

構文

<lang xml:lang="string"></lang>

属性

属性 説明 必須または省略可能
lang ニューラル音声で読み上げる言語を指定します。 ニューラル音声の読み上げる言語を調整するために必要です。 lang xml:lang を使用している場合は、ロケールを指定する必要があります。

注意

<lang xml:lang> 要素は、prosody 要素および break 要素と互換性がありません。 この要素では、ピッチ、音調、速度、音量など、一時停止や韻律を調整することはできません。

各ニューラル音声でサポートされている読み上げ言語を確認するには、この表を使用してください。 入力テキストの言語が音声で読み上げられない場合、Speech サービスでは合成された音声が出力されません。

音声 プライマリ ロケールと既定のロケール その他のロケール
en-US-JennyMultilingualNeural en-US de-DE, en-AU, en-CA, en-GB, es-ES, es-MX, fr-CA, fr-FR, it-IT, ja-JP, ko-KR, pt-BR, zh-CN

en-US-JennyMultilingualNeural のプライマリ言語は en-US です。 言語が他の場所で調整されているかどうかにかかわらず、speak 要素内で既定の言語として en-US を指定する必要があります。 この SSML スニペットは、en-US-JennyMultilingualNeural ニューラル音声で de-DE を読み上げる方法を示しています。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
    <voice name="en-US-JennyMultilingualNeural">
        <lang xml:lang="de-DE">
            Wir freuen uns auf die Zusammenarbeit mit Ihnen!
        </lang>
    </voice>
</speak>

speak 要素内には、テキスト読み上げの出力用の en-US を含む複数の言語を指定することができます。 調整された言語ごとに、テキストは言語と一致し、voice 要素にラップされる必要があります。 この SSML スニペットでは、<lang xml:lang> を使用して、読み上げ言語を es-MXen-US、および fr-FR に変更する方法を示します。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
       xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US">
    <voice name="en-US-JennyMultilingualNeural">
        <lang xml:lang="es-MX">
            ¡Esperamos trabajar con usted! 
        </lang>
        <lang xml:lang="en-US">
           We look forward to working with you!
        </lang>
        <lang xml:lang="fr-FR">
            Nous avons hâte de travailler avec vous!
        </lang>
    </voice>
</speak>

中断/一時停止を追加または削除する

break 要素を使用して、単語間に一時停止または区切りを挿入します。 また、これを使用すると、テキスト読み上げによって一時停止が自動的に追加されないようにすることもできます。

注意

この要素を使用して、単語または語句の合成された音声が不自然に聞こえる場合に、その単語または語句のテキスト読み上げの既定の動作をオーバーライドします。 strengthnone に設定して、テキスト読み上げによって自動的に挿入される韻律的な中断を防ぎます。

構文

<break strength="string" />
<break time="string" />

属性

属性 説明 必須または省略可能
strength 次のいずれかの値を使用して、一時停止の相対的な時間を指定します。
  • なし
  • x-weak
  • weak
  • medium (既定値)
  • strong
  • x-strong
省略可能
time 一時停止の絶対時間を秒またはミリ秒 (ms) で指定します。 この値は、5,000 ミリ秒未満に設定する必要があります。 2s500ms は有効な値の例です。 省略可能
Strength 説明
なし、または値が指定されていない場合 0 ミリ秒
x-weak 250 ミリ秒
weak 500 ミリ秒
Medium 750 ミリ秒
Strong 1,000 ミリ秒
x-strong 1,250 ミリ秒

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        Welcome to Microsoft Cognitive Services <break time="100ms" /> Text-to-Speech API.
    </voice>
</speak>

無音を追加する

mstts:silence 要素を使用して、テキストの前後または 2 つの隣接する文の間に一時停止を挿入します。

注意

mstts:silencebreak の違いは、テキスト内の任意の場所に break を追加できる点です。 無音は、入力テキストの先頭または末尾、または隣接する 2 つの文の境界でのみ機能します。

構文

<mstts:silence  type="string"  value="string"/>

属性

属性 説明 必須または省略可能
type 無音を追加する場所を指定します。
  • Leading – テキストの先頭
  • Tailing – テキストの末尾
  • Sentenceboundary – 隣接する文の間
必須
Value 一時停止の絶対時間を秒またはミリ秒で指定します。 この値は、5,000 ミリ秒未満に設定する必要があります。 2s500ms は有効な値の例です。 必須

この例では、mtts:silence を使用して、2 つの文の間に 200 ミリ秒の無音を追加します。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US">
<voice name="en-US-JennyNeural">
<mstts:silence  type="Sentenceboundary" value="200ms"/>
If we’re home schooling, the best we can do is roll with what each day brings and try to have fun along the way.
A good place to start is by trying out the slew of educational apps that are helping children stay happy and smash their schooling at the same time.
</voice>
</speak>

段落や文を指定する

ps の要素は、それぞれ段落と文を表すために使用します。 これらの要素がない場合は、テキスト読み上げで SSML ドキュメントの構造が自動的に決定されます。

p 要素には、テキストと、要素 audiobreakphonemeprosodysay-assubmstts:express-as、および s を含めることができます。

s 要素には、テキストと、要素 audiobreakphonemeprosodysay-asmstts:express-as、および sub を含めることができます。

構文

<p></p>
<s></s>

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <p>
            <s>Introducing the sentence element.</s>
            <s>Used to mark individual sentences.</s>
        </p>
        <p>
            Another simple paragraph.
            Sentence structure in this paragraph is not explicitly marked.
        </p>
    </voice>
</speak>

音素を使用して発音を向上させる

ph 要素は、SSML ドキュメントの発音のために使用します。 ph 要素に含めることができるのはテキストのみで、その他の要素を含めることはできません。 常に人間が判読できる音声をフォールバックとして提供します。

音標文字は音素で構成され、英字、数字、または文字から成り、場合によってはその組み合わせで構成されます。 それぞれの音素は、音声の一意の音を示します。 これは、1 つの文字が複数の発音を表す場合があるラテン文字とは対照的です。 "candy" と "cease" という単語の文字 "c" の異なる発音や、"thing" と "those" の文字の組み合わせ "th" の異なる発音を考えてみてください。

注意

phoneme タグは、ロケールによって機能しない場合があります。

構文

<phoneme alphabet="string" ph="string"></phoneme>

属性

属性 説明 必須または省略可能
alphabet ph 属性の文字列の発音を合成するときに使用する音標文字を指定します。 アルファベット順を指定する文字列は、小文字で指定する必要があります。 指定できるオプションのアルファベットは次のとおりです。
アルファベットは、要素内の phoneme にのみ適用されます。
省略可能
ph phoneme 要素内の単語の発音を指定する音素を含む文字列。 指定した文字列に認識されない音素が含まれている場合、テキスト読み上げでは SSML ドキュメント全体を拒否し、ドキュメントに指定されている音声出力を生成しません。 音素を使用する場合は必須です。

使用例

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <phoneme alphabet="ipa" ph="təˈmeɪtoʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="https://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <phoneme alphabet="sapi" ph="iy eh n y uw eh s"> en-US </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
    </voice>
</speak>

カスタム辞書を使用して発音を改善する

テキスト読み上げでは、単語を正確に発音できない場合があります。 たとえば、会社名、医学用語、絵文字などです。 phoneme および sub のタグを使用することで、SSML で 1 つのエンティティの読み方を定義できます。 複数のエンティティの読み方を定義する必要がある場合は、lexicon タグを使用してカスタム辞書を作成できます。

現在、カスタム辞書では UTF-8 エンコードがサポートされています。

注意

現時点では、5 つの音声 (et-EE-AnuNeural、ga-IE-OrlaNeural、lt-LT-OnaNeural、lv-LV-EveritaNeural、および mt-MT-GarceNeural) ではカスタム辞書はサポートされていません。

構文

<lexicon uri="string"/>

属性

属性 説明 必須または省略可能
uri 外部 PLS ドキュメントのアドレス 必須

使用方法

複数のエンティティの読み方を定義するには、.xml ファイルまたは .pls ファイルとして保存されるカスタム辞書を作成します。 次のコードは、サンプルの .xml ファイルです。

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="ipa" xml:lang="en-US">
  <lexeme>
    <grapheme>BTW</grapheme>
    <alias>By the way</alias>
  </lexeme>
  <lexeme>
    <grapheme> Benigni </grapheme>
    <phoneme> bɛˈniːnji</phoneme>
  </lexeme>
  <lexeme>
    <grapheme>😀</grapheme>
    <alias>test emoji</alias>
  </lexeme>
</lexicon>

lexicon 要素には、少なくとも 1 つの lexeme 要素が含まれています。 各 lexeme 要素には、少なくとも 1 つの grapheme 要素と、1 つ以上の graphemealias、および phoneme 要素が含まれています。 grapheme 要素には、正書法 を説明するテキストが含まれています。 alias 要素は、頭字語または短縮語の発音を示すために使用されます。 phoneme 要素には、lexeme の発音方法を説明するテキストを指定します。 aliasphoneme の要素が同じ grapheme 要素で指定されている場合、alias の優先順位が高くなります。

重要

カスタム辞書では、lexeme 要素は大文字と小文字が区別されます。 たとえば、lexeme "Hello" に対する音素のみを指定した場合、lexeme "hello" では機能しません。

辞書には、適用されるロケールを示すために必要な xml:lang 属性が含まれています。 1 つのカスタム辞書は、設計上 1 つのロケールに制限されています。そのため、別のロケールに適用しても機能しません。

カスタム 辞書を使用して、語句の発音を直接設定することはできません。 頭字語または短縮語の発音を設定する必要がある場合は、まず alias を指定し、次に phoneme をその alias に関連付けます。 次に例を示します。

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>ScotlandMV</alias>
  </lexeme>
  <lexeme>
    <grapheme>ScotlandMV</grapheme>
    <phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
  </lexeme>

注意

音節境界は、IPA では "." です。

また、頭字語または略語に対して期待される alias を直接指定することもできます。 次に例を示します。

  <lexeme>
    <grapheme>Scotland MV</grapheme>
    <alias>Scotland Media Wave</alias>
  </lexeme>

重要

IPA を使用する場合、phoneme 要素に空白を含めることはできません。

カスタム辞書ファイルの詳細については、「Pronunciation Lexicon Specification (PLS) Version 1.0 (発音辞書仕様 (PLS) バージョン 1.0)」を参照してください。

次に、カスタム辞書ファイルを発行します。 このファイルの格納場所に関する制限はありませんが、Azure Blob Storage を使用することをお勧めします。

カスタム辞書を発行した後は、SSML から参照できます。

Note

lexicon 要素は voice 要素内に指定する必要があります。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis"
          xmlns:mstts="http://www.w3.org/2001/mstts"
          xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <lexicon uri="http://www.example.com/customlexicon.xml"/>
        BTW, we will be there probably at 8:00 tomorrow morning.
        Could you help leave a message to Robert Benigni for me?
    </voice>
</speak>

このカスタム辞書を使用すると、"BTW" は "By the way" と読まれます。"Benigni" は、IPA の指定により "bɛˈniːnji." と読まれます。

カスタム辞書では間違いやすいため、Microsoft からカスタム辞書用の検証ツールが提供されています。 それでは、エラーの検出に役立つ詳細なエラー メッセージが表示されます。 SSML とカスタム辞書を Speech サービスに送信する前に、このツールでカスタム辞書を確認します。

制限事項

  • ファイル サイズ: カスタム辞書のファイル サイズの上限は 100 KB です。 ファイルがこのサイズを超えると、合成要求は失敗します。
  • 辞書キャッシュの更新: カスタム辞書は、最初に読み込まれるときに、テキスト読み上げのキーとして URI と共にキャッシュされます。 15 分間は同じ URI の辞書が再読み込みされないため、カスタム辞書の変更が反映されるまでに最大 15 分間待つ必要があります。

Speech サービス発音設定

前のサンプルでは、IPA を使用しています。これは IPA 音素セットとも呼ばれるものです。 IPA は国際標準であるため、IPA を使用することをお勧めします。 一部の IPA 文字には、Unicode で表現するときに "事前構成される" バージョンと "分解される" バージョンがあります。 カスタム辞書では、分解される Unicode のみがサポートされます。

IPA は覚えにくいため、音声サービスでは、7 つの言語 (en-USfr-FRde-DEes-ESja-JPzh-CNzh-TW) の発音セットが定義されています。

カスタム辞書では、ここで示すように、alphabet 属性の値として x-microsoft-sapi を使用できます。

<?xml version="1.0" encoding="UTF-8"?>
<lexicon version="1.0"
      xmlns="http://www.w3.org/2005/01/pronunciation-lexicon"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.w3.org/2005/01/pronunciation-lexicon
        http://www.w3.org/TR/2007/CR-pronunciation-lexicon-20071212/pls.xsd"
      alphabet="x-microsoft-sapi" xml:lang="en-US">
  <lexeme>
    <grapheme>BTW</grapheme>
    <alias> By the way </alias>
  </lexeme>
  <lexeme>
    <grapheme> Benigni </grapheme>
    <phoneme> b eh 1 - n iy - n y iy </phoneme>
  </lexeme>
</lexicon>

詳細な Speech サービスの発音記号については、「Speech サービス発音設定」を参照してください。

韻律を調整する

prosody 要素を使用して、テキスト読み上げ出力のピッチ、音調、範囲、速度、および音量に対する変更を指定します。 prosody 要素には、テキストと、要素 audiobreakpphonemeprosodysay-assub、および s を含めることができます。

韻律属性値は広範囲にわたって変化する可能性があるため、音声認識エンジンは、割り当てられた値を、選択された音声の実際の韻律値を連想するものとして解釈します。 テキスト読み上げでは、サポートされていない値を制限するか、置き換えます。 サポートされていない値の例として、1 MHz のピッチまたは 120 の音量があります。

構文

<prosody pitch="value" contour="value" range="value" rate="value" volume="value"></prosody>

属性

属性 説明 必須または省略可能
pitch テキストのベースラインのピッチを示します。 ピッチは次のように表すことができます。
  • 絶対値。数字の後に "Hz" (ヘルツ) が付いて表されます。 たとえば、「 <prosody pitch="600Hz">some text</prosody> 」のように入力します。
  • 相対値。前に "+" または "-" が付き、後にピッチの変更量を指定する "Hz" または "st" が付いた数字として表されます。 たとえば、<prosody pitch="+80Hz">some text</prosody><prosody pitch="-2st">some text</prosody> などです。 "st" は、変更単位が半音 (標準の全音階での全音の半分) であることを示します。
  • 定数値:
    • x-low
    • low
    • high
    • x-high
    • default
省略可能
contour 音調で、ニューラル音声がサポートされるようになりました。 音調とは音の高さの変化です。 この変化は、音声出力において指定の時間位置にあるターゲットの配列として表わされます。 各ターゲットは、パラメーターのペアのセットによって定義されます。 次に例を示します。

<prosody contour="(0%,+20Hz) (10%,-2st) (40%,+10Hz)">

パラメーターの各セットの最初の値は、ピッチの変更位置をテキストの継続時間の割合として指定します。 2 番目の値は、ピッチの相対値または列挙値を使用して、ピッチを増減する量を指定します (pitch を参照)。
省略可能
range テキストのピッチの範囲を表す値。 range は、pitch の記述に使用されるものと同じ絶対値、相対値、または列挙値を使用して表すことができます。 省略可能
rate テキストの読み上げ速度を示します。 rate は次のように表すことができます。
  • 相対値。既定値の乗数として機能する数字で表されます。 たとえば、値 1 では速度は変更されません。 値 0.5 では、速度が半分になります。 値 3 では、速度が 3 倍になります。
  • 定数値:
    • x-slow
    • slow
    • fast
    • x-fast
    • default
省略可能
volume 読み上げている音声の音量レベルを示します。 音量は次のように表すことができます。
  • 絶対値。0.0 から 100.0 (quietest から loudest まで) の範囲の数字として表されます。 たとえば、75 のようになります。 既定値は 100.0 です。
  • 相対値。音量の変更量を指定する、前に "+" または "-" が付いた数字として表されます。 たとえば、+10 や -5.5 などです。
  • 定数値:
    • silent
    • x-soft
    • soft
    • loud
    • x-loud
    • default
省略可能

読み上げ速度を変更する

読み上げ速度は、単語または文レベルで適用できます。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <prosody rate="+30.00%">
            Welcome to Microsoft Cognitive Services Text-to-Speech API.
        </prosody>
    </voice>
</speak>

音量を変更する

音量の変更は、文章レベルで適用できます。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <prosody volume="+20.00%">
            Welcome to Microsoft Cognitive Services Text-to-Speech API.
        </prosody>
    </voice>
</speak>

ピッチを変更する

ピッチの変更は、文章レベルで適用できます。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        Welcome to <prosody pitch="high">Microsoft Cognitive Services Text-to-Speech API.</prosody>
    </voice>
</speak>

ピッチ曲線を変更する

重要

ピッチ曲線の変更が、ニューラル音声でサポートされるようになりました。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <prosody contour="(60%,-60%) (100%,+80%)" >
            Were you the only person in the room?
        </prosody>
    </voice>
</speak>

強調を調整する

省略可能な emphasis 要素は、テキストの単語レベルの強調を追加または削除するために使用されます。 この要素には、テキストと要素 audiobreakemphasislangphonemeprosodysay-assubvoice のみを含めることができます。

注意

単語レベルの強調の調整は、次のニューラル音声 (en-US-GuyNeuralen-US-DavisNeuralen-US-JaneNeural) でのみ使用できます。

構文

<emphasis level="value"></emphasis>

属性

属性 説明 必須または省略可能
level 適用する強調の強さを示します。
  • reduced
  • none
  • moderate
  • strong

level 属性が指定されていない場合、既定のレベルは moderate です。 各属性の詳細については、強調要素に関するページを参照してください。
省略可能

この SSML スニペットは、"meetings" という単語に中程度の強調を追加するために emphasis 要素を使用する方法を示しています。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="https://www.w3.org/2001/mstts" xml:lang="en-US"> 
    <voice name="en-US-GuyNeural">   
    I can help you join your <emphasis level="moderate">meetings</emphasis> fast. 
    </voice> 
</speak> 

say-as 要素の追加

say-as 要素は省略可能です。 これは、要素のテキストのコンテンツの種類 (数値や日付など) を示す要素です。 この要素により、音声合成エンジンにテキストを発音する方法に関するガイダンスが提供されます。

構文

<say-as interpret-as="string" format="digit string" detail="string"> </say-as>

属性

属性 説明 必須または省略可能
interpret-as 要素のテキストのコンテンツの種類を示します。 種類の一覧については、次の表を参照してください。 必須
format あいまいな形式を持つ可能性のあるコンテンツ タイプに対して、要素のテキストの正確な書式設定に関する追加情報を提供します。 SSML では、それらを使用するコンテンツの種類の形式が定義されます。 次の表を参照してください。 省略可能
detail 読み上げられる詳細のレベルを示します。 たとえば、この属性では、音声合成エンジンが句読点を発音するように要求する場合があります。 detail に対して定義されている標準値はありません。 省略可能

次のコンテンツの種類が interpret-as および format の属性でサポートされています。 次の表に format列が空でない場合 にのみ、format属性を含めます。

interpret-as format 解釈
address テキストはアドレスとして読み上げられます。 音声合成エンジンでは次のように発音されます。

I'm at <say-as interpret-as="address">150th CT NE, Redmond, WA</say-as>

"I'm at 150th Court Northeast Redmond Washington." (私はワシントン州レドモンド 150th コート ノースイーストにいます)。
cardinal, number テキストは基数として読み上げられます。 音声合成エンジンでは次のように発音されます。

There are <say-as interpret-as="cardinal">3</say-as> alternatives

"There are three alternatives" (代替手段は 3 つあります)。
characters, spell-out テキストは、個別の文字 (綴り) として読み上げられます。 音声合成エンジンでは次のように発音されます。

<say-as interpret-as="characters">test</say-as>

"T E S T"。
date dmy、mdy、ymd、ydm、ym、my、md、dm、d、m、y テキストは日付として読み上げられます。 format 属性では、日付の形式を指定します (d=日、m=月、y=年)。 音声合成エンジンでは次のように発音されます。

Today is <say-as interpret-as="date" format="mdy">10-19-2016</say-as>

"Today is October nineteenth two thousand sixteen" (今日は 2016 年 10 月 19 日です)。
digits, number_digit テキストは、個別の数字のシーケンスとして読み上げられます。 音声合成エンジンでは次のように発音されます。

<say-as interpret-as="number_digit">123456789</say-as>

"1 2 3 4 5 6 7 8 9"。
fraction テキストは分数として読み上げられます。 音声合成エンジンでは次のように発音されます。

<say-as interpret-as="fraction">3/8</say-as> of an inch

"three eighths of an inch" (1 インチの 8 分の 3)。
ordinal テキストは序数として読み上げられます。 音声合成エンジンでは次のように発音されます。

Select the <say-as interpret-as="ordinal">3rd</say-as> option

"3 つ目のオプションを選択します"。
telephone テキストは電話番号として読み上げられます。 format 属性には、国番号を表す数字を含めることができます。 たとえば、米国の場合は "1"、イタリアの場合は "39" になります。 音声合成エンジンでは、この情報を電話番号の発音のガイドに使用することができます。 電話番号には、国番号を含めることもできます。その場合は、format 属性の国番号よりも優先されます。 音声合成エンジンでは次のように発音されます。

The number is <say-as interpret-as="telephone" format="1">(888) 555-1212</say-as>

"My number is area code eight eight eight five five five one two one two" (私の番号は市外局番 888 555 1212 です)。
time hms12、hms24 テキストは時刻として読み上げられます。 format 属性では、時刻が 12 時間形式 (hms12) または 24 時間形式 (hms24) のどちらを使用するかを指定します。 時間、分、秒を表す数字を区切るには、コロンを使用します。 有効な時間例をいくつか示します: 12:35、1:14:32、08:15、02:50:45。 音声合成エンジンでは次のように発音されます。

The train departs at <say-as interpret-as="time" format="hms12">4:00am</say-as>

"The train departs at four A M" (この電車は午前 4 時に発車します)。
duration hms、hm、ms テキスト メッセージは期間として読み上げられます。 このformat属性は、期間のフォーム (h=hour、m=minute、および s=second) を指定します。 音声合成エンジンでは次のように発音されます。

<say-as interpret-as="duration">01:18:30</say-as>

"1 時間 18 分 30 秒" として。
発音:

<say-as interpret-as="duration" format="ms">01:18</say-as>

"1 分 18 秒" として。
このタグは、英語とスペイン語でのみサポートされています。
name テキストは個人名として読み上げられます。 音声合成エンジンでは次のように発音されます。

<say-as interpret-as="name">ED</say-as>

[æd] です。
中国語名では、一部の文字は姓に出現するときに異なる発音になります。 たとえば、音声合成エンジンでは、次における仇の発音は

<say-as interpret-as="name">仇先生</say-as>

[chóu] ではなく [qiú] です。

使用方法

say-as 要素に含めることができるのはテキストのみです。

音声合成エンジンは、"Your first request was for one room on October nineteenth twenty ten with early arrival at twelve thirty five PM" (最初のリクエストは 2010 年 10 月 19 日に 1 部屋、午後 12 時 35 分にアーリー アライバル、というものでした) という例を読み上げます。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <p>
        Your <say-as interpret-as="ordinal"> 1st </say-as> request was for <say-as interpret-as="cardinal"> 1 </say-as> room
        on <say-as interpret-as="date" format="mdy"> 10/19/2010 </say-as>, with early arrival at <say-as interpret-as="time" format="hms12"> 12:35pm </say-as>.
        </p>
    </voice>
</speak>

録音されたオーディオを追加する

audio 要素は省略可能です。 これを使用して、事前に録音されたオーディオを SSML ドキュメントに挿入できます。 オーディオ要素の本文には、オーディオ ファイルが使用不可の場合や再生できない場合に読み上げられるプレーン テキストや SSML マークアップを含めることができます。 また、audio 要素には、テキストと、要素 audiobreakpsphonemeprosodysay-as、および sub を含めることもできます。

SSML ドキュメントに含まれるオーディオは、次の要件を満たしている必要があります。

  • オーディオは、インターネットでアクセス可能な HTTPS エンドポイントでホストされている必要があります。 HTTPS は必須であり、ファイルをホストしているドメインは信頼できる有効な TLS/SSL 証明書を提示する必要があります。 待機時間を最小限に抑えるために、オーディオ ファイルをテキスト読み上げエンドポイントと同じ Azure リージョンの Blob Storage に配置することをお勧めします。
  • オーディオファイルは、有効な *.mp3、*.wav、*.opus、* ogg、*.flac、または *.wma ファイルである必要があります。
  • 1 つの応答に含まれるすべてのテキスト ファイルとオーディオ ファイルの合計時間は、600 秒以下でなければなりません。
  • オーディオには、顧客固有の情報やその他の機密情報を含めることはできません。

Note

"audio" 要素は、Long Audio API ではサポートされていません。

構文

<audio src="string"/></audio>

属性

属性 説明 必須または省略可能
src オーディオ ファイルの場所/URL を指定します。 SSML ドキュメントで audio 要素を使用している場合は必須です。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-JennyNeural">
        <p>
            <audio src="https://contoso.com/opinionprompt.wav"/>
            Thanks for offering your opinion. Please begin speaking after the beep.
            <audio src="https://contoso.com/beep.wav">
                Could not play the beep, please voice your opinion now.
            </audio>
        </p>
    </voice>
</speak>

バックグラウンド オーディオを追加する

mstts:backgroundaudio 要素を使用して、バックグラウンド オーディオを SSML ドキュメントに追加したり、オーディオ ファイルをテキスト読み上げと組み合わせたりすることができます。 mstts:backgroundaudio を使用すると、バックグラウンドでオーディオ ファイルをループ処理し、テキスト読み上げの開始時にフェードインし、テキスト読み上げの終了時にフェードアウトできます。

指定されたバックグラウンド オーディオがテキスト読み上げまたはフェードアウトより短い場合は、ループします。 テキスト読み上げより長い場合は、フェードアウトが終了したときに停止します。

1 つの SSML ドキュメントにつき 1 つのバックグラウンド オーディオ ファイルのみが許可されます。 voice 要素内に audio タグを配置することで、SSML ドキュメントにオーディオを追加できます。

Note

mstts:backgroundaudio 要素は、Long Audio API ではサポートされていません。

構文

<mstts:backgroundaudio src="string" volume="string" fadein="string" fadeout="string"/>

属性

属性 説明 必須または省略可能
src バックグラウンド オーディオ ファイルの場所/URL を指定します。 SSML ドキュメントでバックグラウンド オーディオを使用している場合は必須です。
volume バックグラウンド オーディオ ファイルのボリュームを指定します。 指定可能な値: 0 から 100。 既定値は 1 です。 省略可能
fadein バックグラウンド オーディオのフェードインの期間をミリ秒単位で指定します。 既定値は 0 で、"フェードインなし" に相当します。 指定可能な値: 0 から 10000 省略可能
fadeout バックグラウンド オーディオのフェードアウトの期間をミリ秒単位で指定します。 既定値は 0 で、"フェードアウトなし" に相当します。指定可能な値: 0 から 10000 まで。 省略可能

<speak version="1.0" xml:lang="en-US" xmlns:mstts="http://www.w3.org/2001/mstts">
    <mstts:backgroundaudio src="https://contoso.com/sample.wav" volume="0.7" fadein="3000" fadeout="4000"/>
    <voice name="Microsoft Server Speech Text to Speech Voice (en-US, JennyNeural)">
        The text provided in this document will be spoken over the background audio.
    </voice>
</speak>

ブックマーク要素

bookmark 要素を使用すると、SSML にカスタム マーカーを挿入して、オーディオ ストリーム内の各マーカーのオフセットを取得できます。 bookmark 要素は読み取られません。 bookmark 要素は、テキストまたはタグのシーケンス内の特定の場所を参照するために使用できます。 ブックマークは、すべての言語と音声で使用できます。

構文

<bookmark mark="string"/>

属性

属性 説明 必須または省略可能
mark bookmark要素の参照テキストを指定し ます。 必須

例として、次のスニペットのように各花言葉の時間オフセットを調べることができます。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AriaNeural">
        We are selling <bookmark mark='flower_1'/>roses and <bookmark mark='flower_2'/>daisies.
    </voice>
</speak>

Speech SDK を使用してブックマークを取得する

Speech SDK で BookmarkReached イベントをサブスクライブして、ブックマーク オフセットを取得できます。

注意

BookmarkReached イベントは、Speech SDK バージョン 1.16 以降でのみ使用できます。

BookmarkReached イベントは、出力オーディオ データが使用可能になると発生します。これは、出力デバイスへの再生よりも高速です。

  • AudioOffset は、合成の開始から bookmark 要素までの間の出力オーディオの経過時間を報告します。 この時間は 100 ナノ秒単位 (HNS) で測定されます (10,000 HNS は 1 ミリ秒に相当します)。
  • Text は、mark 属性で設定した文字列である bookmark 要素の参照テキストです。

詳細については、「BookmarkReached」を参照してください。

synthesizer.BookmarkReached += (s, e) =>
{
    // The unit of e.AudioOffset is tick (1 tick = 100 nanoseconds), divide by 10,000 to convert to milliseconds.
    Console.WriteLine($"Bookmark reached. Audio offset: " +
        $"{e.AudioOffset / 10000}ms, bookmark text: {e.Text}.");
};

前の例の SSML では、BookmarkReached イベントは 2 回トリガーされ、コンソールの出力は次のようになります。

Bookmark reached. Audio offset: 825ms, bookmark text: flower_1.
Bookmark reached. Audio offset: 1462.5ms, bookmark text: flower_2.

サポートされている MathML 要素

数学用マークアップ言語 (MathML) は、XML 準拠のマークアップ言語であり、これにより、開発者はテキスト読み上げを使用することにより、入力テキストを合成音声に変換する方法を指定することができます。

注意

現在、MathML 要素 (タグ) は、en-USen-AU のロケールのすべてのニューラル音声でサポートされています。

この SSML スニペットでは、MathML 要素を使用して合成音声を出力する方法を示します。 この例のテキスト読み上げ出力は、"a squared plus b squared equals c squared" です。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:mstts="http://www.w3.org/2001/mstts" xml:lang="en-US"><voice name="en-US-JennyNeural"><math xmlns="http://www.w3.org/1998/Math/MathML"><msup><mi>a</mi><mn>2</mn></msup><mo>+</mo><msup><mi>b</mi><mn>2</mn></msup><mo>=</mo><msup><mi>c</mi><mn>2</mn></msup></math></voice></speak>

<math xmlns="http://www.w3.org/1998/Math/MathML">xmlns 属性は省略できます。

MathML 2.0MathML 3.0 の仕様のすべての要素がサポートされています (ただし、MathML 3.0 の初等数学要素を除く)。 semanticsannotationannotation-xml の各要素は音声を出力しないため、無視されます。

注意

要素が認識されない場合は無視され、その中の子要素は引き続き処理されます。

MathML のエンティティは XML 構文ではサポートされていないため、エンティティを表すには対応する Unicode 文字を使う必要があります。たとえば、エンティティ &copy; は Unicode 文字 &#x00A9; で表す必要があります。そうしないと、エラーが発生します。

次の手順

言語サポート: 音声、ロケール、言語