SSML を使用した発音

音声合成マークアップ言語 (SSML) とテキスト読み上げを使用して、音声の発音方法を指定できます。 たとえば、発音を改善するために、音素とカスタム辞書で SSML を使用できます。 SSML を使用して、単語または数式の発音方法を定義することもできます。

SSML 要素を使用して発音を改善する方法の詳細については、以下のセクションを参照してください。 SSML 構文の詳細については、「SSML ドキュメントの構造とイベント」を参照してください。

phoneme 要素

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

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

Note

音素をサポートするロケールの一覧については、言語サポートの表の脚注を参照してください。

phoneme 要素の属性の使用方法を次の表に示します。

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

ipa の場合、1 つの音節を強調するためにこの音節の前にストレス記号を配置するには、単語のすべての音節にマークを付ける必要があります。 それ以外の場合は、このストレス記号の前の音節が強調されます。 sapi の場合、1 つの音節を強調する場合は、単語のすべての音節がマークされているかどうかに関係なく、この音節の後にストレス記号を配置する必要があります。
必須

phoneme の例

phoneme 要素の属性でサポートされている値については、前に説明しました。 最初の 2 つの例では、ph="tə.ˈmeɪ.toʊ" または ph="təmeɪˈtoʊ" の値を指定して音節 meɪ を強調しています。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <phoneme alphabet="ipa" ph="tə.ˈmeɪ.toʊ"> tomato </phoneme>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaNeural">
        <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-AvaNeural">
        <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-AvaNeural">
        <s>His name is Mike <phoneme alphabet="ups" ph="JH AU"> Zhou </phoneme></s>
    </voice>
</speak>
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
     <voice name="en-US-AvaNeural">
        <phoneme alphabet='x-sampa' ph='he."lou'>hello</phoneme>
    </voice>
</speak>

カスタム辞書

phonemesub 要素を使用して、SSML で単一のエンティティ (会社、医療用語、絵文字など) を読み取る方法を定義できます。 複数のエンティティの読み取り方法を定義するには、XML 構造化カスタム辞書ファイルを作成します。 次に、カスタム辞書 XML ファイルをアップロードし、SSML の lexicon 要素で参照します。

Note

カスタム辞書をサポートするロケールの一覧については、言語サポートの表の脚注を参照してください。

lexicon 要素は、Long Audio API ではサポートされていません。 長い形式のテキスト読み上げの場合は、代わりに batch synthesis API (プレビュー) を使用してください。

lexicon 要素の属性の使用方法を次の表に示します。

属性 説明 必須または省略可能
uri .xml.pls のいずれかのファイル拡張子を持つ、パブリックにアクセス可能なカスタム辞書 XML ファイルの URI。 Azure Blob Storage の使用をお勧めしますが、必須ではありません。 カスタム辞書ファイルの詳細については、「Pronunciation Lexicon Specification (PLS) Version 1.0 (発音辞書仕様 (PLS) バージョン 1.0)」を参照してください。 必須

カスタム辞書の例

lexicon 要素の属性でサポートされている値については、前に説明しました。

カスタム辞書を発行した後は、SSML から参照できます。 次の SSML の例では、https://www.example.com/customlexicon.xml にアップロードされたカスタム辞書を参照しています。 Azure Blob Storage、Advanced Media Services (AMS) Storage、GitHub の辞書 URL がサポートされています。 ただし、他のパブリック URL には互換性がない場合があることに注意してください。

<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-AvaNeural">
        <lexicon uri="https://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>

カスタム辞書ファイル

複数のエンティティの読み取り方法を定義するために、.xml.pls のいずれかのファイル拡張子を持つカスタム辞書 XML ファイルでそれらを定義できます。

Note

カスタム辞書ファイルは有効な XML ドキュメントですが、SSML ドキュメントとして使用することはできません。

カスタム辞書ファイルの制限事項をいくつか次に示します。

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

カスタム辞書 XML ファイルでサポートされている要素と属性については、「発音辞書仕様 (PLS) バージョン 1.0」を参照してください。 サポートされている要素と属性の例をいくつか次に示します。

  • lexicon 要素には、少なくとも 1 つの lexeme 要素が含まれています。 辞書には、適用されるロケールを示すために必要な xml:lang 属性が含まれています。 1 つのカスタム辞書は、設計上 1 つのロケールに制限されています。そのため、別のロケールに適用しても機能しません。 lexicon 要素には、辞書で使用されるアルファベットを示す alphabet 属性もあります。 設定可能な値は、ipa および x-microsoft-sapi です。
  • lexeme 要素には、少なくとも 1 つの grapheme 要素と、1 つ以上の graphemealias、および phoneme 要素が含まれています。 カスタム辞書では、lexeme 要素は大文字と小文字が区別されます。 たとえば、lexeme "Hello" に対する音素のみを指定した場合、それは lexeme "hello" に対して機能しません。
  • grapheme 要素には、正書法 を説明するテキストが含まれています。
  • alias 要素は、頭字語または短縮語の発音を示すために使用されます。
  • phoneme 要素には、lexeme の発音方法を説明するテキストを指定します。 音節境界は、国際音声記号では "." です。 国際音声記号を使用するときは、phoneme 要素に空白を含めることはできません。
  • aliasphoneme の要素が同じ grapheme 要素で指定されている場合、alias の優先順位が高くなります。

Microsoft は、カスタム辞書ファイルでエラー (詳細なエラー メッセージを含む) を見つけるのに役立つカスタム辞書の検証ツールを提供しています。 音声サービスを使用して運用環境でカスタム辞書 XML ファイルを使用する前に、ツールを使用することをお勧めします。

カスタム辞書ファイルの例

次の XML の例 (SSML ではない) を、カスタム辞書 .xml ファイルに含めることが考えられます。 このカスタム辞書を使用すると、"BTW" は "By the way" と読まれます。"Benigni" は、IPA の指定により "bɛˈniːnji." と読まれます。

<?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>

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

<?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>Scotland MV</grapheme>
        <alias>ScotlandMV</alias>
    </lexeme>
    <lexeme>
        <grapheme>ScotlandMV</grapheme>
        <phoneme>ˈskɒtlənd.ˈmiːdiəm.weɪv</phoneme>
    </lexeme>
</lexicon>

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

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

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

Speech サービスでは、en-USfr-FRde-DEes-ESja-JPzh-CNzh-HK、および zh-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>

say-as 要素

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

say-as 要素の属性の使用方法を次の表に示します。

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

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

Note

interpret-as 属性の characters 値と spell-out 値は、すべてのテキスト読み上げロケールでサポートされています。 その他の interpret-as 属性値は、アラビア語、カタロニア語、中国語、デンマーク語、オランダ語、英語、フランス語、フィンランド語、ドイツ語、ヒンディー語、イタリア語、日本語、韓国語、ノルウェー語、ポーランド語、ポルトガル語、ロシア語、スペイン語、スウェーデン語のすべてのロケールでサポートされています。

interpret-as format 解釈
charactersspell-out テキストは、個別の文字 (綴り) として読み上げられます。 音声合成エンジンでは次のように発音されます。

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

"T E S T"。
cardinalnumber なし テキストは基数として読み上げられます。 音声合成エンジンでは次のように発音されます。

There are <say-as interpret-as="cardinal">10</say-as> options

"10 個のオプションがあります"。
ordinal なし テキストは序数として読み上げられます。 音声合成エンジンでは次のように発音されます。

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

"3 つ目のオプションを選択します"。
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)。
date dmy、mdy、ymd、ydm、ym、my、md、dm、d、m、y テキストは日付として読み上げられます。 format 属性では、日付の形式を指定します (d=日、m=月、y=年)。 音声合成エンジンでは次のように発音されます。

Today is <say-as interpret-as="date">10-12-2016</say-as>

「今日は 2016 年 10 月 12 日です。」として
発音:

Today is <say-as interpret-as="date" format="dmy">10-12-2016</say-as>

「今日は 2016 年 12 月 10 日です。」として
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 秒" として。
このタグは、英語とスペイン語でのみサポートされています。
telephone なし テキストは電話番号として読み上げられます。 音声合成エンジンでは次のように発音されます。

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

"My number is area code eight eight eight five five five one two one two" (私の番号は市外局番 888 555 1212 です)。
currency なし テキストは通貨として読み上げられます。 音声合成エンジンでは次のように発音されます。

<say-as interpret-as="currency">99.9 USD</say-as>

"99 米ドルと 90 セント"。
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 コート ノースイーストにいます)。
name なし テキストは個人名として読み上げられます。 音声合成エンジンでは次のように発音されます。

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

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

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

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

say-as の例

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-AvaMultilingualNeural">
        <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>

sub 要素

sub 要素を使用して、要素で囲んだテキストの代わりにエイリアス属性のテキスト値を発音する必要があることを示します。 このようにして、SSML に、音声と書き込みの両方の形式を含めます。

sub 要素の属性の使用方法を次の表に示します。

属性 説明 必須または省略可能
alias 要素で囲んだテキストの代わりに発音する必要があるテキスト値。 必須

sub の例

sub 要素の属性でサポートされている値については、前に説明しました。

音声合成エンジンでは、次の例を "World Wide Web Consortium" と読み上げます。

<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">
    <voice name="en-US-AvaMultilingualNeural">
        <sub alias="World Wide Web Consortium">W3C</sub>
    </voice>
</speak>

MathML での発音

数学マークアップ言語 (MathML) は、数学的なコンテンツと構造を記述する XML 準拠のマークアップ言語です。 音声サービスでは、MathML を入力テキストとして使用して、数学的表記を出力音声で適切に発音できます。

Note

MathML 要素 (タグ) は、現在、次のロケールでサポートされています: de-DEen-AUen-GBen-USes-ESes-MXfr-CAfr-FRit-ITja-JPko-KRpt-BRzh-CN

MathML 2.0MathML 3.0 の仕様のすべての要素がサポートされています (ただし、MathML 3.0 の初等数学要素を除く)。

次の MathML 要素と属性に注意してください。

  • <math xmlns="http://www.w3.org/1998/Math/MathML">xmlns 属性は省略できます。
  • semanticsannotationannotation-xml の各要素は音声を出力しないため、無視されます。
  • 要素が認識されない場合は無視され、その中の子要素は引き続き処理されます。

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

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>

次のステップ